Wie finde ich heraus, aus welchem Debian-Paket eine Datei stammt?
Wie finde ich heraus, aus welchem Debian-Paket eine Datei stammt?
Antworten:
In Debian gibt es mehrere Dienstprogramme, die diese Aufgabe ausführen. Auf dieser Seite finden Sie eine Beschreibung. Ich werde zwei davon erwähnen, apt-fileund dlocate.
apt-fileDurchsucht den internen Cache, sodass Sie nicht alle zu durchsuchenden Pakete installieren können. Nachstehend finden Sie eine ausführlichere Anleitung.
dlocateist eine schnelle Alternative zu dpkg -L(dem Befehl, der den Paketinhalt auflistet) und durchsucht daher nur installierte Pakete. Die Suche wird durchgeführt von dlocate -S file.name.
Sie können auch Pakete online mit Such packages.debian.org Server (der Suche den Inhalt der Pakete Abschnitt).
apt-fileEs ist eine gute Idee, zuerst zu aktualisieren:
sudo apt-get update
Sehen Sie, wofür apt-fileist:
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 sudodem Cache wird systemweit gearbeitet):
sudo apt-file update
Suche durchführen. In diesem Beispiel möchten wir wissen, in welchem Paket sich die xrandrausführbare Datei befindet:
apt-file search xrandr
Es listet viele Pakete mit unxrandr, lxrandr.mooder source_lxrandr.py. In unserem Fall nicht sehr nützlich. Klügere Suche:
apt-file search -x /xrandr$
( $bezeichnet 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.
user@host:~$ dpkg-query -S /bin/bash
bash: /bin/bash
Wobei bash der Paketname ist.
dpkg-query -SUND es sendet Sie auf dem falschen Weg der Installation von optionalen Paketen ..
Eine andere Alternative:
$ dpkg -S /bin/bash
bash: /bin/bash
Zumindest auf meinem Ubuntu scheinen beide im dpkgPaket zu sein, also kein wirklicher Vorteil für einen bestimmten ...
Von der Installation generierte Dateien werden von nicht gefunden dpkg -S, wie unter https://askubuntu.com/a/667227/52975 angegeben
Wird beispielsweise /bin/ncangezeigt, wenn Sie das Paket installieren netcat-openbsd.
Aber auf:
dpkg -S /bin/nc
wir bekommen dpkg-query: no path found matching pattern /bin/nc.
Dies /bin/ncliegt daran, dass der update-alternativesAufruf im postinst-Skript generiert wird, das nach der Installation ausgeführt wird.
Das funktioniert so, weil /bin/ncdas netcat-traditionalPaket eine andere Version von bereitstellt.
Ich glaube nicht, dass es einen allgemeinen Weg gibt, solche generierten Dateien zu finden. Im speziellen Fall alternativer Symlinks können wir dem Link einfach folgen mit readlink -f:
dpkg -S "$(readlink -f /bin/nc)"
Da ich mit Debian nicht vertraut war, war ich verblüfft, als ich dies versuchte:
kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/vncviewer
dpkg-query: no path found matching pattern /usr/bin/vncviewer
kearnsp@xubuntuvb:~$
Ein bisschen Nachforschung und ich fand das Paket:
kearnsp@xubuntuvb:~$ ls -l /usr/bin/vncviewer
lrwxrwxrwx 1 root root 27 May 28 15:49 /usr/bin/vncviewer -> /etc/alternatives/vncviewer
kearnsp@xubuntuvb:~$ ls -l /etc/alternatives/vncviewer
lrwxrwxrwx 1 root root 20 May 28 15:49 /etc/alternatives/vncviewer -> /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/xvnc4viewer
xvnc4viewer: /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$