Finden Sie, zu welchem ​​Paket eine Datei in Ubuntu / Debian gehört?

163180
Jay Conrod

Wenn ich an einem Ubuntu 8.04-System arbeite, fehlt mir häufig ein Programm, eine Manpage oder eine andere Datei. Gibt es eine einfache Möglichkeit, nachzuschauen, in welchem ​​Paket eine Datei enthalten ist (ob sie bereits installiert ist oder nicht)? Vielleicht eine obskure Option für apt oder dpkg?

264
Gleiches auf Ubuntu: http://askubuntu.com/questions/481/how-do-i-find-the-package-that-bietet-a-file Ciro Santilli 新疆改造中心 六四事件 法轮功 vor 9 Jahren 0
** `dpkg -S / path / to / file` **, wenn Sie das Paket installiert haben. Zaz vor 7 Jahren 19

8 Antworten auf die Frage

356
splattne

(Debian / Ubuntu) Entdecken Sie, zu welchem ​​Paket eine Datei gehört :

dpkg -S /usr/bin/ls 

'dpkg -S' stimmt nur mit der Zeichenfolge überein, die Sie bereitstellen. Wenn Sie also 'ls' als Argument verwenden, wird jede Datei aus einem beliebigen Paket mit 'ls' an einer beliebigen Stelle im Dateinamen gefunden. Daher ist es normalerweise eine gute Idee, einen absoluten Pfad zu verwenden. Im zweiten Beispiel sehen Sie, dass 12.000 Dateien, die dpkg bekannt sind, mit der bloßen Zeichenfolge 'ls' übereinstimmen.

Das ist nur dann der Fall, wenn die Dateien bereits installiert sind John T vor 15 Jahren 30
Im Gegensatz zu `apt-file` findet dies auch das Paket in einer Datei, wenn es manuell über` dpkg -i` installiert wurde! tanius vor 9 Jahren 17
Wenn Sie _dpkg-query erhalten, wurde kein Pfad gefunden, der mit muster_ übereinstimmt [versuchen Sie dies] (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 "$ (umbenennen)") "`. Pablo Bianchi vor 7 Jahren 3
Komisch, das hat für mich nicht funktioniert: `dpkg-query: kein passender Pfad für das Muster / usr / bin / java` gefunden, obwohl eine Datei unter` / usr / bin / java` vorhanden ist nnyby vor 6 Jahren 0
218
John T
apt-file search filename 

oder

apt-file search /path/to/file 


Zur Installation apt-fileverwenden Sie:

sudo apt-get install apt-file 

Sie müssen die Datenbank aktualisieren, bevor Sie sie verwenden können:

sudo apt-file update 
Zu Ihrer Information: apt-file scheint von Contents-amd64.gz abhängig zu sein, das von Repositorys bereitgestellt wird. Und nicht alle Repos von Drittanbietern bieten diese Datei an. Jokester vor 9 Jahren 6
Es hat bei mir nicht funktioniert. Ich habe die Datenbank aktualisiert, aber es wird nichts zurückgegeben. `dpkg -S` funktioniert wie unten beschrieben. Northys vor 7 Jahren 2
17
jamuraa

packages.debian.org benutze ich immer, um diese Aufgabe zu erledigen. Es ist apt-file überlegen, da es auch Teile von Dateinamen finden kann. Es ist auch mit der Hauptpaketliste verbunden, in der Beschreibungen, Fehler usw. aufgelistet werden. Alles in allem eine gute Website. Von der Kommandozeile nicht so nützlich, aber trotzdem recht nützlich.

Für die Geschwindigkeit habe ich die URL mit einem Lesezeichen versehen:

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

in Firefox, und fügte "debfind" als Schlüsselwort hinzu (klicken Sie auf "mehr" im Lesezeichen-Manager, um es zu erleichtern), so dass ich einfach "debfind" eingeben kann und es funktioniert. Sie können "Suite" für andere Versionen der Distribution von "instabil" in "stabil" oder "testing" ändern.

Es funktioniert jedoch nicht mit benutzerdefinierten Repos. Ctrl-C vor 6 Jahren 0
Schlechte Wahl in Sachen Automatisierung. Alexander Shcheblikin vor 6 Jahren 0
11
jeremiah

Sie können auch dlocate verwenden. Von der Manpage;

$ dlocate [ PATTERN ] List all records where either the package name or the filename matches PATTERN. 
`dlocate` ist auch meine Lieblingsmethode, sehr zuverlässig. Avio vor 11 Jahren 1
@Avio `dlocate` findet kein kürzlich installiertes Paket, es sei denn, Sie führen zuerst sudo update-dlocatedb aus. Der Befehl wird automatisch täglich in /etc/cron.daily/dlocate ausgeführt jarno vor 8 Jahren 2
4
pete_m

Ich habe Wajig gefunden ...

wajig whichpackage /path/to/file 

z.B.

wajig whichpackage /etc/apt/sources.list 

Wajig ist ein praktisches Befehlszeilen- oder Konsolentool, das all die apt-get, dpkg-Güte umschließt, die Sie nie lernen wollten. .

Um Wajig zu installieren, verwenden Sie:

apt-get install wajig 

Der Befehl "whichpackage" selbst hängt von apt-file ab

Sie müssen immer noch die Datenbank aktualisieren, bevor Sie sie verwenden können: - Ich weiß noch nicht, ob wajig update whixh ein apt-get-Update ausführt, und auch den Dateicache aktualisiert.

sudo wajig update  sudo apt-file update 

(und Super Cow, Easter egss?!)

2
kiri

Ähnlich wie bei jamuraas Antwort auf Debian können Sie auch http://packages.ubuntu.com/ für Ubuntu besuchen . Sie müssen ein wenig nach unten scrollen, um das Suchfeld " Paketinhalt suchen " zu finden, in das Sie den Pfad einer Datei eingeben können.

Wenn jetzt nur Raspbian einen gehabt hätte :) XTL vor 9 Jahren 0
0
Ravi Agarwal

Suchen Sie nach Dateien mit http://www.kodkast.com/applications/find-which-package-file-belongs-to

Dies ist eine Anwendung zum Suchen nach Dateien, die in verschiedenen rpms / linux-Paketen enthalten sind, und ist sehr nützlich, wenn Sie nicht einmal das RPM auf Ihrem Computer installiert haben.

Downvote: Der Link ist defekt und der Link scheint an erster Stelle für RPM-Pakete zu sein. tripleee vor 6 Jahren 0
0
erwing

Das Paket Befehl nicht gefunden gibt Ihnen Hinweise zu möglichen Befehlen und den Namen des Debian-Pakets. Es funktioniert, indem Sie den Befehl in die Bash-Shell eingeben und sich die Ausgabe ansehen.

Zum Beispiel, wenn der Befehlsname bekannt ist:

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 

und wenn der Befehl nicht bekannt ist, werden einige Vermutungen angewendet:

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 
Dies funktioniert jedoch nicht für beliebige Dateien, wie das angeforderte OP. a CVn vor 9 Jahren 0
Dies ist ein problematischer Tipp, wenn das Programm schädliche Dinge ausführt und IS installiert. Das Hinzufügen von "-h" oder "--help" am Ende würde ein wenig helfen. Wenn Sie am Ende "-h" hinzufügen würden, wäre dies sicher genug. Ich würde jedoch empfehlen, aber es ist kein guter Weg, um das zu erreichen, was das OP verlangt. Dr Beco vor 8 Jahren 0