一个命令列出系统上安装的所有软件包及其安装的文件,如何使用?

一个命令列出系统上安装的所有软件包及其安装的文件,如何使用?

我正在使用 Ubuntu 14.04 LTS,Trusty。我想执行一个命令来列出系统上所有已安装的软件包,并且对于每个软件包名称,它应该列出该软件包在系统上安装的所有文件。

我怎样才能做到这一点?

答案1

您可以运行以下命令在终端中打印此信息:

for i in $(echo $(apt list 2>&1| grep installed | sed 's|/.*$||g')); do echo $i; dpkg -L $i | grep -P '^.'$i'|$'; done | tee APTINSTALLED | grep -P '^[a-z0-9].*$|$'

该命令还会创建一个名为 的文件,其中包含此信息APTINSTALLED

或者,如果您想列出已安装包的所有文件,您可以运行命令dpkg -L后跟包名称。

例如,要列出随包安装的所有文件gnome-terminal,请运行以下命令:

dpkg -L gnome-terminal

如果您只想列出所有已安装的包,您可以运行以下命令:

apt list 2>&1| grep installed | sed 's|/|  |g;s|\[.*$||g' | GREP_COLOR='0;32' grep --color=auto -P '^.*  '

如果您只想列出已安装的软件包而不包含额外信息,您可以运行以下命令:

apt list 2>&1| grep installed | sed 's|/.*$||g'

如果您希望以线性形式而不是列形式列出已安装的软件包名称,您可以运行以下命令:

echo $(apt list 2>&1| grep installed | sed 's|/.*$||g')

最后,如果您想列出所有已安装的软件包以及每个软件包的简要说明,请运行以下命令:

dpkg -l | grep --color=always ii

最后一个命令将用红色突出显示“ii”,它直接打印在每个包名称前面,以便更容易区分包名称和描述。

或者,您也可以直接运行以下命令:

dpkg -l

此外,正如建议的那样@steeldriver在注释中,你可以使用-f带有dpkg-query命令的标志来打印名称。以下是示例:

dpkg-query -W -f='${Package}\n' | while read -r p; do echo "$p" & dpkg-query -L "$p"; done

这是用绿色突出显示的包名称:

dpkg-query -W -f='${Package}\n' | while read -r p; do echo "$p" & dpkg-query -L "$p"; done | GREP_COLOR='0;32' grep -P --color=auto '^[a-z0-9].*$|$'

这里是脚本形式,它将创建一个新目录~/packagefiles。执行此脚本将为新目录中安装的每个包创建一个文本文件。每个文本文件包含每个包的文件列表。这也将正常打印在终端中,每个包名称以绿色突出显示:

#!/bin/bash
mkdir -p /home/$USER/packagefiles 2>&1
dpkg-query -W -f='${Package}\n' | while read -r p; do echo "
$p" & dpkg-query -L "$p" | tee /home/$USER/packagefiles/"$p"; done | GREP_COLOR='0;32' grep -P --color=auto '^[a-z0-9].*$|$'

这很方便,因为每个包都在目录中列出,因此ls ~/packagefiles将在漂亮的列中列出所有包。

不要忘记使脚本可执行。

答案2

如果我们处理通过 安装的应用程序apt,如果您知道每个包都有文件,那么这非常简单/var/lib/dpkg/info/*.list。我们可以将文件名打印为包名,并且这些文件的内容包含安装期间随包附带的所有文件。换句话说,这是:

for file in /var/lib/dpkg/info/*.list ; do echo ">>> $(basename ${file%%.*})" ; cat "$file" ; done

如果软件附带git或其他方式(不是dpkgapt),那么实际上无法判断哪些文件可能已添加到您的系统中。

答案3

cat /var/lib/dpkg/available | grep 软件包

相关内容