閱聞 tsung 分享的Debian / Ubuntu Linux 空間釋放 – 清除沒用的檔案一文,也來分享一下自己清理作業系統環境的方法。

自己是 Debian GNU/Linux 的長年使用者。Debian 使用者有個習慣,由於系統實在太穩定,裝好之後終年難得重灌,久而久之系統就會留下徒然佔用空間的廢棄檔案。這些檔案除了使用者個人資料外,不外乎快取、歷史記錄、設定等等,此外就是曾經安裝、編譯軟體時所裝的開發函式庫。這裡分享幾個常用的清理檔案方法。

Personal data

最後是個人檔案,你有許多目錄,需要先找出最佔用磁碟空間的目錄,你可以透過指令列用 du 來看 disk usage. 常用的參數會像如下

du --max-depth=1 -x | sort -n

這個指令的意思是查詢當下目錄所佔用的大小,並依照小到大排列,-x 的意思是只查詢一個檔案系統,方便你找出單一檔案系統中最大的目錄。你也可以用 -h 讓 du 列出易讀格式

如果你不是 geek, 我推薦使用 baobao,圖形化操作界面,加上磁碟佔用派圖,很容易抓出佔用最多空間的檔案。KDE 使用者可以用 Filelight

Image source: Disk Usage Analyzer by Fabio Marzocca

依照我個人而言,佔用最多空間的往往是電子郵件,信件中常常夾了簡報檔、文件等等。如果已經歸檔結案,我常常會把夾檔刪掉,只留下郵件本文存檔。若你用 Evolution,我推薦自己寫得 evolution-remove-attachments

apt-tools cache

從最簡單的系統安裝設定開始,系統就已經裝了許多你用不著得檔案。第一個常見的就是各國語系的說明文件與翻譯,決大多數使用者從來不會去看其他語言的文件,像是我從來沒讀過法文、甚至日文、韓文的 man pages,也不會使用這些語系的使用界面。而大部分軟體因為國際化的關係,往往裝了數國翻譯,如果是 OpenOffice 或 GNOME, KDE 這些大型軟體計劃,佔用的空間還不少呢。你可以安裝 localepurge 來移除不需要的語系。第一次安裝時,系統會問你要保留哪些語系,回答過一次,未來每次透過 apt/aptitude 安裝套件時,它都會自動清理一次。

下載後的 deb 安裝檔常常也佔用很大空間,特別是 OpenOffice, Xorg, kernel 等等,如果你常常升級系統,不知不覺系統就會存下很多暫存的 deb 安裝檔。你可以用 apt-get 來清除它們。

# apt-get autoclean
# apt-get clean

其中 autoclean 是清掉舊版的 deb,系統會保留一份最新版本安裝檔。我個人都使用 autoclean,以免發生意外的時候,沒有最新版本的 deb 檔可以重新裝。一般使用者可以直接以 clean 清除快取。

apt-tools dependency

使用 Linux 時,或多或少會自己編譯一些軟體,需要編譯軟體時,就會需要相關的函式庫。但常常裝完砍掉後,這些相關的開發函式庫還留在系統中變成軟體孤兒。

你除了應該儘量用 apt-get autoremove 或 aptitude 外,也可以用 deborphan 來找軟體孤兒。最常見 (也很危險) 的用法是

# aptitude remove $(deborphan --nice-mode --guess-all)

這樣deborphan 會推估所有系統中不需要的程式,並全部移除。你也可以用以下指令找出最佔用空間的套件。

$ deborphan -a -n|sort -n

懶惰的話,你也可裝 gtkorphan,以圖形化界面管理。

bleachbit (ccleaner for Linux)

雖然新的 Linux 軟體,已經逐漸使用 .local .cache, .config 等目錄設定方式,但是還是有許多軟體會把快取存在 .config 或自己的目錄中,像是 .gnome2, .firefox 等。結果是使用者很難找到快取檔案,若使用 UbuntuOne, Dropbox 等等雲端備份工具,常常連不重要的快取都一起備份了,費時費錢。

