列出特定 Debian 软件包的所有命令

May*_*hux 10 command-line ubuntu debian

我想知道特定 Debian 软件包为我提供的命令。

例如,假设我安装了一个名为x.deb. 这个包肯定包含一些我可以使用的命令。

如何列出这些命令。

我知道我可以使用compgenbash 命令来生成系统中所有可用命令的列表,但我只需要特定包。

我尝试了以下解决方案:

dpkg -L postgresql-9.3 | egrep '(bin|games)/'
/usr/lib/postgresql/9.3/bin/pg_upgrade
/usr/lib/postgresql/9.3/bin/pg_ctl
/usr/lib/postgresql/9.3/bin/pg_resetxlog
/usr/lib/postgresql/9.3/bin/postgres
/usr/lib/postgresql/9.3/bin/pg_xlogdump
/usr/lib/postgresql/9.3/bin/initdb
/usr/lib/postgresql/9.3/bin/pg_controldata
/usr/lib/postgresql/9.3/bin/postmaster
Run Code Online (Sandbox Code Playgroud)

我试过命令 postgres

user@userPc:~$ postgres
No command 'postgres' found, did you mean:
 Command 'postgrey' from package 'postgrey' (universe)
postgres: command not found
Run Code Online (Sandbox Code Playgroud)

Win*_*nny 14

使用dpkg -L pkgname并将其通过管道传递给搜索bin/and的 grep 命令games/

$ dpkg -L bash | grep -E '(bin|games)/'
/bin/bash
/usr/bin/bashbug
/usr/bin/clear_console
/bin/rbash
Run Code Online (Sandbox Code Playgroud)

如果你想检查所有二进制文件,不管它们是否在你的$PATH试试这个 bash 函数中:

find_binaries (){
    dpkg -L "$@" | while read; do
        [ -f "$REPLY" -a -x "$REPLY" ] && echo "$REPLY"
    done
}
Run Code Online (Sandbox Code Playgroud)

像这样调用:

$ find_binaries postfix
...SNIP...
/usr/lib/postfix/postfix-files
/usr/lib/postfix/pipe
/usr/lib/postfix/proxymap
/usr/lib/postfix/local
/usr/lib/postfix/discard
...SNIP...
Run Code Online (Sandbox Code Playgroud)


ter*_*don 11

1. 使用专为工作设计的工具。

最简单也可能是最健壮的方法是安装dlocate

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

然后你可以运行

dlocate -lsbin package-name
Run Code Online (Sandbox Code Playgroud)

如中所述man dlocate

-lsbin List full path/filenames of executable files (if any) in package
Run Code Online (Sandbox Code Playgroud)

2.解析包数据库

这是与@Winny 类似但简化的方法

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

如果您还没有apt-file安装,可以使用以下命令进行安装和设置:

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

上面的命令apt-file用于列出包的内容,然后是 bash 的测试-f(这是一个文件吗?)和-x(它是否可执行?),如果两个测试都通过,则打印文件名。

请注意,虽然类似下面的命令将为您提供最多的可执行文件:

apt-file -L list package | grep -Ew 'bin|sbin'
Run Code Online (Sandbox Code Playgroud)

它不会找到所有内容,因为您还可以在类似/opt或什至/libudev例如各种工具)的地方获得可执行文件。因此,虽然使用-w来匹配整个单词会增加您正确识别文件的机会,但解析路径并不是一个好方法,您应该改用上述方法之一。