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

Ter*_*ary 28 apt dpkg

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

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

一个相关的答案, how to tell what was installed as part of a package , 帮助我弄清楚 perl 包包含prename但不包含rename- 结果我的/usr/bin/rename指向/etc/alternatives/renamewhich 指向/usr/bin/prename

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

phi*_*bim 33

安装apt文件

$ sudo apt-get install apt-file
Run Code Online (Sandbox Code Playgroud)

更新 apt 文件

$ sudo apt-file update
Run Code Online (Sandbox Code Playgroud)

搜索文件所属的包

$ apt-file search filename
Run Code Online (Sandbox Code Playgroud)

找到可执行文件的路径

$ 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
Run Code Online (Sandbox Code Playgroud)

搜索包

$ apt-file search /usr/bin/rename
ladr4-apps: /usr/bin/renamer
util-linux: /usr/bin/rename.ul
Run Code Online (Sandbox Code Playgroud)

包名是: util-linux


Ter*_*ary 15

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

dpkg-query -S [filename-search-pattern]
Run Code Online (Sandbox Code Playgroud)

  • 只需 `dpkg -S [binary-name]` 对我有用(在 Ubuntu 16.04 上)。 (2认同)

Att*_*lop 5

截至 2018 年

apt search filename
Run Code Online (Sandbox Code Playgroud)

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

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

  • 真的吗?在 Ubuntu 仿生中,这似乎不会搜索文件名。`$ apt search` 没有任何结果,而 `wajig which-package /bin/date` 表示 `coreutils: /bin/date` (2认同)