作者: 陳斌(redguardtoo)
注意: 我會長期維護本文,請參考下面的更新時間
更新時間: 2012-06-05 二
原創時間: 2011-05-08 日
我在個人電腦使用Linux案頭已5年(工作中使用Linux的時間要長的多),深深體會到了Linux案頭的好處.
我是工程師,電腦geek,非常重視效率.對於我這樣的典型使用者來說,Linux案頭給我提供了豐富強大的工具,使我高效地工作娛樂.
雖然Linux是我用到現在最方便強大的作業系統(我對Windows和OS X也很有經驗),但是沒有完美的軟體,有時我也會在Linux下遇到些問題(相比於Windows已經少很多了).只要遵循科學理性的原則,這些問題都可以輕易解決.而且我可以保證,Linux下的問題就這幾個,我這篇短文基本上可以讓你在Linux世界裡遊刃有餘了.
Linux有很多發行版,我下文以Arch Linux為例.ArchLinux的特點(缺點?)是軟體更新快,最新的軟體包未必經過長時間的嚴謹測試.所以Arch Linux絕不是發行版中最不折騰人的,我能和它和諧,和其他發行版如Ubuntu之類就不用說了.
從某種角度來看,Linux案頭要比Windows案頭好用得多.前提條件是,
- 堅持適合自己的原則.例如,我的一個原則是為了未來的回報而近期進行投資是值得的,所以我會花很多的時間學習軟體的快速鍵(快速鍵長期來說操作比滑鼠高效),那種只能用滑鼠操作的軟體對我來說就是"壞"軟體.
- 使用者有理性思維. 以檔案管理工具來說,在Windows平台下我長期使用並熱愛Total Commander,在Linux下平台下也有幾款檔案管理工具在介面和功能上和Total Commander上非常接近,自然從感情上講我會愛屋及烏.但是我最後還是選擇了以Emacs作為主要的檔案管理工具,以醜陋的Midnight Commander為輔助,因我已確定選擇軟體的總的原則是儘可能用少的的軟體做儘可能多的事.具體說來就是以Emacs做任何事,如果一定要用其他軟體輔助Emacs,快速鍵也應是Emacs的.Midnight
Commander符合該條件
- 科學的方法和工具.細節見後文,我要強調的是具體的工具和方法都是有多個高手驗證過,有官方文檔支援的.對我而言,科學的含義,就是前人反覆驗證過的,過去100%成功也許能保證現在將來可能成功(因工具環境不斷在變化,所以只是有可能).除此以外都不叫科學.
Table of Contents
- 1 基本原則,少而精
- 1.1 數量少
- 1.2 品質高
- 1.3 功能強
- 1.4 依賴小
- 1.5 介面通用
- 2 符合我標準的軟體舉例
- 2.1 編輯器
- 2.2 瀏覽器
- 2.3 Shell
- 2.4 案頭
- 2.5 其他
- 3 軟體的使用也需維護
- 3.1 將/etc目錄下的預設設定檔備份
- 3.2 將使用者目錄下的使用者定製設定檔備份
- 3.3 將軟體版本降級
- 3.4 雲備份
- 3.5 備份作業系統
- 3.6 閱讀官方文檔
- 3.7 加入社區
- 3.8 虛擬機器的用處
- 4 常用軟體的診斷修複
- 5 系統啟動失敗的修複
- 6 聯絡我
1 基本原則,少而精
具體來說,就是軟體數量少,品質高,功能強,依賴小,介面通用.
1.1 數量少
這點很重要,只有需要使用的軟體少(但是完成的工作一分都不能少),才可能精通.
軟體少的另外一個好處是,系統維護的工作量也少,例如你發覺某個軟體的快速鍵和另一個未知軟體有衝突,找出另一個未知軟體的工作量和你在系統上安裝的軟體數量有重大關係.
1.2 品質高
我對於品質的要求很簡單:
- 久經考驗(例如Emacs的開發曆史有35年以上)
- 聰明人認同
何為久經考驗,何為聰明人,我相信是可以找出很多客觀的指標的.指標定的越嚴格,篩選後的結果就越少.
1.3 功能強
原諒我又用Emacs舉例,用Emacs可以看網頁,收郵件,寫程式,做筆記,寫部落格,讀rss.
附帶說明一下,在我羅列的這些功能中,Emacs都是極為優秀,很少有同類軟體可以媲美.
1.4 依賴小
例如,命令列軟體不依賴於QT,GTK之類圖形介面庫,安裝包小很多,運行時消耗記憶體也小,啟動快.
1.5 介面通用
例如,我寫程式用emacs,一般操作用bash shell,檔案管理用Midnight Commander(mc),上網用Firefox,但是通過適當的設定(Firefox需要安裝外掛程式keysnail,其他軟體只要用最新版即可),他們的快速鍵都是Emacs的.
2 符合我標準的軟體舉例2.1 編輯器
我用Emacs,考慮到它可以做任何事,可以認為它是輕量級的.
Vim也用,萬不得已用nano,結束了.
2.2 瀏覽器
沒多少選擇,Firefox.Firefox是我更新頻繁的軟體.
2.3 Shell
我用bash,在我的.bashrc中有如下一行,
export HISTSIZE=200000
確保我輸入的所有命令都不會丟失,因為我說過,我偏愛命令列軟體,但是要記住常用命令列會消耗我很多腦細胞,這是不符合投資收益原則的.所以我讓shell替我記住.我只要記住按Ctrl+R可搜尋曆史就好了.
2.4 案頭
Gnome,KDE是絕對不會考慮的.我使用更輕量級的musca,安裝包大小才100K.
musca的優點是平鋪案頭(例如左邊開一個視窗寫代碼,右邊開個視窗看PDF文檔)極為方便,學習曲線很低(同類軟體我大概試用過10多個了,包括主流的Gnome,KDE,XFCE4).
2.5 其他
- 網路管理我用Netcfg(命令列)而不是wicd,因為wicd的依賴多而且曾經折騰過我,播放視頻我用mplayer(命令列),等等.
- 硬碟清理我用bleachbit(清理常用軟體產生的臨時檔案),localepurge(刪除無用的多國語言),ncdu(檢查硬碟如何被佔用)
- 檔案管理工具我用Midnight Commander.其鍵盤快速鍵可設定為Emacs的快速鍵,對於我這種記不住快速鍵的人很有用.
3 軟體的使用也需維護
安裝軟體在包管理系統的協助下很簡單.麻煩的是最新軟體有時候不穩定,這通常是因為軟體的設定檔更新引起的.
3.1 將/etc目錄下的預設設定檔備份
Linux的軟體預設設定檔在/etc/目錄下.我使用分布式版本控制軟體git管理/etc目錄,分布式版本控制系統好處很多,最大好處就是資料到處有完整備份,非常安全.具體細節請參考wikipedia.
同類軟體mercurial,bzr也可,要考慮的因素是第三方伺服器是否支援(對分布式版本控制軟體來說,第三方伺服器不是必需的).
在Arch Linux上每次更新完系統或者安裝最新軟體包後,可以考慮手動將/etc目錄下的檔案用git備份(Debian可自動備份).
sudo git add /etc/sudo git commit -am "backup"
一旦某個軟體工作不正常了,可以檢查其/etc下預設設定檔的修改紀錄,將設定檔恢複到上一個正常工作的版本.
sudo git log /etc/mysql/my.cnf #check historysudo git checkout commit_ref(version) /etc/mysql/my.cnf #restoren file
/etc/目錄下的臨時檔案不需要備份,以下是我的.gitignore
*~*.pacnew*.pacsave*.swp*.pacorig*.swpmtab
3.2 將使用者目錄下的使用者定製設定檔備份
我也用git將個人使用者的設定檔(在/home/username/下的設定檔)備份到github的伺服器上.這裡必須用第三方伺服器同步配置,因為我使用多台電腦.
具體操作可寫成長篇大論,這裡不展開了.
3.3 將軟體版本降級
最新版本的軟體可能不穩定,這時降級是必要的.
請參考Archwiki,實際上很簡單,安裝名為downgrade的軟體,然後讓它幹所有的體力活就行了.
packer downgrade
3.4 雲備份
電子書,多媒體檔案用專業的雲備份服務更好,我推薦Dropbox.
Dropbox實在是妙用無窮(例如,國外有人把Dropbox和git結合使用),我只是用了其最簡單的功能.
順便說一下,國內的服務不要用,安全原因,不言自明.
3.5 備份作業系統
不用經常作,又有雲備份,又有分布式版本控制系統,怕什麼.
備份整個硬碟是用Clonezilla,只是備份作業系統的話用以下命令,
tar zcvpf mylinux.tgz --exclude=/proc/* --exclude=/lost+found --exclude='mylinux.tgz' --exclude=/mnt/* --exclude=/home/username/* --exclude=/sys/* /
我建議用前者,因為省事.
假設你採用clonezilla備份作業系統,我建議將/目錄(作業系統目錄)和/home目錄放在兩個分區內.
如果能夠按照我前面的少而精的原則選擇軟體的話,作業系統目錄的分區並不需要很大(8G足夠了),目前我的常用軟體和作業系統的所佔空間控制在3G左右(我的例子比較極端,因為我的netbook只有4G硬碟),這樣clonezilla的操作就很快.
3.6 閱讀官方文檔
照著ArchWiki安裝軟體,一般不會有問題.
3.7 加入社區
緊急客戶支援還是用IRC比較好,沒用過IRC的可以裝firefox外掛程式Chatzilla體驗一下.
3.8 虛擬機器的用處
我虛擬機器軟體使用VirtualBox,虛擬機器為Windows XP,該作業系統我會定期更新安全補丁.軟體只安裝了IE和firefox.該作業系統我只用來操作網路銀行.每次操作完畢,我會重設虛擬機器狀態到操作前的snapshot.
4 常用軟體的診斷修複
即使採用了上述做法,一年中也會有一次倒黴.就是我要用的某個版本的某個軟體出問題了.沒人能幫忙,不能降級,改軟體配置也沒用,也沒有可用的錯誤資訊.
問題看起來很難,事實上5分鐘就能搞定.這往往是因為某軟體需要的第三方庫的版本出問題了.
比如說firefox不能啟動,運行如下命令調試,
strace -o err.txt firefox
讀一下err.txt就可以知道是哪個庫出問題了.相信我,這是不需要任何編程知識的,猜加google就可以了.
你知道哪個庫檔案出問題了(保險起見,ldd firefox確認一下).比如/usr/lib/libpng.so.14找不到,簡單的解決辦法是用另一個版本的庫檔案代替.
如果/usr/lib/libpng.so.15是存在的,我們可以用該庫頂替libpng.so.14,
sudo ln -s /usr/lib/libpng.so.15 /usr/lib/libpng.so.14
通常這樣就行了.
萬一冒名頂替不行,我們就必鬚根據丟失的庫檔案尋找需要安裝的軟體包(pacman沒用的),
pkgfile libpng
pkgfile屬於軟體包pkgtools,所以你必須安裝pkgtools,
packer -S pkgtools-git
5 系統啟動失敗的修複
解決方案很簡單,用常見的Linux啟動光碟片啟動,然後chroot,其作用是以指定目錄作為作業系統根目錄(root directory),然後以此根目錄為基準建立一個新的環境.
細節請參考https://wiki.archlinux.org/index.php/Change_Root.
比如說我升級kernel後系統啟動失敗,而老的kernel沒有備份,我可以光碟片啟動電腦,然後chroot,再使用上文所提的工具升級或者降級kernel.
6 聯絡我
這是我的twitter和google plus,也可以通過我的email<chenbin DOT sh AT GMAIL DOT COM>聯絡我.
我的主力部落格為http://blog.binchen.org.