Wenn Sie etwas Erfahrung mit Linux haben, wissen Sie wahrscheinlich, dass Sie einen Befehl oder ein Dienstprogramm nicht einfach zwischen Systemen teilen können. Der Grund dafür, dass Sie eine ausführbare Datei nicht einfach von einem System auf ein anderes kopieren können, liegt an Abhängigkeiten wie Bibliotheken und anderen unterstützenden Paketen. Einige Dienstprogramme können es sicherlich kopiert werden, aber das ist nicht überall so. Falls Sie vergessen haben, welches Paket Sie installiert haben, das nslookup enthält Befehl, zum Beispiel, brauchen Sie einen Weg, ihn zu finden.
Sobald Sie das Paket gefunden haben, zu dem ein Befehl gehört, möchten Sie möglicherweise herausfinden, aus welchem Repository Sie das Paket installiert haben. Die grundlegenden Repositories von AppStream , BaseOS und Extras enthalten viel, aber sicherlich nicht alle der Pakete, die Sie möglicherweise benötigen oder denen Sie begegnen. In diesem Artikel untersuche ich einige Methoden zum Abfragen des Systems, um verwandte Repositories, Pakete und Befehle zu finden.
- Pakete enthalten Befehle, Dienstprogramme und Bibliotheken
- Pakete haben Abhängigkeiten
- Repositories enthalten, speichern und stellen Pakete bereit
Klassifizierung des Dateityps
Ist das Dienstprogramm, das Sie verwenden, ein Skript, einfacher Text oder ein Befehl? Ist es kompiliert? Wo ist die Datei? Möglicherweise möchten Sie einige grundlegende Informationen über das Dienstprogramm. Der which Der Befehl findet eine Datei, wenn sie sich in Ihrem Pfad befindet. Sie müssen eine Datei lokalisieren, bevor Sie sie weiter identifizieren können.
$ which mtr
/usr/sbin/mtr
Um Informationen zum Dateityp anzuzeigen, muss die Datei file Befehl ist unverzichtbar.
$ file mtr
mtr: cannot open `mtr' (No such file or directory)
$ file /usr/sbin/mtr
/usr/sbin/mtr: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=d34479cefafe7299b65d8375769c63978c6c453f, stripped, too many notes (256)
Der erste Versuch ist fehlgeschlagen, weil die Datei file Der Befehl kennt den Speicherort von mtr nicht Befehl. Nachdem der vollständige Pfad zu file gegeben wurde , die Informationen werden angezeigt.
Hier ist ein Beispiel für eine nicht kompilierte ausführbare Datei.
$ file /usr/sbin/ifcfg
/usr/sbin/ifcfg: POSIX shell script, ASCII text executable
Wie Sie sehen können, ist die file Befehl ist wichtig zu kennen und Sie werden ihn sicher während Ihrer gesamten Karriere anwenden.
[ Den Lesern gefiel auch:Linux-Paketverwaltung mit YUM und RPM ]
Das Paket finden
Die nslookup Befehl ist einer, den Sie häufig verwenden, aber er ist auf keinem der Systeme an Ihrem neuen Arbeitsplatz installiert. Sie möchten es installieren, können sich aber nicht erinnern, welches Paket es enthält, und versuchen, es als nslookup zu installieren schlägt fehl.
# dnf -y install nslookup
Last metadata expiration check: 2:44:51 ago on Tue 10 Nov 2020 03:27:27 PM CST.
No match for argument: nslookup
Error: Unable to find a match: nslookup
Um das Paket zu finden, das nslookup enthält , können Sie mit rpm eine "umgekehrte" Suche durchführen Befehl.
# rpm -qf nslookup
error: file /root/nslookup: No such file or directory
Was ist hier falsch? Die rpm Befehl kann nslookup nicht finden aber es ist installiert, weil Sie es verwendet haben. Warten. Sehen Sie sich den Pfad an:/root/nslookup . Es gibt kein nslookup Befehl in Ihrem aktuellen Verzeichnis (das Home-Verzeichnis von root). Suchen Sie nslookup mit dem which Befehl und geben Sie dann rpm aus Befehl.
# which nslookup
/usr/bin/nslookup
# rpm -qf /usr/bin/nslookup
bind-utils-9.11.13-6.el8_2.1.x86_64
Sie sehen dieses nslookup ist Teil der bind-utils Paket. Jetzt können Sie es auf Ihre anderen Systeme kopieren und wie gewohnt verwenden.
# nslookup google.com
/opt/nslookup: error while loading shared libraries: libdns.so.1107: cannot open shared object file: No such file or directory
Der Fehler sagt Ihnen, dass die nslookup Der Befehl weist Abhängigkeiten auf, die auf dem neuen System, auf das Sie ihn kopiert haben, nicht erfüllt wurden. Die Lösung besteht darin, es mithilfe von DNF/YUM einzeln auf jedem System zu installieren.
Paketabhängigkeiten aufdecken
nslookup gefällt Ihnen wirklich gut Befehl, und Sie möchten, dass er auf all Ihren Systemen verfügbar ist. Sie stellen nach einem gescheiterten Versuch fest, dass Sie es nicht einfach auf ein anderes System kopieren und erwarten können, dass es funktioniert. Nach langer Recherche stellen Sie fest, dass die Datei nslookup Der Befehl hat mehrere Abhängigkeiten, die erfüllt sein müssen. Was sind diese Abhängigkeiten?
# dnf deplist nslookup
Last metadata expiration check: 3:00:24 ago on Tue 10 Nov 2020 03:27:27 PM CST.
Bedeutet dies, dass es keine Abhängigkeiten für nslookup gibt ? Nein. Es bedeutet, dass Sie versucht haben, Abhängigkeiten für einen Befehl und nicht für ein Paket zu finden.
# dnf deplist bind-utils
Last metadata expiration check: 0:00:14 ago on Tue 10 Nov 2020 06:29:37 PM CST.
package: bind-utils-32:9.11.13-6.el8_2.1.x86_64
dependency: /usr/libexec/platform-python
provider: platform-python-3.6.8-23.el8.i686
provider: platform-python-3.6.8-23.el8.x86_64
dependency: bind-libs(x86-64) = 32:9.11.13-6.el8_2.1
provider: bind-libs-32:9.11.13-6.el8_2.1.x86_64
*** longer list of dependencies ***
dependency: rtld(GNU_HASH)
provider: glibc-2.28-101.el8.i686
provider: glibc-2.28-101.el8.x86_64
Denken Sie daran, dass Pakete Abhängigkeiten haben. Das Auflisten von Abhängigkeiten kann hilfreich sein, wenn Sie sie manuell erfüllen möchten oder wenn Sie der Meinung sind, dass neue Abhängigkeiten mit bereits auf Ihrem System installierten Paketen und Abhängigkeiten interferieren oder mit diesen inkompatibel sein könnten.
Das Repository identifizieren
Sie haben gesehen, wie ein anderer Systemadministrator das Hardware-Informationstool (hwinfo )-Befehl auf ihrem System. Sie versuchen den Befehl auf Ihrem System, erhalten aber die Fehlermeldung „Befehl nicht gefunden“. Sie versuchen dann, es zu installieren.
# dnf -y install hwinfo
Last metadata expiration check: 0:09:34 ago on Tue 10 Nov 2020 06:42:15 PM CST.
No match for argument: hwinfo
Error: Unable to find a match: hwinfo
Sie bitten Ihre Kollegin, Ihnen zu sagen, woher sie die hwinfo hat Paket. Sie führt die folgende Abfrage durch, um die Quelle zu finden.
# dnf list hwinfo
Last metadata expiration check: 0:11:17 ago on Tue 10 Nov 2020 06:42:15 PM CST.
Installed Packages
hwinfo.x86_64 21.47-9.el8 @epel
Sie stellen fest, dass die Quelle ein als epel identifiziertes Repository zu sein scheint . Du bittest sie weiter, dir zu sagen, wie man das epel einrichtet Repository. Sie erinnert sich an dieses epel ist eigentlich ein installierbares RPM-Paket, erinnert sich aber nicht an seinen vollständigen Namen. Sie führt die folgende Abfrage durch, um es zu identifizieren.
# rpm -qa |grep epel
epel-release-8-8.el8.noarch
Jetzt können Sie das epel-release installieren Paket und installieren Sie dann hwinfo Paket.
Hinweis:Die epel-release repository ist die Extra Packages for Enterprise Linux-Repository-Konfiguration und ist das erste, was ich auf jedem neuen System installiere, auf das ich stoße, auf dem es nicht vorhanden ist.
[ Kostenloser Download:Spickzettel für fortgeschrittene Linux-Befehle. ]
Abschluss
Linux bietet seinen Administratoren viele nützliche Dienstprogramme und Befehle, um Informationen über das System und seine Komponenten zu finden. Sie müssen diese Befehle und Dienstprogramme zu Ihrer Sysadmin-Toolbox hinzufügen. Wie Sie diesem Artikel entnehmen können, müssen Sie nicht alle obskuren Optionen eines Befehls kennen, um das zu bekommen, was Sie brauchen. Verwenden Sie man Seiten für diese.