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

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

我如何找出文件来自哪个 Debian 软件包?

答案1

若要执行此操作而不安装任何额外的软件包,请运行

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

其中 bash 是软件包名称。


另外,Debian 中有几个实用程序可以执行此任务;检查这一页了解一下。我将提到其中两个,apt-filedlocate

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

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

您还可以使用以下方式在线搜索软件包软件包信息网服务器(搜索包裹内容部分)。


安装和使用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.mo或 的软件包source_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

答对了!这就是包裹。

答案2

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

其中 bash 是软件包名称。

答案3

另一种选择:

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

至少在我的 Ubuntu 上,两者似乎都在dpkg软件包中,因此任何一个都没有真正的优势......

答案4

我对 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:~$ 

相关内容