我正在回答一个建议使用的问题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