如何找到提供别名的包?

如何找到提供别名的包?

使用apt-file我可以找到提供某些可执行文件的软件包,例如:

sudo apt-file search {/bin,/sbin,/usr/bin/,/usr/sbin}/wget

实际上:

sudo apt-file search {/bin,/sbin,/usr/bin/,/usr/sbin}/wget | grep "/wget$"

(因为否则它只会返回所有包含以wget. 开头的可执行文件的包)

现在我正在跑步:

EXEC_NAME="x86_64-w64-mingw32-g++"
sudo apt-file search {/bin,/sbin,/usr/bin/,/usr/sbin}/${EXEC_NAME} | grep "${EXEC_NAME}$"

令人惊讶的是,它没有返回任何内容。为什么?因为没有包提供具有该名称的文件。

如果我运行:

EXEC_NAME="x86_64-w64-mingw32-g++"
sudo apt-file search {/bin,/sbin,/usr/bin/,/usr/sbin}/${EXEC_NAME}

我得到以下结果:

g++-mingw-w64-x86-64-posix: /usr/bin/x86_64-w64-mingw32-g++-posix
g++-mingw-w64-x86-64-win32: /usr/bin/x86_64-w64-mingw32-g++-win32

暗示没有提供包裹x86_64-w64-mingw32-g++

但过了一段时间,我发现它g++-mingw-w64-x86-64-posix不仅提供了可执行文件g++-mingw-w64-x86-64-posix,还提供了一个名为的别名或符号链接g++-mingw-w64-x86-64

在这种情况下,很容易弄清楚,因为该包恰好包含另一个名称非常相似的二进制文件。现在我的问题是,我需要以一种适用于任何别名/符号链接的方式自动执行此操作,即使对于名称完全不同的别名/符号链接也是如此。

我怎样才能做到这一点?

编辑:

g++-mingw-w64-x86-64-posix.postinst别名是在包的文件中创建的g++-mingw-w64-x86-64-posix,以防有帮助:

update-alternatives --install /usr/bin/x86_64-w64-mingw32-g++ x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix 30 \
  --slave /usr/bin/x86_64-w64-mingw32-c++ x86_64-w64-mingw32-c++ /usr/bin/x86_64-w64-mingw32-c++-posix

编辑2: 有没有办法搜索所有包的文件内容.postinst?也许可以通过将所有.postinst文件下载到缓存中?也许可以先下载每个包的文件头,查看 .postinst 文件位于档案中的哪个字节,然后使用 HTTP 范围请求下载它们?

编辑3:

这不会改变任何东西,但我发现除了 grep 和 cut 之外,您还可以使用-x-l标志。这会使命令更短一些:

sudo apt-file search -l -x "^/(bin|sbin|usr/bin|usr/sbin)/${EXEC_NAME}$" | head -1

答案1

如果你dwww使用命令下载

sudo apt install dwww

您可以使用其子包之一 dwww-quickfind 来快速找到它。以下内容来自 dwww 手册页:

dwww-quickfind(8)

        Used by dwww-find(8) to  quickly  find  which
        package a program belongs to.

只是为了测试一下界面,从终端运行了 10 - 15 条命令,有些是 GNU,有些不是,没有问题。例如,当我运行

:~$ dwww-quickfind man

结果是

man-db
VIRTUAL: man-db

它显然会跟踪符号链接,所以我猜它也会跟踪别名。无论如何,它都值得一试。即使它没有,获得它也是dwww值得的。输入dwww <any-pkg>后你就会明白。

这就像是man强化版的指令。

答案2

符号链接的问题在于它们不一定由包安装。

您可以使用readlink -f [/path/file]它来(尝试)获取真实文件的路径。如果/path/file是符号链接,readlink则返回符号链接指向的文件。如果存在符号链接链,则将readlink跟踪它们,直到到达链中的断点或真实文件。

然后您就可以使用apt-file它来搜索包。

相关内容