问题描述
我想知道某些特定的软件包安装了什么,例如,在安装 ncurses
时,我发现 TAB
键扩展:
sudo apt-get install ncurses-
以显示:
ncurses-base ncurses-doc ncurses-hexedit
ncurses-bin ncurses-examples ncurses-term
我怎么知道 ncurses-term
安装了什么?我主要对程序感兴趣,但库和任何其他文件类型也可能有用。
如果可能的话,命令行 方法将是首选(也接受任何其他方法)。
最佳思路
这里有一些选项,这些选项将列出软件包安装的所有文件:
A. 列出包中包含的所有文件
-
对于已安装的软件包
\n
dpkg -L ncurses-term\n
\n
-
对于所有软件包,无论是否安装
\n
apt-file -F list ncurses-term\n
\n
-F
开启模式匹配,以便仅返回名称完全匹配的包。您可能需要使用 sudo apt-get install apt-file
安装 apt-file
,然后使用 sudo apt-file update
更新其数据库。
B. 仅列出包中包含的可执行文件
-
对于已安装的软件包
只需安装 dlocate
( sudo apt-get install dlocate
) 并运行:
dlocate -lsbin ncurses-term
如 man dlocate
中所述:
\\n
-lsbin List full path/filenames of executable files (if any) in package
\\n
如果您不想安装其他软件包,可以手动执行此操作。只需收集文件列表并找到其中任何设置了可执行位的文件即可:
apt-file -F list ncurses-term | cut -d ' ' -f 2 |
while read file; do [[ -x $file && -f $file ]] && echo "$file"; done
上面的小脚本将仅打印路径( cut -d ' ' -f 2
),然后将其传递给 while
循环,该循环检查文件是否可执行( -x $file
)以及是否是常规文件,没有目录或符号链接( -f $file
)并仅打印其名称如果通过了两项测试。
-
对于所有软件包,无论是否安装
据我所知,无法仅列出已卸载的软件包中包含的可执行文件。但是,由于大多数可执行文件都安装到 bin
目录,因此您可以通过解析输出来获取其中大部分:
apt-file -F list ncurses-term | grep -Ew "bin|sbin"
-w
选项匹配整个单词,因此您不会将某些内容安装在例如 trashbin
或其他位置中。
注意:上述命令都不会为 ncurses-term
生成任何输出,但这是因为此软件包未安装可执行文件。尽管如此,这些命令仍然有效,请尝试使用不同的包。
次佳思路
您可以使用 apt-file:
sudo apt-file update
apt-file list package_name
第三种思路
可以使用您的浏览器(因此不需要访问 APT-system)。例如,要列出包 “ncurses-term” 的文件内容,只需键入
https://packages.debian.org/wheezy/all/ncurses-term/filelist
对于 Debian,进入浏览器的地址栏(根据需要替换 “wheezy”)或
http://packages.ubuntu.com/saucy/all/ncurses-term/filelist
对于 Ubuntu(根据需要替换 “saucy”)。