我如何知道可执行文件来自哪个包?

我如何知道可执行文件来自哪个包?

我正在回答一个建议使用的问题rename,但我意识到我不知道它来自哪个包(作为答案的一部分,我想象会说“如果你没有rename,它会作为[包]的一部分安装”)。

man rename告诉我SEE ALSO: mv(1), perl(1)-所以我的第一个想法是它是用 perl 安装的。

相关答案,如何判断软件包中安装了什么,帮助我弄清楚 perl 包包含prename但不包含rename- 事实证明,我指向的/usr/bin/rename指向/etc/alternatives/rename/usr/bin/prename

所以这仍然有点令人困惑。/etc/alternatives/rename在我安装 perl 之前是否指向了其他地方?有没有一种通用的方法可以判断某个东西来自哪个包?

答案1

安装 apt 文件

$ sudo apt-get install apt-file

更新 apt 文件

$ sudo apt-file update

搜索文件所属的包

$ apt-file search filename

找到可执行文件的路径

$ whereis rename
rename: /usr/bin/rename.ul /usr/bin/rename /usr/bin/X11/rename.ul /usr/bin/X11/rename     /usr/share/man/man1/rename.1.gz /usr/share/man/man2/rename.2.gz

搜索包

$ apt-file search /usr/bin/rename
ladr4-apps: /usr/bin/renamer
util-linux: /usr/bin/rename.ul

包名称是:util-linux

答案2

事实证明,dpkg-query获取有关已安装软件包的信息很有用,并且使用 -S [pattern] 选项将搜索包含与 [pattern] 对应文件的软件包。

dpkg-query -S [filename-search-pattern]

答案3

截至 2018 年

apt search filename

适用于最新的 Ubuntu 和大多数基于 Debian 的发行版。

2018 年 5 月更新:显然不再适用于 Ubuntu 18.04。

答案4

你可以尝试一下apt-file(它不是默认安装的一部分)。

0)更新 apt-file 数据库

sudo apt-file update

1)查找二进制

$ which rename
/usr/bin/rename

2)查找包

$ apt-file search /usr/bin/rename
util-linux: /usr/bin/rename.ul

瞧——重命名是util-linux

相关内容