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 😂。



