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).
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.
[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 ...
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]:~$