使用 apt-get 删除软件包和依赖项

使用 apt-get 删除软件包和依赖项

我最近阅读了很多关于删除软件包和依赖项的问题/答案/意见。有很多不同的方法可以做到这一点,有些过于复杂,有些则不够/不完整。我想在这里问一下其他人认为清除软件包和所有内容(包括配置、依赖项和依赖项的配置)的最佳方法是什么。我也会提供我的方法,这是经过大量反复试验和绞尽脑汁后得出的。

答案1

警告:这可能会删除您可能仍然需要的软件包。如果发生这种情况,只需重新安装它们。但说实话,当您安装/卸载某些会对您的系统产生重大影响的东西时……为什么不先备份呢。

我想到过的最彻底的方法是彻底删除一个包及其依赖项以及所有配置(包括依赖项的配置),并进行一些清理,其中 PACKAGENAME 是需要删除的主要包:

  • 从桌面注销并按 Ctrl+Alt+F1,然后登录 TTY1 并运行以下命令:

    sudo apt-get purge <PACKAGENAME>
    sudo apt-get purge $(apt-cache depends <PACKAGENAME> | awk '{ print $2 }' | tr '\n' ' ')
    sudo apt-get autoremove
    sudo apt-get update
    sudo apt-get check
    sudo apt-get -f install
    sudo apt-get autoclean
    
  • 如果需要,重新启动

    sudo shutdown -r now
    

那么第二行发生了什么?管道从 apt-cache 依赖项获取输出并重新格式化。第一个管道awk'{打印$2}' 接受 apt-cache 依赖项的输出并打印或“回显”第二列。如果没有它,列表中还会有另一列,即依赖项类型,即“依赖项”、“推荐”等。然后第二个管道tr'\n'''获取该结果并删除或截断(因此为 tr)换行符,并将其替换为分隔名称的空格。所有这些操作都会返回 PACKAGENAME 的所有依赖包名称的“空格分隔”列表,该列表格式友好,可与 purge 命令选项中的多个包输入一起使用。

这对于元包尤其有效。我在最后运行最后一个命令“sudo apt-get -f install”来检查可能损坏的包,并在一次性进行如此多的更改后修复它们。每当我添加“DE”并想返回时,我都会这样做。就在最近,我在安装 GNOME 后使用了它,它甚至修复了这样一个事实:仅在使用自动删除清除 Gnome 后,我的 GRUB 仍然会更改,并将登录选项留在 DM 中。当我尝试 lubuntu-desktop 时,它修复了一些冲突并从 DM 登录中删除了清除和自动删除留下的条目。

一种类似的方法效果很好,可能更安全,但仍然不能总是解决所有问题:

sudo apt-get --purge autoremove PACKAGENAME

可能需要或不需要跟进:

sudo apt-get update
sudo apt-get check
sudo apt-get -f install
sudo apt-get autoclean

答案2

我也用aptitude purge它来:

sudo aptitude purge <PACKAGENAME>

此命令

  • 删除依赖项
  • 不删除依赖项(这些依赖项也是其他已安装包的依赖项),
  • 但我不确定它是否会删除依赖项的配置。

答案3

autoremove可能就是你想要的。

例如,使用remove,仅一个包需要删除:

$ sudo apt remove nvidia-cuda-toolkit
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  g++-8 javascript-common libaccinj64-10.1 libcublas10 libcublaslt10 libcudart10.1 libcufft10 libcufftw10 libcuinj64-10.1 libcupti-dev libcupti-doc libcupti10.1 libcurand10 libcusolver10 libcusolvermg10
  libcusparse10 libegl-dev libgl-dev libgl1-mesa-dev libgles-dev libgles1 libglvnd-dev libglx-dev libjs-jquery libjs-underscore libncurses5 libnppc10 libnppial10 libnppicc10 libnppicom10 libnppidei10
  libnppif10 libnppig10 libnppim10 libnppist10 libnppisu10 libnppitc10 libnpps10 libnvblas10 libnvgraph10 libnvidia-common-510 libnvidia-ml-dev libnvjpeg10 libnvrtc10.1 libnvtoolsext1 libnvvm3 libopengl-dev
  libpthread-stubs0-dev libstdc++-8-dev libthrust-dev libvdpau-dev libx11-dev libxau-dev libxcb1-dev libxdmcp-dev node-html5shiv nsight-compute nsight-systems nvidia-cuda-dev nvidia-cuda-doc nvidia-cuda-gdb
  nvidia-opencl-dev nvidia-profiler nvidia-visual-profiler ocl-icd-libopencl1 ocl-icd-opencl-dev opencl-c-headers openjdk-8-jre x11proto-core-dev x11proto-dev xorg-sgml-doctools xtrans-dev
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
  nvidia-cuda-toolkit
0 upgraded, 0 newly installed, 1 to remove and 95 not upgraded.
After this operation, 67.1 MB disk space will be freed.

autoremote

$ sudo apt autoremove nvidia-cuda-toolkit
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  g++-8 javascript-common libaccinj64-10.1 libcublas10 libcublaslt10 libcudart10.1 libcufft10 libcufftw10 libcuinj64-10.1 libcupti-dev libcupti-doc libcupti10.1 libcurand10 libcusolver10 libcusolvermg10
  libcusparse10 libegl-dev libgl-dev libgl1-mesa-dev libgles-dev libgles1 libglvnd-dev libglx-dev libjs-jquery libjs-underscore libncurses5 libnppc10 libnppial10 libnppicc10 libnppicom10 libnppidei10
  libnppif10 libnppig10 libnppim10 libnppist10 libnppisu10 libnppitc10 libnpps10 libnvblas10 libnvgraph10 libnvidia-common-510 libnvidia-ml-dev libnvjpeg10 libnvrtc10.1 libnvtoolsext1 libnvvm3 libopengl-dev
  libpthread-stubs0-dev libstdc++-8-dev libthrust-dev libvdpau-dev libx11-dev libxau-dev libxcb1-dev libxdmcp-dev node-html5shiv nsight-compute nsight-systems nvidia-cuda-dev nvidia-cuda-doc nvidia-cuda-gdb
  nvidia-cuda-toolkit nvidia-opencl-dev nvidia-profiler nvidia-visual-profiler ocl-icd-libopencl1 ocl-icd-opencl-dev opencl-c-headers openjdk-8-jre x11proto-core-dev x11proto-dev xorg-sgml-doctools xtrans-dev
0 upgraded, 0 newly installed, 73 to remove and 95 not upgraded.
After this operation, 3,654 MB disk space will be freed.

答案4

这将删除指定的包、所有自动安装的包及其所有配置:

sudo apt-get -s purge <PKG> | grep '^ ' | tr -d '*' | xargs -o sudo apt-get purge

或者以 root 身份:

apt-get purge `apt-get -s purge <PKG> | grep '^ ' | tr -d '*'`

<PKG>用您想要完全删除的一个或多个包进行替换。

相关内容