web-dev-qa-db-de.com

Wie finde ich heraus, welches Paket eine Datei besitzt?

Wie finde ich heraus, aus welchem ​​Debian-Paket eine Datei stammt?

In Debian gibt es mehrere Dienstprogramme, die diese Aufgabe ausführen. Überprüfen Sie diese Seite für eine Beschreibung. Ich werde zwei davon erwähnen, apt-file und dlocate.

apt-file durchsucht den internen Cache, sodass Sie nicht alle zu durchsuchenden Pakete installieren können. Nachstehend finden Sie eine ausführlichere Anleitung.

dlocate ist eine schnelle Alternative zu dpkg -L (dem Befehl, der den Paketinhalt auflistet) und durchsucht daher nur installierte Pakete. Die Suche wird mit dlocate -S file.name durchgeführt.

Sie können auch online nach Paketen suchen, indem Sie packages.debian.org server (the Inhalt von Paketen durchsuchen Sektion).


Installieren und Verwenden von apt-file

Es ist eine gute Idee, zuerst zu aktualisieren:

Sudo apt-get update

Sehen Sie, wofür apt-file ist:

apt-cache show apt-file

Es installieren:

Sudo apt-get install apt-file

Daten aus Repositorys lesen (dies funktioniert auch ohne Sudo, erstellt dann aber den Cache des Benutzers; mit Sudo ist der Cache systemweit):

Sudo apt-file update

Suche durchführen. In diesem Beispiel möchten wir wissen, in welchem ​​Paket xrandr executable ist:

apt-file search xrandr

Es werden viele Pakete mit unxrandr, lxrandr.mo oder source_lxrandr.py aufgelistet. In unserem Fall nicht sehr nützlich. Klügere Suche:

apt-file search -x /xrandr$

($ kennzeichnet das Zeilenende). Beispielausgabe:

bash-completion: /usr/share/bash-completion/completions/xrandr
x11-xserver-utils: /usr/bin/xrandr

Das erste Ergebnis sieht nicht nach ausführbar aus, das zweite nach ausführbar. Wir können weiter untersuchen. Lauf:

apt-cache show x11-xserver-utils

Bingo! Das ist das Paket.

42
whitequark
[email protected]:~$ dpkg-query -S /bin/bash 
bash: /bin/bash

Wobei bash der Paketname ist.

Eine andere Alternative:

$ dpkg -S /bin/bash
bash: /bin/bash

Zumindest auf meinem Ubuntu scheinen beide im dpkg-Paket zu sein, also kein wirklicher Vorteil für einen bestimmten ...

39

Von der Installation erzeugte Dateien werden von dpkg -S nicht gefunden, wie unter https://askubuntu.com/a/667227/52975

Beispielsweise wird /bin/nc angezeigt, wenn Sie das Paket netcat-openbsd installieren.

Aber auf:

dpkg -S /bin/nc

wir bekommen dpkg-query: no path found matching pattern /bin/nc.

Dies geschieht, weil /bin/nc durch den update-alternatives-Aufruf im Postinst-Skript generiert wird, das nach der Installation ausgeführt wird.

Das funktioniert so, weil das /bin/nc-Paket eine andere Version von netcat-traditional bereitstellt.

Ich glaube nicht, dass es einen allgemeinen Weg gibt, solche erzeugten Dateien zu finden. Im speziellen Fall alternativer Symlinks können wir einfach dem Link mit readlink -f folgen:

dpkg -S "$(readlink -f /bin/nc)"

Da ich mit Debian nicht vertraut war, war ich verblüfft, als ich dies versuchte:

[email protected]:~$ dpkg -S /usr/bin/vncviewer
dpkg-query: no path found matching pattern /usr/bin/vncviewer
[email protected]:~$ 

Ein bisschen Nachforschung und ich fand das Paket:

[email protected]:~$ ls -l /usr/bin/vncviewer
lrwxrwxrwx 1 root root 27 May 28 15:49 /usr/bin/vncviewer -> /etc/alternatives/vncviewer
[email protected]:~$ ls -l /etc/alternatives/vncviewer
lrwxrwxrwx 1 root root 20 May 28 15:49 /etc/alternatives/vncviewer -> /usr/bin/xvnc4viewer
[email protected]:~$ dpkg -S /usr/bin/xvnc4viewer
xvnc4viewer: /usr/bin/xvnc4viewer
[email protected]:~$ 
2
Philip Kearns