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.