为什么我使用 Linux 开发
Linux 能用吗?
当我对 Linux 的印象似乎还停留在黑乎乎的命令行界面上的时候,我身边的一些朋友告诉我或者建议我使用 Linux 时,我会一脸惊讶的问他,那个怎么用(来开发或者日常使用)?
Linux 有强大的命令行程序
Fish Shell
首先说说我每天打交道最多的 Shell 吧,我给自己设置的默认 Shell 是 Fish。你还可以搭配 fzf 这个软件,实现高级的命令补全功能。
Tig
Git 也是日常开发中使用频率最高的软件之一,Tig 则是 Git 的一个命令行界面,不仅可以展示图形化提交记录,还能对提交信息进行全文搜索,除此之外,这也是我找到的第二个能够快速打开超大 git 仓库的 Git UI,另一个是 Windows 专属的 Git Extensions。
lazydocker
Docker 可以让我部署应用变得更加容易,而 lazydocker 则可以让我用一种“懒人”的方式来管理本机的 Docker。
Lazy Docker —— 简单易用的 Docker 管理面板.
管理软件包
不管是哪个 Linux 发行版,都会自带官方钦定的软件包管理器。pacman + AUR + yay 是我最喜欢的软件包管理方式,pacman 用来安装来自官方仓库的软件,如果官方仓库没有收录某个软件,那么 AUR 里面大概率会收录它,你甚至可以在 AUR 中找到 JetBrains 全家桶和 Xilinx IDE。而 yay 则允许我用统一的方式来安装来自不同软件源的软件包,极大的提高了使用体验。
我的电脑
Windows 桌面上有一个叫做“我的电脑”的图标,但是这并不意味着我真的能完全掌控我的这台电脑。我没法随意的修改系统的字体,我没法在命令行中显示 Emoji(9102 年,微软终于缓解了这个问题),我没法设置系统的默认快捷键,我没法根据自己的喜好做很多的事情,在一些不是 PC 的设备上,我甚至没法关掉开机的“duang!!!”。不,这不是我的电脑。
而使用 Linux,我就再也没有受过这种限制,先在 Wiki 上查找相关的说明文档,然后根据文档去修改对应的配置文件,出了问题可以去问问神奇的搜索引擎,翻车死机了也没关系,插上 LiveCD 一顿操作又可以让电脑正常的开机工作。就这样,我在一次次不满现状、配置系统、翻车救砖、成功修改的循环中收获了许多,也让我定制出了我想要的工作环境。如果你想了解我的翻车收获,可以看看下面的一些文章:
日常开发使用体验
让我持续的使用 Linux 作为日常主力操作系统的原因非常简单,因为跟他一起工作非常的舒适。
编写代码
编写代码的工具无非就两种:IDE 与编辑器。我最常用的 IDE 是 JetBrains Rider,它一站式解决了我前端、后端以及数据库开发的问题。如果只是用来编写简单的文本,我首选的是 neovim,搭配 SpaceVim,颜值效率两不误。除此之外,vscode 也是我会用到的编辑器之一,但是我不怎么用它来写前端代码,只有在需要编写 PowerShell 脚本以及 Fake 脚本的时候我才会用到它。
即时通讯
邮件是最有效的沟通方式,所以 Thunderbird 肯定少不了。国产聊天应用,例如 QQ 和微信,我都安装在手机上,因为这上面只会有闲聊的消息,所以只需要使用 KDE Connect 同步一下消息通知就好了。我所在的开发团队使用钉钉进行沟通,还好钉钉的网页版比微信网页版强很多,所以安装一个 Electron 套壳的钉钉客户端就非常足够了,当然,有时候我比较懒的话,就直接使用 KDE Connect 来同步钉钉的消息,并不会在电脑上启动客户端。
窗口管理
在 Linux 上,我可以选择自己喜欢的窗口管理方式,我习惯按照窗口的使用场景把它们安排到不同的虚拟桌面上,这样可以减少在窗口选择器中切换窗口的时间。对于常用的窗口,例如 Konsole
终端模拟器,我给他分配了 Meta
+ Enter
的快捷键,让我可以随时随地的唤出我的终端命令行,而不用在众多的窗口中寻找。
Yakuake 是一个全局下拉式终端模拟器,可以做到随叫随到,所以我专门用它来运行一些与工作无关的命令,例如在网上学习到了新的 shell 黑魔法,只需要按下 Ctrl
+ Alt
+ Space
下拉终端就可以在自己的电脑上尝试运行了。
Office 全家桶
虽然我的主力系统是 Linux,但是我仍然能够享受到 Office 全家桶的便利。OneDrive + Office Online 基本可以处理工作中会遇到的绝大多数的 Office 文件了。而 OneDrive 云存储也可以通过使用 rclone 的方式挂载到我的电脑上,在使用体验上与本地硬盘并没有太大的差别。
执行后台任务
原先使用 Windows 的时候,可以用 IIS 来守护开发时要用的 AspNetCore 进程,现在切换到了 Linux,我选择了使用 PM2 + Nginx Docker 作为替代品,相较于 IIS,这种运行后台进程的方式更加轻量,不会涉及到权限的问题,而且出了问题也容易排查。
对于数据库这样的软件,我并没有选择用安装软件包的方式来运行它们,Docker 更适合这类进程,通过一个 docker-compose 就可以让我实现一键启动开发环境的效果。
而像 Aria2 以及 rclone 这样的软件,因为它们在运行的时候需要访问我的文件系统,所以就不适合使用 Docker 来运行(Docker 会污染文件权限)。这个时候用户级的 Systemd 就非常好用了,用户登录时启动、失败自动重试、网络连接后启动,这些需要都可以用 Systemd 来实现。
FreeDesktop 带来的便利
因为有 FreeDesktop 的存在,所以我可以非常容易的利用桌面环境提供的功能。
open
命令可以用来在终端使用关联的应用程序打开一个文件;xclip
则可以用来操作剪切板中的内容; notify-send
则可以用来创建通知消息。这些工具可以帮助我打破终端与桌面环境的次元壁,例如在完成一个长时间任务后发送一个系统通知提醒我,非常的便利。除了这些命令行程序外,一些有图形化界面的软件也可以利用 FreeDesktop 带来的 API 来开发酷炫的功能。例如,如果你使用 fcitx 的话,按下 Ctrl
+ ;
,就可以查看剪切板的历史记录,KDE 自带的 Clipboard 挂件也有类似的功能,而且更加强大。
libinput-gestures 也是一款非常实用的软件,它可以用来自定义触控板手势,支持的手势种类多,而且可以用来触发任意的命令,是自定义系统行为不可或缺的软件。
最后
这篇文章受启发于 为什么建议大家使用 Linux 开发,我与这篇文章的作者的观点不太一样,我并不会建议其他人随随便便就把开发环境切换到 Linux,因为当一个人对 Windows 以及 MACos 感到非常不满的时候,他自然就会选择使用 Linux —— Talk is cheap, show me your dot files 😂。