Falls Ihre Linux-Kenntnisse ein wenig eingerostet sind, haben Sie hier Gelegenheit, sie aufzufrischen und sich ein paar der Dinge anzuschauen, die Sie für dieses Buch brauchen. (Für einen echten Anfänger könnte diese Rückschau allzu kurz sein. Sollten Sie sich zu dieser Gruppe zählen, empfehle ich einen Blick auf die weiterführende Literatur am Ende.)
Um einen Linux-Befehl auf der Kommandozeile auszuführen, tippen Sie den Befehl ein und drücken Enter. Um einen Befehl zu beenden, der gerade läuft, drücken Sie Strg-C.
Ein einfacher Linux-Befehl besteht aus einem einzelnen Wort, das normalerweise der Name eines Programms ist, gefolgt von zusätzlichen Strings, den sogenannten Argumenten. So besteht zum Beispiel der folgende Befehl aus einem Programmnamen, ls, und zwei Argumenten:
$ ls -l /bin
Argumente, die mit einem Bindestrich beginnen, wie -l, werden Optionen genannt, weil sie das Verhalten des Befehls verändern. Andere Argumente könnten Dateinamen, Verzeichnisnamen, Benutzernamen, Hostnamen oder andere Strings sein, die das Programm benötigt. Optionen stehen normalerweise vor den restlichen Argumenten (allerdings nicht immer).
Befehlsoptionen gibt es in verschiedenen Formen, je nachdem, welches Programm Sie ausführen:
Mehrere Optionen können oft (je nach Befehl) hinter einem einzelnen Bindestrich kombiniert werden. So ist zum Beispiel der Befehl ls -al äquivalent zu ls -a -l.
Optionen unterscheiden sich nicht nur im Erscheinungsbild, sondern auch in der Bedeutung. Bei dem Befehl ls -l bedeutet das -l »lange Ausgabe«, während es bei dem Befehl wc -l für »Textzeilen« steht. Zwei Befehle können auch unterschiedliche Optionen benutzen, die dasselbe bedeuten, wie etwa -q für »run quietly« versus -s für »run silently«, was in beiden Fällen »stillschweigend ausführen« bedeutet. Solche Inkonsistenzen erschweren das Erlernen von Linux, aber Sie werden sich irgendwann an sie gewöhnen.
Linux-Dateien sind in Verzeichnissen (Ordnern) enthalten, die in einer Baumstruktur organisiert sind, wie in derjenigen aus Abbildung A-1. Der Baum beginnt in einem Verzeichnis, das als root (Wurzel) bezeichnet und durch einen einfachen Schrägstrich (/) dargestellt wird. Dieses Verzeichnis kann Dateien und weitere Verzeichnisse, die sogenannten Unterverzeichnisse enthalten. So besitzt zum Beispiel das Verzeichnis Music zwei Unterverzeichnisse namens mp3 und SheetMusic. Wir nennen Music das Eltern- oder Parent-Verzeichnis von mp3 und SheetMusic (oder auch das übergeordnete Verzeichnis). Verzeichnisse mit demselben Parent-Verzeichnis werden Siblings genannt.
Ein Pfad durch den Baum wird als eine Abfolge von Verzeichnisnamen geschrieben, die durch Schrägstriche getrennt sind, wie etwa /home/smith/Music/mp3. Ein Pfad kann auch mit einem Dateinamen enden, wie bei/home/smith/Music/mp3/catalog.txt. Diese Pfade nennt man absolute Pfade, weil sie beim root-Verzeichnis beginnen. Pfade, die anderswo und nicht mit einem Schrägstrich beginnen, werden als relative Pfade bezeichnet, weil sie relativ zum aktuellen Verzeichnis sind. Wenn Ihr aktuelles Verzeichnis /home/smith/Music ist, dann sind einige relative Pfade mp3 (ein Unterverzeichnis) und mp3/catalog.txt (eine Datei). Selbst ein Dateiname für sich allein, wie catalog.txt, ist ein relativer Pfad in Bezug auf /home/smith/Music/mp3.
Zwei besondere relative Pfade sind ein einzelner Punkt (.), der auf das aktuelle Verzeichnis verweist, und zwei Punkte hintereinander (..), die auf das übergeordnete Verzeichnis (Parent-Verzeichnis) des aktuellen Verzeichnisses verweisen.1 Beide können Teil von längeren Pfaden sein. Falls zum Beispiel Ihr aktuelles Verzeichnis /home/smith/Music/mp3 ist, verweist der Pfad .. auf Music, der Pfad ../../../.. verweist auf das root-Verzeichnis, und der Pfad ../SheetMusic verweist auf einen Sibling von mp3.
Abbildung A-1: Pfade in einem Linux-Verzeichnisbaum
Sie, und auch jeder andere Benutzer auf einem Linux-System, haben jeweils ein eigenes Verzeichnis, das als Ihr Home-Verzeichnis bezeichnet wird und in dem Sie nach Belieben Dateien und Verzeichnisse anlegen, bearbeiten und löschen können. Dessen Pfad ist üblicherweise /home/, gefolgt von Ihrem Benutzernamen, also etwa /home/smith.
Ihre Kommandozeile (Shell) agiert zu jedem Zeitpunkt in einem bestimmten Verzeichnis, das in diesem Fall Ihr aktuelles Verzeichnis, Arbeitsverzeichnis oder aktuelles Arbeitsverzeichnis ist. Sie können sich den Pfad Ihres aktuellen Verzeichnisses mit dem Befehl pwd (print working directory) anschauen:
$ pwd
/home/smith das Home-Verzeichnis des Benutzers smith
Sie bewegen sich zwischen den Verzeichnissen mit dem Befehl cd (change directory), bei dem Sie den Pfad (absolut oder relativ) zu Ihrem gewünschten Ziel angeben:
$ cd /usr/local absoluter Pfad
$ cd bin relativer Pfad, der zu /usr/local/bin führt
$ cd ../etc relativer Pfad, der zu /usr/local/etc führt
Bearbeiten Sie Dateien mit einem normalen Linux-Texteditor, indem Sie einen der folgenden Befehle ausführen:
emacs
Sobald der emacs läuft, tippen Sie Ctrl-h, gefolgt von t für ein Tutorial.
nano
Besuchen Sie nano-editor.org (https://nano-editor.org) für eine Dokumentation.
vim oder vi
Führen Sie den Befehl vimtutor aus, um ein Tutorial zu öffnen.
Um eine Datei anzulegen, geben Sie einfach deren Namen als Argument an. Der Editor erzeugt die Datei dann:
$ nano newfile.txt
Alternativ können Sie mit dem Befehl touch eine leere Datei erstellen, indem Sie den gewünschten Dateinamen als Argument angeben:
$ touch funky.txt
$ ls
funky.txt
Sie listen die Dateien in einem Verzeichnis (standardmäßig in Ihrem aktuellen Verzeichnis) mit dem Befehl ls auf:
$ ls
animals.txt
Die Attribute einer Datei oder eines Verzeichnisses können Sie sich mit einem »langen« Listing (ls -l) anzeigen lassen:
$ ls -l
-rw-r--r-- 1 smith smith 325 Jul 3 17:44 animals.txt
Von links nach rechts sind die Attribute die Dateiberechtigungen (-rw-r – r--), beschrieben in »Dateiberechtigungen« auf Seite 226, der Eigentümer (smith) und die Gruppe (smith), die Größe in Bytes (325), das Datum und die Uhrzeit der letzten Änderung (Jul 3 dieses Jahres um 17:44) und der Dateiname (animals.txt).
ls gibt standardmäßig keine Dateinamen aus, die mit einem Punkt beginnen. Um diese Dateien aufzulisten, die oft als Punktdateien oder verborgene Dateien bezeichnet werden, fügen Sie die Option -a hinzu:
$ ls -a
.bashrc .bash_profile animals.txt
Kopieren Sie eine Datei mit dem Befehl cp, Sie geben dazu den ursprünglichen und den neuen Dateinamen an:
$ cp animals.txt beasts.txt
$ ls
animals.txt beasts.txt
Zum Umbenennen einer Datei dient der Befehl mv (move), bei dem Sie ebenfalls den ursprünglichen und den neuen Dateinamen angeben:
$ mv beasts.txt creatures.txt
$ ls
animals.txt creatures.txt
Sie löschen eine Datei mit dem Befehl rm (remove):
$ rm creatures.txt
Warnung Das Löschen unter Linux ist keine freundliche Angelegenheit. Der rm-Befehl fragt nicht »Sind Sie sicher?«, und es gibt auch keinen Papierkorb zum Wiederherstellen von Dateien. |
Erzeugen Sie ein Verzeichnis mit mkdir, benennen Sie es mit mv um und löschen Sie es (falls es leer ist) mit rmdir:
$ mkdir testdir
$ ls
animals.txt testdir
$ mv testdir newname
$ ls
animals.txt newname
$ rmdir newname
$ ls
animals.txt
Kopieren Sie eine oder mehrere Dateien (oder Verzeichnisse) in ein Verzeichnis:
$ touch file1 file2 file3
$ mkdir dir
$ ls
dir file1 file2 file3
$ cp file1 file2 file3 dir
$ ls
dir file1 file2 file3
$ ls dir
file1 file2 file3
$ rm file1 file2 file3
Verschieben Sie anschließend eine oder mehrere Dateien (oder Verzeichnisse) in ein Verzeichnis:
$ touch thing1 thing2 thing3
$ ls
dir thing1 thing2 thing3
$ mv thing1 thing2 thing3 dir
$ ls
dir
$ ls dir
file1 file2 file3 thing1 thing2 thing3
Sie löschen ein Verzeichnis und seinen ganzen Inhalt mit rm -rf. Sie sollten sich völlig sicher sein, da dies nicht rückgängig gemacht werden kann (siehe »Nie wieder die falsche Datei löschen (dank der History-Erweiterung)« auf Seite 59 mit einigen Sicherheitstipps hierzu)).
$ rm -rf dir
Geben Sie eine Textdatei mit dem Befehl cat auf dem Bildschirm aus:
$ cat animals.txt
Betrachten Sie eine Textdatei bildschirmweise mit dem Befehl less:
$ less animals.txt
Beim Ausführen von less gelangen Sie auf die nächste Seite, indem Sie die Leertaste drücken. Um less zu beenden, drücken Sie q. Für Hilfe drücken Sie h.
Der Befehl chmod legt fest, dass eine Datei für Sie selbst, für eine bestimmte Gruppe von Benutzern oder für alle lesbar, schreibbar und/oder ausführbar ist. Abbildung A-2 zeigt eine kurze Auffrischung zum Thema der Dateiberechtigungen.
Abbildung A-2: Dateiberechtigungs-Bits
Hier sind einige typische Operationen mit chmod. Machen Sie eine Datei für Sie selbst lesbar und schreibbar, während sie für alle anderen nur lesbar sein soll:
$ chmod 644 animals.txt
$ ls -l
-rw-r--r-- 1 smith smith 325 Jul 3 17:44 animals.txt
Schützen Sie sie vor allen anderen Benutzern:
$ chmod 600 animals.txt
$ ls -l
-rw------- 1 smith smith 325 Jul 3 17:44 animals.txt
Sorgen Sie dafür, dass ein Verzeichnis für alle lesbar sein soll und betreten werden darf, dass aber nur Sie allein darin schreiben dürfen:
$ mkdir dir $
chmod 755 dir
$ ls -l
drwxr-xr-x 2 smith smith 4096 Oct 1 12:44 dir
Schützen Sie ein Verzeichnis vor allen anderen Benutzern:
$ chmod 700 dir
$ ls -l
drwx------ 2 smith smith 4096 Oct 1 12:44 dir
Die normalen Berechtigungen gelten nicht für den Superuser, der alle Dateien und Verzeichnisse auf dem System lesen und schreiben darf.
Wenn Sie einen Linux-Befehl ausführen, startet dieser einen oder mehrere Linux-Prozesse, jeweils mit einer numerischen Prozess-ID der sogenannten PID. Schauen Sie sich die aktuellen Prozesse Ihrer Shell mit dem Befehl ps an:
$ ps
PID TTY TIME CMD
5152 pts/11 00:00:00 bash
117280 pts/11 00:00:00 emacs
117273 pts/11 00:00:00 ps
Alle laufenden Prozesse aller Benutzer sehen Sie mit:
$ ps -uax
Beenden Sie einen Ihrer eigenen Prozesse mit dem Befehl kill, dem Sie die PID als Argument mitgeben. Der Superuser (Linux-Administrator) kann Prozesse aller Benutzer beenden.
$ kill 117280
[1]+ Exit 15 emacs animals.txt
Der Befehl man gibt die Dokumentation jedes Standardbefehls auf Ihrem Linux-System aus. Geben Sie einfach man ein, gefolgt vom Namen des Befehls. Um zum Beispiel die Dokumentation des Befehls cat zu sehen, führen Sie folgenden Befehl aus:
$ man cat
Das angezeigte Dokument wird auch als Manpage (Manual Page, also Handbuchseite) des Befehls bezeichnet. Wenn jemand sagt, Sie mögen sich die Manpage für grep anschauen, rufen Sie ganz einfach man grep auf.
man zeigt die Dokumentation mithilfe des Programmsless seitenweise an.2 Die üblichen Tastenkürzel für less funktionieren hier also. Tabelle A-1 listet einige der gebräuchlichen Tastenkürzel auf.
Tabelle A-1: Einige Tastenkürzel zum Betrachten von Manpages mit less
Tastenkürzel |
Aktion |
H |
Hilfe – Anzeige einer Liste von Tastenkürzeln für less |
Leertaste |
Anzeigen der nächsten Seite |
B |
Anzeigen der vorhergehenden Seite |
Enter |
eine Zeile nach unten scrollen |
< |
an den Anfang des Dokuments springen |
> |
an das Ende des Dokuments springen |
/ |
Vorwärtssuche nach Text (Sie tippen den Text ein und drücken Enter) |
? |
Rückwärtssuche nach Text (Sie tippen den Text ein und drücken Enter) |
N |
Suche nach dem nächsten Vorkommen des Suchtexts |
Q |
man beenden |
Um gleich mehrere Linux-Befehle als eine Einheit auszuführen, gehen Sie folgendermaßen vor:
Die Datei wird als Skript oder Shell-Skript bezeichnet. Die magische erste Zeile sollte die Symbole #! (ausgesprochen »shebang«), gefolgt von dem Pfad auf ein Programm, das das Skript liest und ausführt, enthalten:3
Hier ist ein Shell-Skript, das »Hallo« sagt und das heutige Datum ausgibt. Zeilen, die mit # beginnen, sind Kommentare:
#!/bin/bash
# Dies ist ein Beispielskript.
echo "Hallo allerseits!"
date
Benutzen Sie einen Texteditor und speichern Sie diese Zeilen in einer Datei namens howdy. Machen Sie die Datei dann ausführbar, indem Sie einen dieser Befehle ausführen:
$ chmod 755 howdy Setzen Sie alle Berechtigungen einschließlich
der Berechtigung zum Ausführen.
$ chmod +x howdy Oder fügen Sie nur die Berechtigung zum Ausführen hinzu.
und führen Sie sie dann aus:
$ ./howdy
Hallo allerseits!
So 31 Jul 2022 17:11:23 CEST
Der führende Punkt und der Schrägstrich (./) zeigen an, dass sich das Skript in Ihrem aktuellen Verzeichnis befindet. Ohne diese beiden Zeichen würde die Linux-Shell das Skript nicht finden:4
$ howdy
howdy: command not found
Linux-Shells besitzen einige Eigenschaften von Programmiersprachen, die in Skripten ganz nützlich sind. Die bash zum Beispiel erlaubt if-Anweisungen, for-Schleifen, while-Schleifen und andere Kontrollstrukturen. Ein paar Beispiele finden sich in diesem Buch, siehe man bash für die Syntax.
Einige Dateien, Verzeichnisse und Programme sind vor den normalen Benutzern, also auch Ihnen, geschützt:
$ touch /usr/local/
avocado Versuchen Sie, in einem Systemverzeichnis eine Datei anzulegen.
touch: cannot touch '/usr/local/avocado': Permission denied
Permission denied bedeutet normalerweise, dass Sie versucht haben, auf geschützte Ressourcen zuzugreifen. Diese sind nur für den Linux-Superuser (Benutzername root) erreichbar. Die meisten Linux-Systeme enthalten ein Programm namens sudo, das es Ihnen erlaubt, für die Dauer eines einzigen Befehls zum Superuser zu werden. Falls Sie Linux selbst installiert haben, ist Ihr Account vermutlich bereits darauf eingestellt, sudo auszuführen. Sind Sie dagegen Benutzer auf dem Linux-System einer anderen Person, haben Sie wahrscheinlich keine Superuser-Rechte; sprechen Sie mit Ihrem Systemadministrator, falls Sie sich nicht sicher sind.
Ist alles richtig eingestellt, führen Sie sudo aus und geben den gewünschten Befehl an, den Sie als Superuser ausführen wollen. Sie werden aufgefordert, Ihr Login-Passwort anzugeben, um Ihre Identität zu bestätigen. Geben Sie es korrekt ein, und der Befehl läuft mit root-Berechtigungen:
$ sudo touch /usr/local/avocado Erzeugen der Datei als root
[sudo] password for smith: Passwort hier eingeben
$ ls -l /usr/local/avocado Auflisten der Datei
-rw-r--r-- 1 root root 0 Sep 10 17:16 avocado
$ sudo rm /usr/local/avocado als root wieder aufräumen
Je nachdem, wie es konfiguriert ist, merkt sich sudo Ihre Passphrase für eine Weile (im Cache), sodass Sie möglicherweise nicht jedes Mal danach gefragt werden.
Für weitere Grundlagen zur Linux-Benutzung lesen Sie mein Taschenbuch »Linux – die wichtigen Befehle kurz & gut« (O’Reilly), oder suchen Sie sich passende Online-Tutorials (https://oreil.ly/KLTji).