如何查找已安装软件包的程序名称?

ble*_*ft2 6 package-management apt dpkg

当我使用 安装了一个软件包时apt,有没有办法找出我可以通过哪个命令运行已安装的程序?

例如,该包httpcode不可用httpcode,并且包描述 ( apt show httpcode) 没有解释如何运行它。我怎么会发现它是从命令行运行的hc

我发现有两个稍微有点hacky的解决方法:

  1. 假设程序是由安装在默认情况下usr/bin,我跑到ls -ltc | head -n 10那里找recenlty感动文件,而事实上我发现hc

  2. 与 1 类似,dpkg -L httpcode返回通过安装包创建的文件列表,其中还列出了/usr/bin/hc.

对于这个问题,是否有更好的解决方案,而不取决于程序可能存储在磁盘上的位置的直觉?

我还发现它man httpcode确实打开了程序的手册页,即使我使用包名作为参数调用它。这是否总是有效(如果程序提供联机帮助页)?

N0r*_*ert 11

文件的位置(可执行文件、手册页和其他内容)通常应符合文件系统层次结构标准

我个人用以下四种方法之一解决了这个问题:

  1. 众所周知,可执行文件放置在$PATH环境变量中声明的目录中:

    $ echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

    因此,您可以列出所有包文件dpkg --listman dpkg有关详细信息,请参阅)并在/bin/sbin/usr/bin/usr/sbin/usr/games目录中查找文件。所以我们可以使用以下命令:

    $ dpkg -L httpcode | grep -E "/bin/|/sbin/|/usr/games/"
    /usr/bin/hc
    
    Run Code Online (Sandbox Code Playgroud)

    所以我们可以看到/usr/bin/hc属于这个包。

  2. 列出所有手册页:

    $ dpkg -L httpcode | grep "/man/"
    /usr/share/man/man1
    /usr/share/man/man1/hc.1.gz
    
    Run Code Online (Sandbox Code Playgroud)

    所以我们可以看到我们可以使用man hc.

  3. 对于带有 GUI 的应用程序,我运行搜索*.desktop文件。

    $ dpkg -L httpcode | grep ".desktop"
    $
    
    Run Code Online (Sandbox Code Playgroud)

    在这种特殊情况下,它不会返回任何内容。

    对于一些复杂的专有(或打包不良)的东西,此方法转换为读取文件中的Exec变量*.desktop- 这里 Telegram 是一个示例:

     $ dpkg -L telegram | grep ".desktop"
    /usr/share/applications/telegram.desktop
    
    $ grep Exec $(dpkg -L telegram | grep ".desktop")
    Exec=/opt/telegram/Telegram -- %u
    
    Run Code Online (Sandbox Code Playgroud)

    关于Exec桌面条目规范

  4. 对于未安装的软件包,可以访问https://packages.ubuntu.com并在此处使用搜索软件包目录(对于所有版本选定版本),然后单击表右栏中的文件列表链接:

    文件列表链接

    一个将获得文件列表:

    httpcode 包的文件列表

    此列表可以手动解释或使用浏览器中的搜索栏进行解释。

  • 您的可执行文件 * 必须* 位于 PATH 的目录之一中,否则仅在终端中键入可执行文件的名称将无法找到它。 (2认同)