Ubuntu-14.04
apt-get 與 autoremove 不一致
我目前正在清理幾台伺服器。
我注意到一些奇怪的行為:
當我這樣做時
apt-get autoremove
,它會列出幾個要在我繼續時自動刪除的標題,有時它會將文件/文件夾留在 中/usr/src
,有時它們會被刪除。關於為什麼,或者我可以從哪裡開始搜尋的任何原因?Google沒有出現太多。
即使 autoremove 給出“0 要刪除”,標題仍然保留的機器
ubuntu@acc-ws-website-1:~$ sudo apt-get autoremove Reading package lists... Done Building dependency tree Reading state information... Done 0 upgraded, 0 newly installed, 0 to remove and 65 not upgraded. ubuntu@acc-ws-website-1:~$ ls -lart /usr/src total 108 drwxr-xr-x 10 root root 4096 Apr 16 2014 .. drwxr-xr-x 24 root root 4096 Jul 8 2014 linux-headers-3.13.0-24 drwxr-xr-x 7 root root 4096 Jul 8 2014 linux-headers-3.13.0-24-generic drwxr-xr-x 3 ubuntu ubuntu 4096 Apr 17 2015 ixgbevf-2.14.2 drwxr-xr-x 24 root root 4096 Oct 6 2015 linux-headers-3.13.0-65 drwxr-xr-x 7 root root 4096 Oct 6 2015 linux-headers-3.13.0-65-generic drwxr-xr-x 24 root root 4096 Oct 20 2015 linux-headers-3.13.0-66 drwxr-xr-x 7 root root 4096 Oct 20 2015 linux-headers-3.13.0-66-generic drwxr-xr-x 24 root root 4096 Nov 5 2015 linux-headers-3.13.0-67 drwxr-xr-x 7 root root 4096 Nov 5 2015 linux-headers-3.13.0-67-generic drwxr-xr-x 24 root root 4096 Nov 10 2015 linux-headers-3.13.0-68 drwxr-xr-x 7 root root 4096 Nov 10 2015 linux-headers-3.13.0-68-generic drwxr-xr-x 24 root root 4096 Dec 1 2015 linux-headers-3.13.0-70 drwxr-xr-x 7 root root 4096 Dec 1 2015 linux-headers-3.13.0-70-generic drwxr-xr-x 24 root root 4096 Dec 2 2015 linux-headers-3.13.0-71 drwxr-xr-x 7 root root 4096 Dec 2 2015 linux-headers-3.13.0-71-generic drwxr-xr-x 24 root root 4096 Dec 17 2015 linux-headers-3.13.0-73 drwxr-xr-x 7 root root 4096 Dec 17 2015 linux-headers-3.13.0-73-generic drwxr-xr-x 24 root root 4096 Dec 19 2015 linux-headers-3.13.0-74 drwxr-xr-x 7 root root 4096 Dec 19 2015 linux-headers-3.13.0-74-generic drwxr-xr-x 24 root root 4096 Feb 2 2016 linux-headers-3.13.0-77 drwxr-xr-x 7 root root 4096 Feb 2 2016 linux-headers-3.13.0-77-generic drwxr-xr-x 24 root root 4096 Feb 23 2016 linux-headers-3.13.0-79 drwxr-xr-x 7 root root 4096 Feb 23 2016 linux-headers-3.13.0-79-generic drwxr-xr-x 24 root root 4096 Mar 30 06:50 linux-headers-3.13.0-115 drwxr-xr-x 7 root root 4096 Mar 30 06:50 linux-headers-3.13.0-115-generic drwxr-xr-x 27 root root 4096 Mar 30 06:52 . ubuntu@acc-ws-website-1:~$ uname -r 3.13.0-112-generic
而我希望是這樣的:
ubuntu@tools-jenkins:~$ sudo apt-get autoremove Reading package lists... Done Building dependency tree Reading state information... Done 0 upgraded, 0 newly installed, 0 to remove and 94 not upgraded. ubuntu@tools-jenkins:~$ ls -lart /usr/src total 32 drwxr-xr-x 10 root root 4096 Mar 25 2015 .. drwxr-xr-x 24 root root 4096 Dec 6 06:39 linux-headers-3.13.0-105 drwxr-xr-x 7 root root 4096 Dec 6 06:39 linux-headers-3.13.0-105-generic drwxr-xr-x 24 root root 4096 Mar 8 06:44 linux-headers-3.13.0-112 drwxr-xr-x 7 root root 4096 Mar 8 06:44 linux-headers-3.13.0-112-generic drwxr-xr-x 24 root root 4096 Mar 30 06:26 linux-headers-3.13.0-115 drwxr-xr-x 7 root root 4096 Mar 30 06:26 linux-headers-3.13.0-115-generic drwxr-xr-x 8 root root 4096 Apr 3 10:50 . ubuntu@tools-jenkins:~$ uname -r 3.13.0-105-generic
如果你的系統上仍然安裝了很多
linux-headers*
包,你可以嘗試這個簡單的方法來刪除舊的標頭檔:dpkg-query -f '${binary:Package}\n' -W linux-headers\*|xargs apt-mark auto apt-mark manual linux-headers-generic apt-get -f autoremove
如果我的假設是正確的,那麼您以某種方式將標頭標記為手動安裝,這會阻止您的系統刪除這些軟體包。例如,您已經直接安裝了包,即要求 apt 安裝核心頭包的確切版本。上面的命令嘗試將所有這些包標記為自動安裝,並使事情按預期工作。
如果萬一包已經被刪除但文件夾仍然存在並且裡面只有一些剩菜,那麼這意味著這些文件不屬於包。這可以防止 apt 在解除安裝
linux-headers*
軟體包時刪除頂級目錄。在這種情況下,您應該手動刪除文件。瑣事:apt 的自動刪除功能僅適用於自動安裝的軟體包。這意味著該軟體包必須按字面意思標記為“自動安裝”,並且不應該有依賴它的軟體包。對於 linux 核心及其標頭檔,我們有這個常見的場景:
- 有一個或多個元包,例如,
linux-generic
通常標記為手動安裝linux-image-generic``linux-headers-generic
- 有很多“真正的”包,裡面有文件
linux-image-4.8.0-45-generic
,元包依賴於一些這樣的包;這些通常被標記為“自動安裝”- 當元包更新時,它通常需要更新版本的“真實”包,因此正在安裝新版本
- 標記為“自動安裝”的包只有在沒有依賴它的手動安裝包時才能自動刪除,所以當安裝新包時,舊包可能會在以後自動刪除,因為不再依賴這些包