Einfache Frage: Gibt es einen Shell-Befehl (oder eine GUI-Methode), die ich verwenden kann, wenn der Pfad zu einer Datei auf meinem System angegeben ist und mir sagt, welches Paket sie dort abgelegt hat? Vorausgesetzt, die Datei stammt tatsächlich aus einem Paket.
Bonusfrage: Was ist, wenn es sich um eine Datei handelt, die nicht auf meinem System installiert ist? Gibt es beispielsweise eine Website, auf der ich eine Datei nachschlagen und sehen kann, welche Pakete sie gegebenenfalls bereitstellen?
package-management
David Z
quelle
quelle
Provides:
Mechanismus ab. Genauer gesagt, ein Befehl wiemailx
odersendmail
ist in keinem Paket als Binärdatei enthalten. Stattdessen installieren verschiedene Pakete ihre eigenen Binärdateien und stellen einige von ihnen unter einem "kanonischen" Namen über zur Verfügung/etc/alternatives
. Siehe auch askubuntu.com/questions/366135/…Antworten:
Mit dem
dpkg
Befehl können Sie herausfinden, welches installierte Paket eine Datei besitzt:Von
man dpkg
:Beispiel:
Sie können entweder mit einem vollständigen Pfad oder nur mit dem Dateinamen suchen.
Wenn Sie nach Dateien suchen möchten, die noch nicht auf Ihrem Computer installiert sind, können Sie die Ubuntu-Paketsuche verwenden
quelle
which
, um das Programm zu finden:dpkg -S `which firefox`
dlocate
den Job jedoch möglicherweise nicht, wenn die Datenbank von dlocate nicht mehr aktuell ist. Sie müssen anrufensudo update-dlocatedb
, um es zu aktualisieren.dpkg
der genaue Pfad nichts zurückgibt (z. B.dpkg /usr/bin/java
), versuchen Sie nur den Namen der ausführbaren Datei (zdpkg java
. B. ).realpath
, wie dies Symlinks zu beheben:dpkg -S $(realpath $(which <command>))
.Der
apt-file
Befehl kann dies für Sie über die Befehlszeile ausführen. Ich benutze es häufig, wenn ich Pakete aus dem Quellcode baue. Für Dateien, die von Paketen bereitgestellt werden, die bereits auf Ihrem System installiert sind,apt-cache
ist eine andere Wahl.Gehen Sie zur Installation wie
apt-file
folgt vor:Dann müssen Sie die Datenbank aktualisieren:
Und schließlich durchsuchen Sie die Datei:
Ein viel benutzerfreundlicherer Weg ist jedoch die Verwendung der Ubuntu Packages Search- Website. Sie haben die Möglichkeit, den Inhalt von Paketen nach einem bestimmten Dateinamen zu durchsuchen.
quelle
apt-file
findet oft falsch positive, dh Pakete, die nicht installiert sind. Natürlich ist diese Antwort für die "Bonusfrage" großartig.apt-file search <>
ist das nächste Analogon zudnf/yum whatprovides <>
.apt-file find
wieapt-find
schon vor langer Zeit und es ist wirklich praktisch! Übrigens benötigen die neuesten Versionen root fürapt-file update
.Es gibt auch apt-file zum Nachschlagen von Dateien in Paketen, die nicht installiert sind. Zum Beispiel:
quelle
Sie können den Inhalt von Paketen, die in den verschiedenen Ubuntu-Versionen enthalten sind, auf der Ubuntu Packages- Website suchen . Suchen Sie unter der Überschrift " Suchen Sie den Inhalt von Paketen ".
Hier sind zum Beispiel die Suchergebnisse für libnss3.so in lucid (10.04):
http://packages.ubuntu.com/search?searchon=contents&keywords=libnss3.so&mode=exactfilename&suite=lucid&arch=any
quelle
Sie meinen, welches Paket und nicht welche Anwendung. Die Anwendung ist Ihr Paketmanager, z
Software Center
.Verwenden von
dpkg
:Beispiel
Verwenden von
apt-file
:oder auch möglich:
Beispiel
Oder online hier im Bereich
Search the contents of packages
.Beispiel
quelle
Dies ist eine Erweiterung der hervorragenden Antwort von Alexx Roche . Ich habe versucht, diese Antwort zu bearbeiten, sie wurde jedoch abgelehnt (allerdings nicht von Alexx).
Ich habe versucht herauszufinden, was
which
auf meinem System installiert ist. Nach ein wenig Arbeit habe ich erstellt/usr/local/bin/apt-whatprovides
Für die meisten installierten DINGE können Sie jedoch nur Folgendes verwenden:
Für DINGE, die nicht installiert sind, können Sie Folgendes verwenden:
Das
apt-whatprovides
Skript funktioniert für Dateien, die sich auf Ihrem System befinden und nicht. Zum Beispiel, mein System hat gefehlt,dig
aberping
so war es, was daraus resultierte:Beachten Sie, dass dies
Searching for
ein vollständiger Pfad fürping
(installiert) und nur der Binärname fürdig
nicht installiert ist. Dies hat mir geholfen herauszufinden, dass ich installieren musste,dnsutils
ohne https://packages.ubuntu.com/#search_contents durchsuchen zu müssenquelle
Ich habe versucht herauszufinden, was
which
auf meinem System installiert ist. Nach ein wenig Arbeit habe ich apt-whatprovides erstelltObwohl für die meisten Dinge, die Sie nur verwenden können
quelle
Möglicherweise müssen Sie dies tun, wenn Sie Software kompilieren, für die bereits ein Ubuntu-Paket vorhanden ist, das Sie ausführen können
apt-get build-dep $PACKAGENAME
. Damit werden alle Pakete installiert, die Sie kompilieren müssen$PACKAGENAME
.quelle