如何判断可执行文件来自哪个包?

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

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

一个相关的答案, 如何告诉我们安装什么作为一个包的一部分 ,帮助我弄清楚perl包包含prename但不rename – 事实certificate我的/usr/bin/rename指向/etc/alternatives/rename它指向/usr/bin/prename

所以这仍然令人困惑。 在我安装perl之前, /etc/alternatives/rename指向其他地方? 是否有一般方法来判断哪些包来自哪个?

安装apt-file

 $ sudo apt-get install apt-file 

更新apt-file

 $ 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

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

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

您可以尝试使用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一部分

截至2018年

 apt search filename 

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

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