上述或指令或工具,看似十分繁複,而且只能管理系統檔案。從 Windows 跳船過來的使用者一定想,是否有類似 CCleaner 的工具,點一點就可以把垃圾檔案清乾淨?

你可以使用 BleachBit (跨平臺),BleachBit 設計了一套相當有彈性的設定描述語言 – CleanerML,支援了許多常見軟體的清除功能,非常類似 CCleaner,軟體會自動偵測可清楚的軟體列表,只消點選要清除的檔案類型,BleachBit 就會自動刪除並計算所騰出空間。沒有 X 圖形界面時,也可以用 bleachbit_cli 指令列。

References

如果你很 Geek, 可以參考 Ubuntu Wiki 上的 Reducing Disk Footprint,上面分享了許多縮減系統大小的奇技淫巧。

另外 Ubuntu 正有計劃要削減安裝光碟大小,未來也會影響系統安裝後的大小。

使用 git 改完一段程式碼後,你總想回傳給上游開發者。一般是利用 git-format-patch 來產生 patchset,然後搭配郵件軟體軟體寄出。可以配合 git-format-patch 使用的寄信軟體有 git-send-email, git-imap-send 等等,或你也可用 formail 將郵件轉為你的郵件軟體認得的格式。

個人喜歡 git-imap-send,它會將 patch 透過 IMAP 協定存在郵件伺服器上的草稿目錄,如此你可以稍候再透過郵件軟體編修或決定是否寄出。

GMail 設定方式

git-imap-send 使用時,需要先設定 IMAP 伺服器位置與帳號密碼。你可以直接編輯 .gitconfig ,寫入如下設定

[imap]
# Folder = "[Gmail]/Drafts"
Folder = "[Gmail]/&g0l6Pw-"
Host = "imaps://imap.gmail.com"
User = "[email protected]"
port = 993
sslverify = false

你如果看網路上的大部份說明文件,會告訴你 Folder 應該填 [Gmail]/Drafts。很神秘的是,大約我是中文使用者,我的草稿目錄就叫做「草稿」。若用 [Gmail]/Drafts 會出現 “(NO) – [TRYCREATE] Folder doesn’t exist. (Failure)” 錯誤訊息。但是 git-imap-send 不會自行編碼,因此你必須先自行依照 RFC2060 轉碼後,寫入設定,”[Gmail]/草稿” 即為”[Gmail]/&g0l6Pw-“。

附帶一提,Debian 的 git 由於 openssl 的授權問題,並沒有編譯入 SSL 支援。因此你得自行編譯一次,如想使用 Gmail 的 IMAP 寄信的話。

相關 Patch 格式、回覆地址設定

若你想透過 Gmail 送 patch,另外一個需要注意的是 Gmail 會弄爛內文的換行,因此請將 patch 以 attachment 的方式寄送,夾檔 Disposition 是 inline 或 attach 都可以。做法如下

git format-patch –stdout –inline –keep-subject origin | git-imap-send

為了方便別人閱讀,你也可以將夾檔副檔名改為 .txt,以便大部分郵件軟體可以直接閱讀辨識。

[format]
suffix = .txt
inline

另外你也可以在郵件表頭中指定回覆的地址。例如你可以指定請大家回信到 mailing list,以便可以在公開場合進行 patch review。你可以在 git config 中加入如下設定,由於你可能參與很多計劃,最好是加在 project/.git/config 中,而非 ${HOME}/.gitconfig.

[format]
        headers = "To: patches <[email protected]>\nReply-To: devel <[email protected]>\n"

其他方便開發者閱讀的參數如 –signoff, –thread, –numbered 等, 相關細節請見 git-format-patch (1) man page.

身為網管,你時常需要觀察伺服器狀態,以便發生異常時,可以儘速判斷問題來源,至少若硬體負擔不了時,也可以依照時間序,查出負載高峰,並算出所需額外資源。

