当前位置: 首页>>技术教程>>正文


我如何知道某个apt-get包包含哪些程序?

, ,

问题描述

我想知道某些特定的软件包安装了什么,例如,在安装 ncurses 时,我发现 TAB 键扩展:

sudo apt-get install ncurses-

以显示:

ncurses-base      ncurses-doc       ncurses-hexedit
ncurses-bin       ncurses-examples  ncurses-term

我怎么知道 ncurses-term 安装了什么?我主要对程序感兴趣,但库和任何其他文件类型也可能有用。

如果可能的话,命令行 方法将是首选(也接受任何其他方法)。

最佳思路

这里有一些选项,这些选项将列出软件包安装的所有文件:

A. 列出包中包含的所有文件

  1. 对于已安装的软件包

    \n

     dpkg -L ncurses-term\n

    \n

  2. 对于所有软件包,无论是否安装

    \n

     apt-file -F list ncurses-term\n

    \n

-F 开启模式匹配,以便仅返回名称完全匹配的包。您可能需要使用 sudo apt-get install apt-file 安装 apt-file ,然后使用 sudo apt-file update 更新其数据库。

B. 仅列出包中包含的可执行文件

  1. 对于已安装的软件包

只需安装 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 )并仅打印其名称如果通过了两项测试。

  1. 对于所有软件包,无论是否安装

据我所知,无法仅列出已卸载的软件包中包含的可执行文件。但是,由于大多数可执行文件都安装到 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”)。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14083.html,未经允许,请勿转载。