103.1 Lektion 1
Zertifikat: |
LPIC-1 |
---|---|
Version: |
5.0 |
Thema: |
103 GNU- und Unix-Befehle |
Lernziel: |
103.1 Auf der Befehlszeile arbeiten |
Lektion: |
1 von 2 |
Einführung
Neulinge in der Welt der Linux-Administration und der Bash-Shell fühlen sich ohne den beruhigenden Komfort einer GUI-Oberfläche oft etwas verloren. Sie sind es gewohnt, mit einem Rechtsklick auf die visuellen Hinweise und Kontextinformationen zuzugreifen, die grafische Dateimanager zur Verfügung stellen. Daher ist es wichtig, den relativ kleinen Satz von Kommandozeilenwerkzeugen schnell zu erlernen und zu beherrschen, durch die Sie sofort auf alle Daten zugreifen können, welche eine GUI bietet - und mehr.
Einholen von Systeminformationen
Während Sie auf das blinkende Rechteck eines Kommandozeilen-Prompts starren, wird Ihre erste Frage wahrscheinlich lauten: “Wo bin ich?” oder, genauer gesagt, “Wo im Linuxdateisystem befinde ich mich gerade und, wenn ich eine neue Datei erstellen würde, wo würde diese angelegt?” Was Sie hier suchen, ist Ihr aktuelles Arbeitsverzeichnis, und der Befehl pwd
wird uns sagen, was wir wissen wollen:
$ pwd /home/frank
Angenommen, Frank ist derzeit im System angemeldet und befindet sich derzeit in seinem Homeverzeichnis: /home/frank/
. Sollte Frank mit dem Befehl touch
eine leere Datei erstellen, ohne einen anderen Ort im Dateisystem anzugeben, wird die Datei innerhalb von /home/frank/
erstellt. Eine Auflistung des Verzeichnisinhalts mit ls
zeigt uns diese neue Datei:
$ touch newfile $ ls newfile
Neben Ihrem Standort im Dateisystem werden Sie oft auch Informationen über das verwendete Linux-System benötigen. Dies kann die genaue Versionsnummer Ihrer Distribution oder die aktuell geladene Version des Linux-Kernels umfassen. Das Werkzeug uname
ist das, wonach Sie hier suchen. Und insbesondere uname
unter Verwendung der Option -a
(“alles”).
$ uname -a Linux base 4.18.0-18-generic #19~18.04.1-Ubuntu SMP Fri Apr 5 10:22:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Hier zeigt uname
, dass auf Franks Maschine der Linux-Kernel in Version 4.18.0 installiert ist und Ubuntu 18.04 auf einer 64-Bit (x86_64
) CPU läuft.
Einholen von Befehlsinformationen
Sie werden oft auf Dokumentationen stoßen, in denen von Linuxbefehlen die Rede ist, mit denen Sie noch nicht vertraut sind. Die Kommandozeile selbst bietet alle möglichen hilfreichen Informationen darüber, was Befehle bewirken und wie man sie effektiv einsetzen kann. Die vielleicht nützlichsten Informationen sind in den vielen Dateien des man
-Systems zu finden.
In der Regel schreiben Linuxentwickler man
-Dateien und verteilen diese zusammen mit den dazugehörigen Dienstprogrammen. man
-Dateien sind stark strukturierte Dokumente, deren Inhalt intuitiv durch Sektionsüberschriften unterteilt ist. Wenn Sie man
gefolgt von dem Namen eines Befehls eingeben, erhalten Sie Informationen, wie den Befehlsnamen, eine kurze Zusammenfassung der Benutzung, eine detailliertere Beschreibung und einige wichtige historische und lizenzrechtliche Hintergründe. Folgend ein Beispiel:
$ man uname UNAME(1) User Commands UNAME(1) NAME uname - print system information SYNOPSIS uname [OPTION]... DESCRIPTION Print certain system information. With no OPTION, same as -s. -a, --all print all information, in the following order, except omit -p and -i if unknown: -s, --kernel-name print the kernel name -n, --nodename print the network node hostname -r, --kernel-release print the kernel release -v, --kernel-version print the kernel version -m, --machine print the machine hardware name -p, --processor print the processor type (non-portable) -i, --hardware-platform print the hardware platform (non-portable) -o, --operating-system print the operating system --help display this help and exit --version output version information and exit AUTHOR Written by David MacKenzie. REPORTING BUGS GNU coreutils online help: <http://www.gnu.org/software/coreutils/> Report uname translation bugs to <http://translationproject.org/team/> COPYRIGHT Copyright©2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. SEE ALSO arch(1), uname(2) Full documentation at: <http://www.gnu.org/software/coreutils/uname> or available locally via: info '(coreutils) uname invocation' GNU coreutils 8.28 January 2018 UNAME(1)
man
funktioniert nur, wenn Sie einen exakten Befehlsnamen übergeben. Wenn Sie sich jedoch über den Namen des gewünschten Befehls nicht sicher sind, können Sie den Befehl apropos
verwenden, um die Namen und Beschreibungen der man
-Seiten zu durchsuchen. Angenommen, Sie können sich nicht daran erinnern, dass uname
der Befehl ist, welcher die aktuelle Linux-Kernelversion liefert, dann können Sie das Wort kernel
als Parameter an apropros
übergeben. Die resultierende Ausgabe wird wahrscheinlich deutlich umfangreicher sein, aber neben anderen Zeilen wird diese das Folgende enthalten:
$ apropos kernel systemd-udevd-kernel.socket (8) - Device event managing daemon uname (2) - get name and information about current kernel urandom (4) - kernel random number source devices
Wenn Sie nicht die vollständige Dokumentation eines Befehls benötigen, können Sie mit type
schnell grundlegende Informationen über einen Befehl erhalten. Das folgende Beispiel verwendet type
, um vier verschiedene Befehle gleichzeitig abzufragen. Die Ergebnisse zeigen uns, dass cp
(“copy”) ein Programm ist, das in /bin/cp
abgelegt ist, und dass kill
(den Zustand eines laufenden Prozesses ändernd) eine eingebaute Funktion darstellt - was bedeutet, dass es ein Teil der Bash-Shell selbst ist:
$ type uname cp kill which uname is hashed (/bin/uname) cp is /bin/cp kill is a shell builtin which is /usr/bin/which
Beachten Sie, dass uname
nicht nur ein regulärer Binärbefehl wie cp
ist, sondern gehasht ist. Das liegt daran, dass Frank vor Kurzem uname
benutzt hat. Um die Effizienz des Systems zu erhöhen, wurde dieser Pfad zu einer Hashtabelle hinzugefügt, damit dieser beim nächsten Aufruf leichter zugänglich ist. Nach einem Systemstart würde Frank in der Ausgabe von type uname
feststellen, dass uname
wieder als reguläres Binärprogramm aufgeführt wird.
Note
|
Ein schnellerer Weg, die Hashtabelle zu leeren, ist der Befehl |
Manchmal - insbesondere bei der Arbeit mit automatisierten Skripten - benötigen Sie eine simplere Informationsquelle. Der Befehl which
, den der vorherige Befehl type
für uns zurückverfolgt hat, liefert nichts anderes als den absoluten Ort eines Befehls. Im folgendem Beispiel finden Sie sowohl den Befehl uname
als auch den Befehl which
.
$ which uname which /bin/uname /usr/bin/which
Note
|
Wenn Sie Informationen über “integrierte” Befehle anzeigen möchten, können Sie den Befehl |
Anzeigen der Befehlshistorie
Sie werden oft sorgfältig die richtige Verwendung für ein Kommando recherchieren und es zusammen mit einer komplizierten Reihe von Optionen und Argumenten ausführen. Aber was passiert ein paar Wochen später, wenn Sie den gleichen Befehl mit den gleichen Optionen und Argumenten erneut ausführen müssen, sich aber nicht mehr an die Details erinnern können? Anstatt Ihre Nachforschungen wieder von vorne beginnen zu lassen, werden Sie in der Lage sein, den ursprünglichen Befehl mit Hilfe der “Historie” wiederzufinden.
Wenn Sie history
eintippen, erhalten Sie die zuletzt ausgeführten Befehle zurück, wobei der zuletzt ausgeführte Befehl als letztes angezeigt wird. Sie können diese Befehle leicht durchsuchen, indem Sie dem Befehl grep
eine bestimmte Zeichenfolge per Pipeline zuweisen. In diesem Beispiel wird nach jedem Befehl gesucht, der den Text bash_history
enthält:
$ history | grep bash_history 1605 sudo find /home -name ".bash_history" | xargs grep sudo
Hier sehen Sie, wie ein einzelner Befehl zusammen mit seiner Nummerierung (1605) ausgegeben wurde.
Und wo wir gerade von bash_history
sprechen: Das ist eigentlich der Name einer versteckten Datei, welche Sie im Homeverzeichnis Ihres Benutzers finden sollten. Da es sich um eine versteckte Datei handelt (als solche gekennzeichnet durch den Punkt, der dem Dateinamen vorangestellt ist), wird sie nur sichtbar, wenn Sie den Verzeichnisinhalt mit ls
plus dem Argument -a
auflisten:
$ ls /home/frank newfile $ ls -a /home/frank . .. .bash_history .bash_logout .bashrc .profile .ssh newfile
Was steht in der Datei .bash_history
? Schauen Sie selbst: Sie werden Hunderte und Aberhunderte Ihrer zuletzt eingegebenen Befehle sehen. Möglicherweise sind Sie jedoch zu überrascht festzustellen, dass einige Ihrer letzten Befehle fehlen. Das liegt daran, dass diese Befehle zwar direkt zur dynamischen history
-Datenbank hinzugefügt werden, aber die neuesten Ergänzungen zu Ihrer Befehlshistorie erst in die .bash_history
-Datei geschrieben werden, nachdem die Sitzung beendet wurde.
Sie können den Inhalt von history
nutzen, um Ihre Kommandozeilenerfahrung mit den Auf- und Ab-Pfeiltasten Ihrer Tastatur deutlich schneller und effizienter zu gestalten. Wenn Sie die Aufwärts-Pfeiltaste mehrmals drücken, wird die Befehlszeile mit dem zuletzt erfolgreich ausgeführten Befehl ergänzt. Wenn Sie zu dem Befehl gelangen, den Sie ein zweites Mal ausführen möchten, können Sie ihn durch Drücken der Eingabetaste erneut ausführen. Auf diese Weise ist es einfach, Befehle während einer Shellsitzung wiederholt aufzurufen und, falls gewünscht, zu ändern.
Geführte Übungen
-
Benutzen Sie das
man
-System, um herauszufinden, wieapropos
angewiesen werden kann, lediglich eine kurze Übersicht zur Benutzung anzuzeigen und sich anschließend zu beenden. -
Benutzen Sie das
man
-System, um zu herauszufinden, unter welcher Copyright-Lizenz dergrep
-Befehl steht.
Offene Übungen
-
Identifizieren Sie die Hardwarearchitektur und die Linux-Kernelversion, welche Ihr Computer verwendet, in einem leicht lesbaren Ausgabeformat.
-
Geben Sie die letzten zwanzig Zeilen der dynamischen
history
-Datenbank und der.bash_history
-Datei aus, um diese zu vergleichen. -
Verwenden Sie den Befehl
apropos
, um dieman
-Seite zu identifizieren, auf der Sie den Befehl finden, um die Größe eines angeschlossenen physischen Blockgerätes in Bytes statt in Megabytes oder Gigabytes anzuzeigen.
Zusammenfassung
In dieser Lektion haben Sie gelernt:
-
Wie Sie Informationen über den Speicherort Ihres Dateisystems und den Softwarestack des Betriebssystems erhalten.
-
Wie Sie Hilfe zur Verwendung von Befehlen erhalten.
-
Wie man den Ort des Dateisystems und den Typ von Befehlsbinärdateien identifiziert.
-
Wie man zuvor ausgeführte Befehle findet und wiederverwendet.
Die folgenden Befehle wurden in dieser Lektion besprochen:
pwd
-
Zeigt den Pfad des aktuellen Arbeitsverzeichnis an.
uname
-
Zeigt unter anderem die Hardwarearchitektur Ihres Systems, die Linux-Kernelversion, die Distribution und die Version der verwendeten Distribution an.
man
-
Liefert Zugriff auf Hilfedateien, welche die Befehlsverwendung dokumentieren.
type
-
Zeigt den Speicherort und den Typ für einen oder mehrere Befehle an.
which
-
Liefert den absoluten Dateisystempfad für einen oder mehrere Befehle.
history
-
Dient zur Anzeige oder Wiederverwendung von Befehlen, welche zuvor ausgeführt wurden.
Lösungen zu den geführten Übungen
-
Benutzen Sie das
man
-System, um herauszufinden, wieapropos
angewiesen werden kann, lediglich eine kurze Übersicht zur Benutzung anzuzeigen und sich anschließend zu beenden.Führen Sie
man apropos
aus und scrollen Sie durch den Abschnitt “Options”, bis Sie zum Abschnitt--usage
gelangen. -
Benutzen Sie das
man
-System, um zu herauszufinden, unter welcher Copyright-Lizenz der Befehlgrep
steht.Führen Sie
man grep
aus und scrollen Sie nach unten zum Abschnitt “Copyright” des Dokuments. Beachten Sie, dass das Programm ein Copyright der Free Software Foundation verwendet.
Lösungen zu den offenen Übungen
-
Identifizieren Sie die Hardwarearchitektur und die Linux-Kernelversion, welche Ihr Computer verwendet, in einem leicht lesbaren Ausgabeformat.
Führen Sie
man uname
aus, lesen Sie sich den Abschnitt “Description” durch und identifizieren Sie jene Befehlsargumente, welche nur die gewünschten Ergebnisse anzeigen. Beachten Sie, wie-v
die Kernelversion und-i
die Hardwareplattform ausgibt.$ man uname $ uname -v $ uname -i
-
Geben Sie die letzten zwanzig Zeilen der dynamischen
history
-Datenbank und der.bash_history
-Datei aus, um diese zu vergleichen.$ history 20 $ tail -n 20 .bash_history
-
Verwenden Sie den Befehl
apropos
, um dieman
-Seite zu identifizieren, auf der Sie den Befehl finden, um die Größe eines angeschlossenen physischen Blockgerätes in Bytes statt in Megabytes oder Gigabytes anzuzeigen.Eine Möglichkeit besteht darin,
apropos
mit der Zeichenketteblock
auszuführen, die Ergebnisse zu durchsuchen undlsblk
als Befehl zur Auflistung von Blockgeräten zu identifizieren (welches das wahrscheinlichste Werkzeug für unsere Bedürfnisse darstellt). Anschließend sollteman lsblk
ausgeführt werden und der Abschnitt “Description” durchscrollt werden. Danach kann man so die Option-b
herausfiltern, welche die Gerätegröße in Bytes anzeigt. Führen Sie schließlichlsblk -b
aus, um sich das Ergebnis ausgeben zu lassen.$ apropos block $ man lsblk $ lsblk -b