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

A S*_*ity 113 debian package-management dpkg aptitude

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

A S*_*ity 149

user@host:~$ dpkg-query -S /bin/bash 
bash: /bin/bash
Run Code Online (Sandbox Code Playgroud)

其中 bash 是包名。

  • 这个答案比公认的好得多! (8认同)

whi*_*ark 58

要在不安装任何额外软件包的情况下执行此操作,请运行

user@host:~$ dpkg-query -S /bin/bash 
bash: /bin/bash
Run Code Online (Sandbox Code Playgroud)

其中 bash 是包名。


或者,Debian 中有几个实用程序可以执行此任务;检查此页面以获取说明。我会提到其中两个,apt-filedlocate

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

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

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


安装和使用 apt-file

最好先更新:

sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

看看有什么apt-file用:

apt-cache show apt-file
Run Code Online (Sandbox Code Playgroud)

安装它:

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

从存储库读取数据(这也可以在没有sudo但创建用户缓存的情况下工作;sudo缓存是系统范围的):

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

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

apt-file search xrandr
Run Code Online (Sandbox Code Playgroud)

它列出了许多带有unxrandr,lxrandr.mo或 的包source_lxrandr.py。在我们的情况下不是很有用。更聪明的搜索:

apt-file search -x /xrandr$
Run Code Online (Sandbox Code Playgroud)

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

bash-completion: /usr/share/bash-completion/completions/xrandr
x11-xserver-utils: /usr/bin/xrandr
Run Code Online (Sandbox Code Playgroud)

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

apt-cache show x11-xserver-utils
Run Code Online (Sandbox Code Playgroud)

答对了!这是包裹。


Ger*_*erg 47

另一种选择:

$ dpkg -S /bin/bash
bash: /bin/bash
Run Code Online (Sandbox Code Playgroud)

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


Cir*_*郝海东 18

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

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

但是在:

dpkg -S /bin/nc
Run Code Online (Sandbox Code Playgroud)

我们得到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)"
Run Code Online (Sandbox Code Playgroud)


Phi*_*rns 5

不熟悉 Debian,当我尝试这个时我很困惑:

kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/vncviewer
dpkg-query: no path found matching pattern /usr/bin/vncviewer
kearnsp@xubuntuvb:~$ 
Run Code Online (Sandbox Code Playgroud)

经过一番调查,我找到了这个包:

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