Ubuntu-14.04

apt-get 與 autoremove 不一致

  • April 11, 2017

我目前正在清理幾台伺服器。

我注意到一些奇怪的行為:

當我這樣做時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,元包依賴於一些這樣的包;這些通常被標記為“自動安裝”
  • 當元包更新時,它通常需要更新版本的“真實”包,因此正在安裝新版本
  • 標記為“自動安裝”的包只有在沒有依賴它的手動安裝包時才能自動刪除,所以當安裝新包時,舊包可能會在以後自動刪除,因為不再依賴這些包

引用自:https://serverfault.com/questions/842181