如何找出哪个包拥有文件?


Answers:


44

Debian中有几种实用程序可以执行此任务。检查此页面以获取描述。我会提到其中的两个,apt-filedlocate

apt-file搜索其内部缓存,从而使您不必安装要搜索的所有软件包。您将在下面找到更详细的指南。

dlocatedpkg -L(列出软件包内容的命令)的快速替代方法,因此,它仅搜索已安装的软件包。搜索由执行dlocate -S file.name

您也可以使用packages.debian.org服务器在线搜索软件包(“ 搜索软件包的内容”部分)。


安装和使用 apt-file

首先更新是个好主意:

sudo apt-get update

看看apt-file是为了什么:

apt-cache show apt-file

安装它:

sudo apt-get install apt-file

从存储库中读取数据(这也可以不使用sudo但只能创建用户的缓存;然后sudo在系统范围内使用缓存):

sudo apt-file update

执行搜索。在此示例中,我们想知道xrandr可执行文件在哪个包中:

apt-file search xrandr

它列出了很多包unxrandrlxrandr.mosource_lxrandr.py。在我们的情况下不是很有用。更聪明的搜索:

apt-file search -x /xrandr$

$表示行尾)。输出示例:

bash-completion: /usr/share/bash-completion/completions/xrandr
x11-xserver-utils: /usr/bin/xrandr

第一个结果看起来不像可执行文件,第二个结果看起来不可执行。我们可以进一步调查。跑:

apt-cache show x11-xserver-utils

答对了!这是包裹。


该答案的第一个链接(debianhelp.co.uk/findfile.htm)现在似乎已消失
rogpeppe

123
user@host:~$ dpkg-query -S /bin/bash 
bash: /bin/bash

其中bash是软件包名称。


4
这个答案比公认的要好得多!
Bex

正确。不幸的是,“接受的答案”带有绿色的选中标记,该标记也传达了“正确的答案”。在这种情况下,被接受的答案会错过,dpkg-query -S并且它会向您发送错误的安装可选软件包的路径
。–

42

另一种选择:

$ dpkg -S /bin/bash
bash: /bin/bash

至少在我的Ubuntu上,两者似乎都在dpkg包装中,因此对任何特定的人都没有真正的优势...


14

找不到安装生成的文件dpkg -S,如https://askubuntu.com/a/667227/52975所述

例如,/bin/nc在安装软件包时出现netcat-openbsd

但是在:

dpkg -S /bin/nc

我们得到dpkg-query: no path found matching pattern /bin/nc

发生这种情况的原因/bin/nc安装后运行update-alternativespostinst脚本中的调用生成了该调用。

之所以这样工作,/bin/nc是因为netcat-traditional软件包提供了另一个版本。

我认为没有找到这种生成文件的通用方法。在替代符号链接的特定情况下,我们可以在链接后面加上readlink -f

dpkg -S "$(readlink -f /bin/nc)"

2

不熟悉Debian,当我尝试这样做时感到困惑:

kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/vncviewer
dpkg-query: no path found matching pattern /usr/bin/vncviewer
kearnsp@xubuntuvb:~$ 

经过一些调查,我发现了该软件包:

kearnsp@xubuntuvb:~$ ls -l /usr/bin/vncviewer
lrwxrwxrwx 1 root root 27 May 28 15:49 /usr/bin/vncviewer -> /etc/alternatives/vncviewer
kearnsp@xubuntuvb:~$ ls -l /etc/alternatives/vncviewer
lrwxrwxrwx 1 root root 20 May 28 15:49 /etc/alternatives/vncviewer -> /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/xvnc4viewer
xvnc4viewer: /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.