文章目錄
- 清理Debian、Ubuntu中的備援包、廢棄包
-
- remove與purge
- 清理廢棄包
- 清理rc包
清理Debian、Ubuntu中的備援包、廢棄包
在更新系統版本之後,或是在删除了第三方源之後,一些包就會變為無法更新的備援包。
一個常見的現象是更新系統前,某個程式A依賴了舊版本的庫libX.1.1,在更新系統之後另一個程式B依賴了新版本的libX.1.2。再由于某些依賴原因,A沒有被更新為依賴libX.1.2的新版本,導緻包管理系統保留了2個版本的libX。也就是說預設的
apt-get autoremove
指令無法删除它們。
通常情況下除了浪費一點空間這并沒有什麼問題,但是有些時候當libX.1.1與libX.1.2之間不互相相容時,或我們寫的其他程式連結了共享版本的libX時,這會導緻程式運作異常或無法運作,尤其是在分布式的程式。特别是libboost系列庫。
remove與purge
很多package是有配置檔案的。不管你是使用apt還是aptitude,隻要是用預設的remove删除,都隻是删除程式檔案,保留配置檔案的;而使用purge則是一個不留的全部删除。
清理廢棄包
使用aptitude來自動檢測并删除已經廢棄的包。
廢棄包通常是前述的又了更新版本的同名包,或者是source不存在的包。
# 檢視 (以下3個等價)
aptitude search "~o"
aptitude search ~o
aptitude search ?obsolete
# 清除
sudo aptitude purge "~o"
這個清除指令會考慮包之間的依賴關系,把依賴這些廢棄包的其他包也一并删除掉。對于更複雜的情況,它會給出一個保留哪些删除哪些的解決方案。
參考:https://raphaelhertzog.com/2011/02/07/debian-cleanup-tip-2-get-rid-of-obsolete-packages/
清理rc包
有些包解除安裝不徹底,也會導緻各種問題。
debian系的底層包管理程式dpkg可以對于幫助我們找到這些包。
使用
dpkg --list
可以檢視所有包的狀态,其中前兩位表示狀态,第一位為期望的狀态,第二位為實際的狀态。可以大緻了解為:當我們輸入安裝指令時,第一位置為i(表示install),當指令完成時,第二位置為i。
更細節的表示可以參考文檔,或者檢視:https://linuxprograms.wordpress.com/2010/05/11/status-dpkg-list/
一個常見的非理想狀态是:第一位為r(removed),第二位為c(Cfg-file存在)。
# 檢視rc狀态的包
dpkg --list |grep "^rc"
# 清除
dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --purge
# 或者使用aptitude
sudo aptitude purge "~c"
參考:https://linuxprograms.wordpress.com/2010/05/12/remove-packages-marked-rc/