例如,假设我尝试删除“libopenshot11”,我得到:
The following packages will be REMOVED:
libopenshot11 openshot-qt python3-openshot
如果不先运行 apt remove 的话我怎样才能找到这个问题?
答案1
您可以使用--simulate
或-s
选项,它将显示当您运行命令时 APT 将做什么而不实际执行任何操作,例如......
$ sudo apt remove -s file
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
libfile-stripnondeterminism-perl libltdl-dev libmail-sendmail-perl libsys-hostname-long-perl po-debconf
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED
cracklib-runtime debhelper dh-autoreconf dh-strip-nondeterminism file gdebi gdebi-core libtool lintian ubuntu-standard
0 to upgrade, 0 to newly install, 10 to remove and 0 not to upgrade.
Remv cracklib-runtime [2.9.2-3]
Remv dh-autoreconf [13] [debhelper:amd64 ]
Remv debhelper [10.2.2ubuntu1] [dh-strip-nondeterminism:amd64 ]
Remv dh-strip-nondeterminism [0.032-1]
Remv gdebi [0.9.5.7+nmu1]
Remv gdebi-core [0.9.5.7+nmu1]
Remv ubuntu-standard [1.379]
Remv file [1:5.29-3] [lintian:amd64 libtool:amd64 ]
Remv libtool [2.4.6-2] [lintian:amd64 ]
Remv lintian [2.5.50.1]
我们可以看到删除这个file
包裹是一个非常糟糕的主意......
答案2
-s
或选项--simulate
用于模拟任何 APT 任务无需实际运行它。
来自官方手册页:
-s, --simulate, --just-print, --dry-run, --recon, --no-act
No action; perform a simulation of events that would occur based on
the current system state but do not actually change the system.
Locking will be disabled (Debug::NoLocking) so the system state
could change while apt-get is running. Simulations can also be
executed by non-root users which might not have read access to all
apt configuration distorting the simulation. A notice expressing
this warning is also shown by default for non-root users
(APT::Get::Show-User-Simulation-Note). Configuration Item:
APT::Get::Simulate.
答案3
这Python APT API可以用来编写一个简短的脚本来执行此操作:
#! /usr/bin/python3
import sys
from apt import cache
c = cache.Cache()
for pkg in sys.argv[1:]:
c[pkg].mark_delete()
print('\n'.join(pkg.name for pkg in c.get_changes() if pkg.marked_delete))
例子:
$ apt-get remove -s bash | grep Remv
Remv winusb [1.0.11+saucy1]
Remv gdm [3.18.3-0ubuntu2]
Remv gdm3 [3.18.3-0ubuntu2]
Remv bash [4.3-14ubuntu1.2] [inxi:amd64 lightdm:amd64 bash-completion:amd64 ]
Remv bash-completion [1:2.1-4.2ubuntu1.1] [inxi:amd64 lightdm:amd64 ]
Remv inxi [2.2.35-0ubuntu1] [lightdm:amd64 ]
Remv lightdm [1.18.3-0ubuntu1.1]
$ apt-cache rdepends bash --installed | sed '1,2d' | sort -u
bash-completion
bash:i386
gdm3
inxi
lightdm
winusb
$ ./check.py bash
inxi
winusb
gdm
gdm3
bash
lightdm
bash-completion