在 Ubuntu/Debian 中查找文件属于哪个包?

Jay*_*rod 348 debian package-management dpkg aptitude ubuntu

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

spl*_*tne 475

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

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

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

  • 仅当文件已安装时 (36认同)
  • 与 `apt-file` 不同,如果它是通过 `dpkg -i` 手动安装的,它也会找到文件的包! (24认同)
  • 如果你得到 _dpkg-query: no path found matching pattern_ [试试这个](https://unix.stackexchange.com/questions/159001/how-to-find-the-package-that-installed-a-comand-if -dpkg-s-finds-no-path-beca/159002#159002): `dpkg -S "$(readlink -fn "$(which rename)")"`。 (5认同)
  • 奇怪,这对我不起作用:`dpkg-query: no path found matching pattern /usr/bin/java`,尽管在`/usr/bin/java` 中有一个文件 (2认同)

Joh*_*n T 284

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

或者

apt-file search /path/to/file
Run Code Online (Sandbox Code Playgroud)


要安装apt-file,请使用:

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

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

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

  • 仅供参考:apt-file 似乎依赖于存储库提供的 Contents-amd64.gz。并非所有 3rd 方存储库都提供此文件。 (8认同)
  • 它对我不起作用。我更新了数据库,但它没有返回任何内容。`dpkg -S` 的工作原理如下所述。 (3认同)

jam*_*raa 22

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

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

http://packages.debian.org/search?searchon=contents&keywords=%s&mode=filename&suite=unstable&arch=any
Run Code Online (Sandbox Code Playgroud)

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


jer*_*iah 11

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

$ dlocate [ PATTERN ]
List all records where either the package name or the filename matches PATTERN.
Run Code Online (Sandbox Code Playgroud)

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

小智 5

我找到了瓦吉格...

wajig whichpackage /path/to/file 
Run Code Online (Sandbox Code Playgroud)

例如。

wajig whichpackage /etc/apt/sources.list
Run Code Online (Sandbox Code Playgroud)

Wajig 是一个方便的命令行或控制台工具,它包含了您从不想学习的所有 apt-get、dpkg 优点。.

要安装 Wajig,请使用:

apt-get install wajig
Run Code Online (Sandbox Code Playgroud)

该命令 'whichpackage' 本身取决于 apt-file

在使用它之前,您仍然需要更新它的数据库: - 我还不知道 wajig update whixh 是否执行 apt-get update 也会更新文件缓存,但我希望它可以。

sudo wajig update

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

(还有超级牛,复活节彩蛋?!)