如何列出手动安装的包?

如何列出手动安装的包?

我想要获得apt或手动安装的软件包列表aptitude,并能够查明foobar软件包是手动安装还是自动安装。

我们如何从命令行做到这一点?

答案1

您可以使用这两个单行代码中的任意一个。 在我的计算机上,它们都产生完全相同的输出,并且比迄今为止 (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 中的行。

其他可能性不起作用:

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

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

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

编辑:如果你从以前的版本升级,该怎么办:

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

答案2

在较新版本的 apt 软件包中,还有 apt-mark 命令

apt-mark showmanual

答案3

要获取所有软件包(未安装、用户安装或默认安装、所有 PPA)的列表,apt请使用以下方法:

apt list [option]

对此有用的可能选项是:

--installed仅显示系统上安装的软件包(约 50,000 多个)

--manual-installed列出已安装的软件包明确地通过命令直接安装,或者作为依赖项安装。

或者,你可以这样做:

apt list --installed | grep -F \[installed\]获取由用户命令及其依赖项生成的软件包列表,并获取有关它们的其他信息,如支持的版本和体系结构(x86,x86_64,amd64,全部等)

答案4

apt-mark showauto | grep -iE '^foobar$'如果该包是自动安装的,则会输出“foobar”,否则不输出任何内容。

aptitude search '!~M ~i'将列出未自动安装的软件包。遗憾的是,从 10.10 开始,aptitude 将不再是 Ubuntu Desktop 上的默认安装的一部分。

相关内容