有没有一种方法可以手动检查哪些额外的软件包将被删除?


8

例如,假设我尝试删除“ libopenshot11”,我得到:

The following packages will be REMOVED:
  libopenshot11 openshot-qt python3-openshot

如何在不先运行apt remove的情况下找到此问题?


apt-get remove libopenshot11 -s
grooveplex

Answers:


11

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

python解决方案非常干净。谢谢!
AnswerSeeker

19

您可以使用--simulateor -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软件包将是一个非常糟糕的主意...


您是谁,还是阿尔本,谁先发布?
NoOneIsHere

@NoOneIsHere我几秒钟:/
Zanna

好的,我赞成您的两个答案,因为您有详细的用法说明,并且他(我认为)有手册页,但我认为将这两个答案结合起来要比接受的答案要好。
NoOneIsHere

@NoOneIsHere如果奥尔本未发布,则可能已在手册中添加了手册页详细信息。我认为,这种简单的解决方案比人们接受的解决方案更可能是人们将使用的解决方案,但接受是OP的酌情决定权,而muru的回答是高级阶层:)
Zanna

1
尽管我陷入了删除ubuntu-standard导致随后的autoremove陷入困境的境地,但其中大多数软件包实际上并不重要。
Random832 '17

13

-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.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.