为什么我在 apt-get autoremove 列表中得到了 gdm 和一堆包?

为什么我在 apt-get autoremove 列表中得到了 gdm 和一堆包?

最近,我在我的 Trusty 笔记本电脑 (14.04 LTS) 上做了很多配置更改。首先,我安装了gnome-shell,进行了所有更新,然后迁移到LTS 支持堆栈之后,我添加了gnome 3 staging ppa并从 v3.10 升级gnome-shell到 v3.12。现在,当我运行时apt-get autoremove,我会在列表中看到这些包:

The following packages were automatically installed and are no longer required:
  evolution-indicator gdm gir1.2-gkbd-3.0 gir1.2-tracker-0.16 gir1.2-xkl-1.0 libgtksourceview2.0-0
  libgtksourceview2.0-common libiptcdata0 libtracker-extract-0.16-0
  libtracker-miner-0.16-0 libtracker-sparql-0.16-0 linux-headers-4.2.0-23
  linux-headers-4.2.0-23-generic linux-image-4.2.0-23-generic
  linux-image-extra-4.2.0-23-generic python-gtksourceview2

据我所知,gdm这是一个非常需要的关键包,因为我正在使用 gnome-shell。我还查看了答案建议只需运行 即可将软件包标记为“需要” apt-get install <package>。但我如何知道我可以安全地删除此列表中的哪些软件包而不会影响我的系统?然而,我确切地知道我不需要linux-image-*linux-headers软件包,因为我已经升级到更高版本的内核。但我如何知道其余的软件包?

答案1

该命令apt-cache showpkg <package>将告诉您软件包的“反向依赖”,即您配置的存储库中的其他哪些软件包(不一定是已安装的软件包)依赖于该软件包。
如果有gdm很多,所以我编写了这个脚本来遍历所有反向依赖项,以检查是否安装了任何依赖项 - 这表明您可能不应该删除 gdm。

#!/bin/bash

package=$1

apt-cache showpkg $package | sed '1,/Reverse Depends:/d;/Dependencies:/,$d'  > /tmp/dependencies.txt

while read line
do
    reverse_dependency=$(awk -F '[:,]' '{print $1}' <<< $line)
    if dpkg -s $reverse_dependency &> /dev/null
    then
        echo "$line is installed and depends on $package"
    fi
done < /tmp/dependencies.txt

如果你调用脚本,你需要将包作为参数传递,即

./script "gdm"

在我的机器上结果是

$ ./script.sh gdm
plymouth:i386,gdm 3.0.4-0ubuntu11 is installed and depends on gdm
plymouth,gdm 3.0.4-0ubuntu11 is installed and depends on gdm
plymouth:i386,gdm 3.0.4-0ubuntu11 is installed and depends on gdm
plymouth,gdm 3.0.4-0ubuntu11 is installed and depends on gdm

相关内容