Debian

如何在依賴樹中列出沒有手動安裝包的包?

  • May 30, 2022

首先,澄清一下術語:

dependency <-> reverse dependency/dependent

我已經xvt安裝在我的無頭 RPI 上,但我無法弄清楚它沒有被自動刪除的原因。

$ sudo apt autoremove
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
$ apt show xvt                                                         Package: xvt                                                                       Version: 2.1-20.3
Priority: optional
Section: x11
Maintainer: Sam Hocevar (Debian packages) &lt;sam+deb@zoy.org&gt;
Installed-Size: 85.0 kB
Provides: x-terminal-emulator
Depends: libc6 (&gt;= 2.4), libx11-6
Suggests: menu
Conflicts: suidmanager (&lt;&lt; 0.50)
Download-Size: 36.3 kB
APT-Manual-Installed: no
APT-Sources: http://raspbian.raspberrypi.org/raspbian bullseye/main armhf Packages
Description: ...
$ apt-cache rdepends --installed xvt
xvt
Reverse Depends:

這些不列出xvt

$ dpkg-query -Wf '${Package;-40}${Essential}\n' | grep yes
$ dpkg-query -Wf '${Package;-40}${Priority}\n' | grep -E "important"
$ dpkg-query -Wf '${Package;-40}${Priority}\n' | grep -E "required"
$ apt-config dump | grep '^APT::NeverAutoRemove::'
$ apt-mark showmanual
bullseye-default
equivs
pihole-deps
smbclient
transmission-daemon
wireguard-tools
$ apt-mark showhold

(除了顯式依賴項之外,我不喜歡 debian 使用列表和欄位的方式,我覺得它晦澀難懂。因此我創建了一個靶心預設元包。)

還有什麼其他機制可以防止這個包被刪除?

回到提出的問題,我將如何找到像xvt本例中那樣的其他秘密冗餘包?

請求的命令

$ dpkg -l xvt
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=====================================&gt;
ii  xvt            2.1-20.3     armhf        X terminal-emulator similar to xterm,

您的apt-cache rdepends輸出表明沒有什麼可以保持您的xvt軟體包安裝,考慮到您的autoremove行為,這很奇怪。

一般來說,要弄清楚為什麼要保留給定的包,最好的工具是aptitude why

aptitude why xvt

(您可能需要先安裝aptitude)。

要列出在其反向依賴項中沒有手動安裝包的所有包,請apt autoremove在模擬模式下執行,忽略推薦和建議的包:

sudo apt autoremove -s -o Apt::AutoRemove::SuggestsImportant=0 -o Apt::AutoRemove::RecommendsImportant=0

注意預設情況下,autoremove是不平衡的:預設安裝的是推薦的包,而不是推薦的包;但建議會阻止自動刪除。請參閱如何推薦和建議與 apt-get dist-upgrade 和 apt-get autoremove 互動?詳情。

引用自:https://unix.stackexchange.com/questions/704272