在Ubuntu / Debian中找到文件所属的软件包?


299

在Ubuntu 8.04系统上工作时,我经常发现自己缺少程序,手册页或其他文件。有没有一种简单的方法来查找包含给定文件的软件包(无论是否已安装)?也许apt或dpkg有一些晦涩的选择?



25
dpkg -S /path/to/file如果已安装软件包。
Zaz

Answers:


247
apt-file search filename

要么

apt-file search /path/to/file


要安装apt-file,请使用:

sudo apt-get install apt-file

您需要先更新其数据库,然后才能使用它:

sudo apt-file update

7
仅供参考:apt-file似乎取决于存储库提供的Contents-amd64.gz。并非所有的第三方存储库都提供此文件。
Jokester

3
它对我没有用。我更新了数据库,但它不返回任何内容。dpkg -S如下所述工作。
Northys

404

(Debian / Ubuntu)发现文件属于哪个包

dpkg -S /usr/bin/ls

'dpkg -S'只匹配您提供的字符串,因此仅使用'ls'作为参数将匹配文件名中任何带有'ls'的软件包中的任何文件。因此,通常最好使用绝对路径。您可以在第二个示例中看到,已知有dpkg的12,000个文件与裸字符串“ ls”匹配。


33
仅当文件已安装时
John T

19
相比之下apt-file,如果通过dpkg -i!手动安装了软件包,它还会将软件包查找到文件中。
tanius

4
如果您得到dpkg-query:找不到匹配模式的路径,请 尝试以下方法dpkg -S "$(readlink -fn "$(which rename)")"
Pablo

1
怪异的,这对我不起作用:dpkg-query: no path found matching pattern /usr/bin/java,尽管有档案/usr/bin/java
nnyby

@nnyby请参阅Pablo A的评论
vog

19

packages.debian.org是我经常用来完成此任务的工具。它比apt-file优越,因为它也可以找到文件名的一部分。它还链接到主软件包列表,其中将列出描述,错误等。总而言之,这是一个不错的网站。在命令行上没有那么有用,但是仍然很有用。

为了提高速度,我将网址添加为书签:

http://packages.debian.org/search?searchon=contents&keywords=%s&mode=filename&suite=unstable&arch=any

在Firefox中,并添加了“ debfind”作为关键字(在书签管理器中单击“更多”,将其高亮显示),因此我只需键入“ debfind”即可。您可以将其“套件”从不稳定更改为稳定,也可以根据需要针对其他版本的发行版进行测试。


但是,它不适用于自定义存储库。
Ctrl-C

自动化方面的选择差。
Alexander Shcheblikin的

11

您也可以使用dlocate。从手册页;

$ dlocate [ PATTERN ]
List all records where either the package name or the filename matches PATTERN.

1
dlocate也是我最喜欢的方法,非常可靠。
Avio 2013年

2
dlocate除非您sudo update-dlocatedb先运行,否则@Avio 不会找到最近安装的软件包。该命令每天自动在/etc/cron.daily/dlocate中运行
-jarno

4

我发现瓦吉格...

wajig whichpackage /path/to/file 

例如。

wajig whichpackage /etc/apt/sources.list

Wajig是一个方便的命令行或控制台工具,它包装了您从未学过的所有apt-get,dpkg优点。。

要安装wajig,请使用:

apt-get install wajig

该命令“哪个包”本身取决于apt-file

您仍然需要先更新其数据库,然后才能使用它:-我尚不知道wajig update whixh是否执行apt-get更新也会更新文件缓存,但我希望可以。

sudo wajig update

sudo apt-file update

(还有“超级牛,复活节”吗?!)


2

Simmilar是jamuraa对Debian的回答,对于Ubuntu,也可以访问http://packages.ubuntu.com/。您必须向下滚动一点,以找到“搜索包内容”搜索框,您可以在其中输入文件的路径。


现在,如果只有Raspbian也有一个:)
XTL 2015年


0

command-notfound软件包为您提供了有关潜在命令和debian软件包名称的提示。通过在bash shell中键入命令并查看其输出来工作。

例如,如果命令名称已知:

zer@ivy:~ 10:45 $ zsh5
The program 'zsh5' is currently not installed.  To run 'zsh5' please ask
your administrator to install the package 'zsh'
zsh5: command not found

如果命令未知,那么将进行一些猜测:

zer@ivy:~ 09:46 $ zsh
No command 'zsh' found, did you mean:
 Command 'lsh' from package 'lsh-client' (main)
 Command 'osh' from package 'omake' (main)
 Command 'ysh' from package 'libyaml-shell-perl' (main)
 Command 'ssh' from package 'openssh-client' (main)
 Command 'vsh' from package 'crystalspace' (main)
 Command 'dsh' from package 'dsh' (main)
 Command 'ash' from package 'ash' (main)
 Command 'msh' from package 'nmh' (main)
 Command 'zssh' from package 'zssh' (main)
 Command 'qsh' from package 'gridengine-client' (main)
 Command 'sh' from package 'dash' (main)
 Command 'bsh' from package 'bsh' (main)
zsh: command not found

但是,这不适用于任意文件,例如请求的OP。
CVn

如果程序执行有害操作并安装了该程序,这将是一个有问题的提示。在末尾添加-h--help会有所帮助。如果建议-h在末尾添加该内容足以确保安全,那么即使如此,这也不是实现OP要求的好方法。
Beco博士
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.