題 在Ubuntu / Debian中找到文件所屬的包?


在我的Ubuntu 8.04系統上工作時,我經常發現自己錯過了程序,手冊頁或其他文件。是否有任何簡單的方法來查找包含給定文件的包(無論是否已安裝)?也許是apt或dpkg的一些模糊選項?


261
2017-07-22 19:06


起源


在Ubuntu上也一樣: askubuntu.com/questions/481/... - Ciro Santilli 新疆改造中心 六四事件 法轮功
dpkg -S /path/to/file如果你安裝了包。 - Zaz


答案:


apt-file search filename

要么

apt-file search /path/to/file


安裝 apt-file, 使用:

sudo apt-get install apt-file

您需要先更新其數據庫,然後才能使用它:

sudo apt-file update

215
2017-07-22 19:08



僅供參考:apt-file似乎依賴於存儲庫提供的Contents-amd64.gz。並非所有第三方回購都提供此文件。 - Jokester
它對我不起作用。我更新了數據庫,但它沒有返回任何內容。 dpkg -S 的工作原理如下。 - Northys


(Debian / Ubuntu)了解文件所屬的包

dpkg -S /usr/bin/ls

'dpkg -S'只匹配你的字符串   提供它,所以只使用'ls'作為   參數匹配任何文件   包含'ls'的包裝   文件名。所以通常這是一個好主意   使用絕對路徑。你可以看到   在第二個例子中,12000   dpkg已知的文件與   裸弦'ls'。


353
2017-07-22 19:13



只有文件已經安裝 - John T
與之相反 apt-file,如果通過手動安裝,它也可以找到文件包 dpkg -i! - tanius
如果你得到 dpkg-query:找不到匹配模式的路徑  試試這個: dpkg -S "$(readlink -fn "$(which rename)")"。 - Pablo Bianchi
很奇怪,這對我不起作用: dpkg-query: no path found matching pattern /usr/bin/java,雖然有一個檔案 /usr/bin/java - nnyby


packages.debian.org 是我一直用來完成這項任務的東西。它優於apt-file,因為它也可以找到文件名的一部分。它還鏈接到主要包列表,列出描述,錯誤等。總而言之,這是一個很好的網站。從命令行不是很有用,但仍然非常有用。

為了速度,我給網址添加了書籤:

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

在Firefox中,並添加了“debfind”作為關鍵字(點擊書籤管理器中的“更多”並點亮它),所以我只需輸入“debfind”即可。對於其他版本的發行版,您可以將“套件”從“不穩定”更改為“穩定”,或者根據需要進行測試。


17
2017-07-22 20:07



但它不適用於自定義存儲庫。 - Ctrl-C
關於自動化的選擇很差。 - Alexander Shcheblikin


您也可以使用dlocate。從手冊頁;

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

11
2017-08-08 19:30



dlocate 也是我最喜歡的方法,非常可靠。 - Avio
@Avio dlocate 除非您運行,否則找不到最近安裝的軟件包 sudo update-dlocatedb 第一。該命令每天在/etc/cron.daily/dlocate中自動運行 - jarno


我找到了Wajig ......

wajig whichpackage /path/to/file 

例如。

wajig whichpackage /etc/apt/sources.list

Wajig是一個方便的命令行或控制台工具,它包含了你從未想過的所有apt-get,dpkg優點。 。

要安裝wajig使用:

apt-get install wajig

那個命令'whichpackage'本身依賴於apt-file

你仍然需要更新它的數據庫才能使用它: - 我還不知道如果wajig更新whixh apt-get更新也會更新文件緩存,但我希望它可以。

sudo wajig update

sudo apt-file update

(和Super Cow,復活節egss?!)


4
2018-01-14 02:40





Simmilar對於jamuraa對Debian的回答,你也可以去 http://packages.ubuntu.com/ 對於Ubuntu。你需要向下滾動才能找到 “搜索包的內容” 搜索框,您可以在其中輸入文件的路徑。


2
2017-10-28 10:40



現在如果只有Raspbian也有一個:) - XTL


嘗試使用搜索文件 http://www.kodkast.com/applications/find-which-package-file-belongs-to

這是一個搜索包含在不同rpms / linux包中的文件的應用程序,當你甚至沒有在你的機器上安裝rpm時非常有用。


0
2017-12-20 00:33



Downvote:鏈接斷開,鏈接似乎首先用於RPM包。 - tripleee


command-not-found軟件包為您提供有關潛在命令和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

0
2017-11-24 09:59



但這不適用於任意文件,例如OP請求。 - α CVn
如果程序執行了有害的操作並安裝了IS,這是一個有問題的提示。添加 -h 要么 --help 最後會有所幫助。如果加入 -h 最後會讓我足夠安全,我會推薦,但即便如此,這也不是實現OP要求的好方法。 - Dr Beco