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-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 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-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
dem Cache wird systemweit gearbeitet):
sudo apt-file update
Suche durchführen. In diesem Beispiel möchten wir wissen, in welchem Paket sich die xrandr
ausführbare Datei befindet:
apt-file search xrandr
Es listet viele Pakete mit unxrandr
, lxrandr.mo
oder 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 -S
UND 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 dpkg
Paket 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/nc
angezeigt, 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/nc
liegt daran, dass der update-alternatives
Aufruf im postinst-Skript generiert wird, das nach der Installation ausgeführt wird.
Das funktioniert so, weil /bin/nc
das netcat-traditional
Paket 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:~$