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

Sop*_*rez 17 package-management command-line apt

我想知道一些特定的安装了什么,例如,在安装时ncurses,我发现TAB密钥扩展:

sudo apt-get install ncurses-
Run Code Online (Sandbox Code Playgroud)

显示:

ncurses-base      ncurses-doc       ncurses-hexedit
ncurses-bin       ncurses-examples  ncurses-term
Run Code Online (Sandbox Code Playgroud)

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

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

ter*_*don 21

这里有几个选项,它们将列出一个包安装的所有文件:

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

  1. 对于已安装的包

    dpkg -L ncurses-term
    
    Run Code Online (Sandbox Code Playgroud)
  2. 对于所有软件包,安装与否

    apt-file -F list ncurses-term
    
    Run Code Online (Sandbox Code Playgroud)

    -F模式匹配的轮次,以便只返回名称完全匹配的包。您可能需要使用 安装apt-filesudo apt-get install apt-file然后使用sudo apt-file update.

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

  1. 对于已安装的包

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

    dlocate -lsbin ncurses-term 
    
    Run Code Online (Sandbox Code Playgroud)

    如中所述man dlocate

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

    如果您不想安装其他软件包,可以手动执行此操作。只需收集文件列表并找到其中设置了可执行位的任何文件:

    apt-file -F list ncurses-term | cut -d ' ' -f 2 | 
        while read file; do [[ -x $file && -f $file ]] && echo "$file"; done
    
    Run Code Online (Sandbox Code Playgroud)

    上面的小脚本将仅打印路径 ( cut -d ' ' -f 2),然后通过while循环检查文件是否可执行 ( -x $file) 以及它是否是常规文件,没有目录或符号链接 ( -f $file) 并仅在通过两个测试时才打印其名称.

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

    我不知道仅列出已卸载软件包中包含的可执行文件。但是,由于大多数可执行文件都安装到bin目录中,因此您可以通过解析输出来获取其中的大部分:

     apt-file -F list ncurses-term | grep -Ew "bin|sbin"
    
    Run Code Online (Sandbox Code Playgroud)

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


注意:上述命令都不会产生任何输出,ncurses-term但这是因为此软件包未安装任何可执行文件。这些命令仍然有效,请尝试使用不同的包。


Syl*_*eau 5

您可以使用 apt-file:

sudo apt-file update        
apt-file list package_name
Run Code Online (Sandbox Code Playgroud)

  • 如果未安装“apt-file”,您可以使用“sudo apt-get install apt-file”安装它。 (4认同)