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

评论

在Ubuntu上也一样:askubuntu.com/questions/481/…

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

^接受的答案,胜于依赖于apt-file

#1 楼

apt-file search filename




apt-file search /path/to/file




要安装apt-file,请使用:

sudo apt-get install apt-file


使用数据库之前,您需要先更新其数据库:

sudo apt-file update


评论


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

–笑话
15年3月25日在6:27

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

– Northys
16 Dec 28'在12:36

在大多数情况下,您将不需要安装非标准软件包(apt-file),而不必使用预先安装的软件包(dpkg)。请参阅投票最高的答案。

–亚历山大·列夫丘克(Aleksandr Levchuk)
19-10-17在12:50

#2 楼

(Debian / Ubuntu)发现文件所属的软件包: ,因此仅将'ls'用作
参数会匹配来自任何
包中在文件
中任何位置具有'ls'的任何文件。因此通常使用绝对路径是一个好主意。您可以在第二个示例中看到
已知dpkg的12,000个
文件与
裸字符串'ls'相匹配。


评论


只有在文件已经安装的情况下

– John T
09年7月22日在19:16

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

– Tanius
15年2月28日在5:09

如果您得到dpkg查询:找不到匹配模式的路径,请尝试以下操作:dpkg -S“ $(readlink -fn” $(重命名)“)”。

– Pablo A
17年7月7日在21:02

很奇怪,这对我不起作用:dpkg-query:找不到与模式/ usr / bin / java匹配的路径,尽管/ usr / bin / java中有一个文件

–nnyby
18年5月23日在17:28

@nnyby查看Pablo A的评论

–vog
19-10-2在10:59

#3 楼

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

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


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

评论


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

– Ctrl-C
18年6月29日在11:40

自动化方面的选择差。

–亚历山大·舒布利金(Alexander Shcheblikin)
18年8月1日在16:56

#4 楼

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

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


评论


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

– Avio
2013年9月16日20:14在

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

– jarno
16年1月18日在11:06

#5 楼

我发现了Wajig ...

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


(和Super Cow,复活节蛋?!)

#6 楼

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

评论


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

– XTL
15年5月30日在10:39

#7 楼

尝试使用http://www.kodkast.com/applications/find-which-package-file-belongs-to

搜索文件。该应用程序可搜索包含在不同rpm中的文件/ linux软件包,当您甚至没有在计算机上安装rpm时,它都非常有用。

评论


Downvote:链接断开,并且该链接似乎首先是用于RPM软件包的。

–tripleee
18年4月17日在7:01

#8 楼

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。

–用户
15年3月12日在12:26

如果程序执行有害操作并安装了该程序,这将是一个有问题的提示。在末尾添加-h或--help会有所帮助。如果在末尾添加-h将使此操作足够安全,我会建议这样做,但是即使那样,这也不是实现OP要求的好方法。

– DrBeco
16年4月27日在15:51