Answers:
Debian中有几种实用程序可以执行此任务。检查此页面以获取描述。我会提到其中的两个,apt-file
和dlocate
。
apt-file
搜索其内部缓存,从而使您不必安装要搜索的所有软件包。您将在下面找到更详细的指南。
dlocate
是dpkg -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
它列出了很多包unxrandr
,lxrandr.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
答对了!这是包裹。
找不到安装生成的文件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-alternatives
的postinst脚本中的调用生成了该调用。
之所以这样工作,/bin/nc
是因为netcat-traditional
软件包提供了另一个版本。
我认为没有找到这种生成文件的通用方法。在替代符号链接的特定情况下,我们可以在链接后面加上readlink -f
:
dpkg -S "$(readlink -f /bin/nc)"
不熟悉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:~$