我怎么知道一些apt-get软件包包含哪些程序?


17

我想知道安装了哪些特定的软件包,例如,在安装时ncurses,我发现TAB密钥会扩展:

sudo apt-get install ncurses-

显示:

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

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

如果可能的话,最好使用命令行方法(接受其他方法)。


当您说“程序”时,您是在谈论二进制文件吗?
Braiam

二进制文件和脚本,如果可能的话,谢谢@Braiam。
Sopalajo de Arrierez 2014年

Answers:


21

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

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

  1. 对于已安装的软件包

    dpkg -L ncurses-term
    
  2. 对于所有软件包,是否已安装

    apt-file -F list ncurses-term
    

    -F模式匹配的圈,以便只包,其确切的名称匹配返回。您可能需要使用进行安装apt-filesudo apt-get install apt-file然后使用对其进行更新sudo apt-file update

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

  1. 对于已安装的软件包

    只需安装dlocatesudo apt-get dlocate)并运行:

    dlocate -lsbin ncurses-term 
    

    如中所述man dlocate

    -lsbin列出软件包中可执行文件(如果有)的完整路径/文件名

    如果您不想安装其他软件包,则可以手动执行。只需收集文件列表,然后在其中设置可执行位的文件中进行查找即可:

    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),并且仅在通过两个测试后才打印其名称。

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

    我没有办法只列出已卸载软件包中包含的可执行文件。但是,由于大多数可执行文件都安装在bin目录中,因此您可以通过分析输出来获取大多数可执行文件:

     apt-file -F list ncurses-term | grep -Ew "bin|sbin"
    

    -w选项匹配整个单词,因此您不会在其中安装trashbin任何东西。


注意:以上命令均不会产生任何输出,ncurses-term但这是因为此程序包未安装可执行文件。尽管如此,这些命令仍然有效,请尝试使用其他软件包。


嗨,terdon,您确定该命令应在未安装的应用程序上运行吗?当我尝试时,它只是提供安装。哪个不是很奇怪,因为.install文件(可能)与应用程序一起下载了?
Jacob Vlijm 2014年

@Jacob是的,我只是尝试使用我知道未安装apt-file的软件包并 列出了软件包的内容。适用于Debian测试和Ubuntu 13.10。
terdon 2014年

啊哈,谢谢,这只是我的想法,因为依赖关系也显示在未安装的应用程序上。
Jacob Vlijm 2014年


3

有可能使用您的浏览器(因此不需要访问APT系统)。例如,要列出“ ncurses-term”软件包的文件内容,只需键入

https://packages.debian.org/wheezy/all/ncurses-term/filelist

放入您浏览器的地址栏(根据需要替换“ wheezy”),以用于Debian或

http://packages.ubuntu.com/saucy/all/ncurses-term/filelist

对于Ubuntu(根据需要替换“ saucy”)。


一个有趣的方法。该列表适用于Debian软件包,因此:对于其他发行版(如Ubuntu或Kali),它是否应该相同?
Sopalajo de Arrierez 2014年

1
@Sopalajo de Arrierez:准确阅读:我也发布了Ubuntu相同软件包的链接(在此示例中为ncurses-term)。如果特定的Ubuntu版本与Debian套件之一具有相同的软件包版本,则文件列表可能相同,但不一定如此。Ubuntu,Kali,Aptosid,CrunchBang和所有其他基于Debian的发行版都可以根据需要对软件包进行修改(尤其是“ README”之类的文件或init系统的配置文件)。
Michael Kremser 2014年

我了解@MichaelKremser。因此,正如我所看到的,在网络上搜索软件包的内容很有用,但最好是在特定发行版的官方软件包列表中进行搜索。
Sopalajo de Arrierez,2014年

1
@Sopalajo de Arrierez:是的,是的。如果您使用的是Debian Wheezy,请使用Debian Wheezy的软件包列表;如果您使用的是Debian测试,请使用该软件包列表;如果您使用的是Ubuntu Precise,请使用其列表。总是会有差异的,尽管例如,Ubuntu从Debian获取了许多未修改的软件包。但是,这可能随时更改。
Michael Kremser 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.