Ich möchte wissen, welche Befehle mir ein bestimmtes Debian-Paket bietet.
Nehmen wir zum Beispiel an, ich habe ein Paket namens installiert x.deb
. Dieses Paket enthält sicherlich einige Befehle, die ich verwenden kann.
So listen Sie diese Befehle auf.
Ich weiß, dass ich den compgen
Befehl bash verwenden kann, um eine Liste aller verfügbaren Befehle in meinem System zu generieren, aber ich brauche nur ein bestimmtes Paket.
Ich habe die Lösungen ausprobiert:
dpkg -L postgresql-9.3 | egrep '(bin|games)/'
/usr/lib/postgresql/9.3/bin/pg_upgrade
/usr/lib/postgresql/9.3/bin/pg_ctl
/usr/lib/postgresql/9.3/bin/pg_resetxlog
/usr/lib/postgresql/9.3/bin/postgres
/usr/lib/postgresql/9.3/bin/pg_xlogdump
/usr/lib/postgresql/9.3/bin/initdb
/usr/lib/postgresql/9.3/bin/pg_controldata
/usr/lib/postgresql/9.3/bin/postmaster
Ich habe den Befehl ausprobiert postgres
user@userPc:~$ postgres
No command 'postgres' found, did you mean:
Command 'postgrey' from package 'postgrey' (universe)
postgres: command not found
quelle
apache2
kann ein schlechtes Beispiel sein, da dieses Paket ein Metapaket ist, das normalerweise nicht einmal auf Systemen installiert ist, auf denen Apache ausgeführt wird. Der Befehl funktioniert - versuchen Siecoreutils
:dpkg -L coreutils | egrep '(bin|games)/'
grep -Ew 'bin|sbin|games'
stattdessen verwenden möchten , egrep ist veraltet und Sie können auch nach sbin suchen. Es gibt auch keinen Grund,for
hier einewhile
Schleife zu verwenden. Wenn Sie stattdessen eine Schleife verwenden, wie ich es in meiner Antwort getan habe, müssen Sie sich keine Gedanken über IFS und Wortaufteilung machen.man grep
:Direct invocation as either egrep or fgrep is deprecated, but is provided to allow historical applications that rely on them to run unmodified.
Außerdem stimmt Ihr regulärer Ausdruck mit jedem Verzeichnis überein , das entweder enthältgames
oderbin
enthält/usr/share/games/
, und auchfoosbinaff
und was auch immer.1. Verwenden Sie ein für den Job entwickeltes Werkzeug.
Der einfachste und wahrscheinlich robusteste Weg ist die Installation
dlocate
:Sie können dann laufen
Wie erklärt in
man dlocate
:2. Analysieren Sie die Paketdatenbank
Dies ist ein ähnlicher Ansatz wie bei @ Winny, jedoch vereinfacht
Wenn Sie nicht
apt-file
installiert haben, können Sie es mit den folgenden Befehlen installieren und einrichten:Der obige Befehl wird verwendet,
apt-file
um den Inhalt eines Pakets aufzulisten und dann die Tests von bash-f
(ist dies eine Datei?) Und-x
(ist sie ausführbar?) Aufzulisten und den Namen der Datei zu drucken, wenn beide Tests bestanden wurden.Beachten Sie, dass Sie mit dem folgenden Befehl die meisten ausführbaren Dateien erhalten:
Es wird nicht alles gefunden, da Sie auch ausführbare Dateien an Orten wie
/opt
oder sogar erhalten/lib
(udev
z. B. verschiedene Tools). Während die Verwendung von-w
, um ganze Wörter abzugleichen, Ihre Chancen erhöht, die Dateien korrekt zu identifizieren, ist das Parsen des Pfads kein guter Ansatz, und Sie sollten stattdessen eine der oben genannten Methoden verwenden.quelle
/opt
oder/lib
sollen nicht von Benutzern aufgerufen werden, daher sollten Sie sie nicht auflisten. `apt-file -F list $ package | grep -E '^ (/ usr) / (s? bin | games) /' gibt Ihnen die Liste mit einer Ausnahme: Alternativen ./lib/udev/findkeyboards
kann beispielsweise beim Schreiben von udev-Tastaturregeln sehr nützlich sein ./lib/udev/rule_generator.functions
kann auch nützlich sein. Wenn Sie anfangen, alles Nützliche aufzulisten, müssen Sie nicht nur ausführbare Dateien auflisten, sondern jede Art von Codebibliothek.Wenn Sie
dlocate
installiert haben, gibt es eine einfache Möglichkeit , alle Befehle in einem installierten Paket aufzulisten:Nur mit
dpkg
können Sie die Dateien in den Standard-PATH-Verzeichnissen auflisten (es sind fast alle ausführbaren Programme, mit sehr wenigen Ausnahmen):Die Ausnahmen sind ein paar Verzeichnisse - ab Debian Wheezy nur zwei:
/usr/bin/mh
und/usr/bin/nu-mh
.Wenn das Paket nicht installiert ist, ersetzen Sie es
dpkg -L
durchapt-file -F list
:Es gibt zwar ausführbare Dateien in anderen Verzeichnissen, diese sollen jedoch nicht direkt ausgeführt werden, weshalb sie hier irrelevant sind.
Diese Methoden vermissen alle eine Reihe von Programmen: diejenigen, die über den alternativen Mechanismus bereitgestellt werden . Zum Beispiel nur für das
ftp
Paketnetkit-ftp
undpftp
werden bereitgestellt, aber dieses Paket stellt tatsächlich denftp
Befehl bereit , da/usr/bin/ftp
es sich um eine symbolische Verknüpfung handelt, zu/etc/alternatives/ftp
derftp
möglicherweise eine symbolische Verknüpfung zu einer der Implementierungen auf dem System besteht/usr/bin/netkit-ftp
. Der folgende Befehl (der kein Beispiel für eine gute Programmierung ist, sondern nur ein großer Einzeiler) listet die Befehle auf, die von einem Paket über den derzeit konfigurierten Alternativmechanismus bereitgestellt werden.Wenn Sie die Befehle auflisten möchten, die über eine Alternative bereitgestellt werden könnten, die derzeit so konfiguriert ist, dass sie auf ein anderes Paket verweist, müssen Sie die Dateien analysieren
/var/lib/dpkg/alternatives
.Symbolische Links und Konfigurationsdateien, die die alternativen Mechanismen implementieren, werden nicht in Paketen registriert, sondern automatisch in Paketen registriert. Dies
postinst
macht es schwierig (und technisch unmöglich, wenn das Installationsskript eines Pakets nicht den Konventionen entspricht), die von einem deinstallierten Paket bereitgestellten Alternativen abzufragen .quelle
dpkg -L
Sicherheit kein Ergebnis. Bitte versuchen Sie es mit dem apt-file Tool (Sie müssen es installieren).quelle
Verwenden Sie den folgenden Befehl und ersetzen Sie systemd durch Ihren Zielpaketnamen. Dieser Befehl listet alle verfügbaren Befehle mit ihrem jeweils einzeiligen Intro auf
quelle