我正在使用 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
或其他方式(不是dpkg
或apt
),那么实际上无法判断哪些文件可能已添加到您的系统中。
答案3
cat /var/lib/dpkg/available | grep 软件包