大部分 Unix 上的伺服觀察工具都是利用 RRDTool 畫圖,個人曾經用過 SmokePing, NagiosCollectd 等伺服器檢測軟體。各有各的用處跟優缺點。

SmokePing 拿來從外部檢測線上服務的延遲狀態相當好用,用 Perl 可以快速自製檢測工具,並自動存成 RRDTool DB 與圖檔,內建的 Alert 支援 Real-Time Traffic Pattern Detection,可以非常有彈性的用以自定警報通知。

如想從伺服器內部確認軟體運作狀態,則可以改用 Nagios。Nagios 支援大量外掛,且支援遠端外掛執行模式,方便同時檢測一羣跑不同服務的伺服器羣組,嫌棄 Nagios 的網頁界面不夠便利的話,後起之秀 Icinga 大幅改善了瀏覽界面。

你若需要效能方面的資訊,像是繪出 Apache 有多少 Requests,則可以用 collectd,同樣也支援大量外掛。但 collectd 僅支援輸出 RRDTool db,本身不提供繪圖功能。你可以另外裝前端界面,以便繪出漂亮的圖檔或查詢界面。

雖然裝了 collectd 幾年,卻一直懶得裝一套好用的前端界面,這兩日改用了 Collectd Graph Panel,發現它還沒有支援 Vserver,於是順手加了一個

I just received yet another comment from a bug reported at 2001 asking for `support deletion of attachments‘ in evolution. It’s kind of interesting to see the demand to be fulfilled for all most one decade.

Good news is you no longer need to ask for the feature. Thanks for Milan Crha, developer of RedHat, who help to get the my small plugin into Evolution code base.

So you don’t need to build the plugin by yourself or looking for a package. The feature should be available at Evolution 2.91.2+. 🙂

News updated at 2010/10/31.

Even though I don’t use evolution daily basis, I still spent a few hours to work with the old plugin for the upcoming Evolution 2.30. In the latest version, Evolution plugin framework is now having a new EPluginUI for GtkUIManager. The plugin version below to 0.0.3 does not work with Evolution 2.30, please use 0.0.4 if you upgraded your evolution to 2.30.

You can download source code tarball at github (http://github.com/chihchun/evolution-remove-attachments). I have also built debian packages for these platform, if you want to test with binaries

  • For Ubuntu User
    • You can download and install package form my PPA for Maverick (10.10).
  • For Debian User
    • You can download the tarball and deb file for Debian sid from here.

Since I no longer use Evolution, if you feel the piece of software is useful for you, please consider making a donation to support me maintaining the software.

前一陣子曾經介紹過「雲端備份」,由於 duplicity 支援相當多種不同的網路儲存協定,像是  ftp, ssh/scp, rsync, Web‐DAV, WebDAVs, HSi (Hierarchical Storage Interface), Amazon S3 backends 等等。因此除了本機之外,你也很適合把它用在伺服器上,一樣可以用 GnuPG Public key安全的加密備份檔案。

為了能夠使用 GnuPG,你必須把公鑰傳輸到伺服器上。千萬別把個人的 PGP Private keys 傳到伺服器上,萬一機器被黑了,你的 Key 也就不安全而失效了。

假設你的伺服器是 remote.server, 你的 key id 是 DC76FEB9

gpg  --export DC76FEB9 | ssh [email protected] gpg --import
這樣就可以把公鑰匯入遠端的伺服器帳號中,但要用 GnuPG 加密,你還需要把信任清單 (ownertrust) 傳過去,讓 GnuPG 了解這把金鑰是受到信賴的。否則你可能會看到以下錯誤訊息
===== Begin GnuPG log =====
gpg: 2983CE0C: There is no assurance this key belongs to the named user
gpg: [stdin]: encryption failed: unusable public key
===== End GnuPG log =====
作法是
gpg  --export-ownertrust |env grep DC76FEB9|ssh [email protected] gpg --import-ownertrust
這樣就可以用 duplicity 時,直接指定 –encrypt-key DC76FEB9 這樣來將備份檔案直接用該金鑰簽署。