生成手动安装的包列表并查询各个包

Modified on: Sat, 09 Jun 2018 17:39:53 +0800

我想获得一个由aptaptitude手动安装的软件包列表,并能够找出foobar包是手动安装还是自动安装。是否有任何巧妙的方法从命令行执行此操作?

最佳答案

您可以使用这两个单行中的任何一个。两者在我的机器上产生完全相同的输出,并且比在此问题中直到现在(2014年7月6日)提出的所有解决方案更精确。

使用apt-mark

comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

使用aptitude

comm -23 <(aptitude search '~i !~M' -F '%p' | sed "s/ *$//" | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

很少有软件包仍然存在问题,尽管我怀疑用户实际安装了这些 ,无论是在通过语言本地化设置安装之后,还是通过Totem编解码器安装程序。此外,linux-header版本似乎也在积累,即使我只安装了非特定于版本的元数据包。例子:

libreoffice-help-en-gb openoffice.org-hyphenation gstreamer0.10-fluendo-mp3 linux-headers-3.13.0-29

如何运作

  1. 获取手动安装的软件包列表。对于aptitude,附加的sed会删除行尾的剩余空格。
  2. 在全新安装后立即获取已安装的软件包列表。
  3. 比较文件,仅输出文件1中不存在于文件2中的行。
  4. 醇>

    其他可能性也不起作用:

  • 使用ubuntu-14.04-desktop-amd64.manifest文件(这里而不是/var/log/installer/initial-status.gz。更多的包显示为手动安装,即使它们不是。
  • 使用apt-mark showauto代替/var/log/installer/initial-status.gz。例如,apt-mark不包含xserver-xorg包,而另一个文件包含xserver-xorg包。

我使用了各种其他StackExchange帖子作为参考,但没有一个像上面的解决方案一样:

两者都列出了比上述解决方案更多的包。

编辑:如果您从之前的版本升级后该怎么办:

如果您已将Ubuntu从一个版本升级到下一个版本,则可能需要调整此过程。在这种情况下,除了当前版本的initial-status.gz文件之外,我还会检查较新版本的清单文件(参见上文)。您可以通过添加另一个比较轻松地做到这一点。仅使用清单文件将不起作用,因为清单文件遗憾地不包含initial_status.gz文件所做的所有事情(我已检查过)。


相关问答

添加新评论