Copyright © 2003 Sascha Welter
Zusammenfassung
Dieser Artikel gibt eine sehr einfache Einführung in die grundlegendsten Aspekte der Benützung der Unix-Shell. Das ganze ist speziell für Mac OS X und das Programm Terminal ausgerichtet. Der Artikel ist gedacht für Anfänger, die schon mal in Mailinglisten die Anweisung bekommen haben "mach doch xy im Terminal" und jetzt mehr wissen wollen.
Inhaltsverzeichnis
Das Programm "Terminal" befindet sich im Ordner "Dienstprogramme" (englisch "Utilities") im Ordner "Programme" (englisch "Applications") auf der Harddisk des Macs. Ein Terminal ist eigentlich so etwas wie eine Mensch/Maschine-Schnittstelle zu einem Grossrechner. Im Falle des Mac OS X Terminal-Programms ist dieser Grossrechner in den Innereien des Mac OS zu finden und läuft mit einer Variante des Betriebssystems Unix. Das Terminal-Programm können wir wie gewohnt durch Doppelklicken öffnen. Es öffnet sich ein Fenster, auf Wunsch können wir weitere Fenster gleichzeitig offen halten. Das ermöglicht es uns zum Beispiel, in einem Fenster eine Handbuchseite nachzulesen, während wir im anderen Fenster einen Befehl zusammenstellen.
Das Fenster lässt sich in der Grösse verändern durch ziehen an der unteren, rechten Ecke oder durch einstellen in den Fensterinformation, die wir uns mit Apfel-I anzeigen lassen können. In den Informationen, Abteilung "Monitor" können wir auch den Zeichensatz noch einstellen, nützlich ist z.B. "Westeuropäisch (ISO Latin 1)" falls wir mit Umlauten arbeiten wollen oder "Westeuropäisch (ASCII)" falls wir auf Umlaute gänzlich verzichten wollen. Auch die Farbe des Fensters und der Schrift lässt sich in den Informationen verändern, alte Unix-Hasen arbeiten oft mit grüner Schrift auf schwarzem Hintergrund.
Standardmässig begrüsst uns das Terminal mit etwas Text und einem kleinen Rechteck (hier durch ein "X" dargestellt):
Welcome to Darwin! [mac:~] benutzer% XDer Text "Welcome to Darwin!" ist reine Begrüssung. Auf der nächsten Zeile ist alles bis zum "%" der sogenannte "Prompt", je nach Einstellung und Zustand endet der Prompt auch mit "$" oder sogar "#". Was im Prompt steht ist auch wieder Einstellungssache. Das Beispiel hier stammt aus der Jaguar-Version. Es zeigt in den eckigen Klammern den Namen des Computers gefolgt von einem Doppelpunkt und dem Ordner, in dem wir uns gerade befinden. Im Beispiel ist das ein Tilde-Zeichen (~), was bedeutet, dass wir in unserem "home"-Ordner sind, dem Ordner, der im Finder mit dem Knopf "Privat" erreichbar ist.
Nach der eckigen Klammer folgt noch der Benutzername, in der Form, die in den Systemeinstellungen als "Kurzname" bezeichnet wird. Diese gesammelten Informationen sollen uns darüber informieren, wer wir sind und wo wir sind. Das ist deshalb wichtig, weil wir uns per Terminal mit verschiedenen Rechnern verbinden können und dort verschiedene Benutzernamen und Verzeichnisse benutzen können, aber das Terminal sieht immer gleich aus. Am Ende der Zeile mit dem "Prompt" sehen wir das kleine, farblich abgehobene Rechteck, den "Cursor". Den Cursor kennen wir auch aus normalen Mac-Programmen, wie zum Beispiel Textverarbeitungen. Im Terminal verhält sich der Cursor nicht ganz gleich wie in anderen Mac-Programmen. Wir können im Terminal-Fenster nicht in eine andere Zeile klicken, um den Cursor dort zu positionieren. Auch die Pfeiltasten haben nicht die gewohnte Funktion.
Was wir hier im Terminal arbeiten sehen, ist die sogenannte "Shell". Eine Shell ist ein Programm, das unsere Eingaben annimmt, soweit wie möglich verarbeitet und dann an andere Befehle weitergibt. Es gibt verschiedene Shells mit Namen wie csh, tcsh, bash, ksh. Heutzutage verhalten sich die meisten Shells sehr ähnlich, zumindest auf dem hier beschriebenen Niveau für Anfänger.
Zuallererst einmal können wir Befehle eingeben, indem wir auf der Tastatur tippen. Geben wir einmal ein:
[mac:~] benutzer% Das ist ein Befehl: lsXIn diesem Beispiel habe ich den Cursor wieder durch ein X markiert -- zum letzen Mal in diesem Text, denn die Position ergibt sich von selber. Unix-Befehle werden also einfach eingetippt. Nachdem wir mit Tippen fertig sind, drücken wir die "Enter"-Taste. Mal sehen, was in unserem Beispiel passiert:
[mac:~] benutzer% Das ist ein Befehl: ls Das: Command not found. [mac:~] benutzer%Was wir da eingegeben haben, funktioniert also nicht als Unix-Befehl. Freundlicherweise werden wir mit einer Fehlermeldung darüber informiert ("Command not found", "Befehl nicht gefunden" ist eine recht häufige Fehlermeldung wenn wir uns vertippen). Und zum Schluss landen wir wieder bei unserem Prompt. Jetzt könnten wir natürlich in Versuchung geraten, die eben eingegebene Zeile zu korrigieren. Mit der Maus können wir den Text zwar auswählen, aber anschliessend nicht korrigieren. Wir können es jetzt einfach nochmals probieren, indem wir an unserem "neuen" Prompt den Befehl erneut eingeben. Oder wir können mit der "Pfeil-nach-oben"-Taste den letzten Befehl zurückholen und mit den "Pfeil-Links"- und "Pfeil-Rechts"-Tasten sowie der Delete-Taste unsere Eingabe korrigieren. Wenn wir fertig sind, drücken wir wieder "Enter", wobei es keine Rolle spielt, wo wir mit dem Cursor in unserer Eingabezeile stehen. "Enter" schliesst die Eingabe ab, es fügt keine neue Zeile ein wie wir das aus der Textverarbeitung gewohnt sind. Probieren wir es noch einmal richtig:
[mac:~] benutzer% ls Desktop Network Trash Folder Documents Pictures Icon? Public Library Sites Movies TheVolumeSettingsFolder tmp Music bin [mac:~] benutzer%Sieht doch schon ganz anders aus!
Was ist hier passiert? Ich habe den Befehl "ls" eingegeben, dann "Enter" gedrückt. Beginnend mit der nächsten Zeile habe ich das Ergebnis ausgegeben bekommen, eine Liste (dafür steht "ls") der Objekte im aktuellen Verzeichnis. Einige der Objekte können wir sofort identifizieren, wie z.B. "Documents", den Standard-Ordner für eigene Dokumente, den Apple jedem neuen Benutzerordner spendiert. Allerdings ist der Name hier in der englischen Originalfassung, die "aufgeklebte" Übersetzung ist vom Terminal aus nicht sichtbar. Andere Objekte wie den Ordner "tmp" gibt es nicht standardmässig, ich habe diesen Ordner für Gerümpel eingerichtet, das auch wieder gelöscht werden kann. Nach der Ausgabe erhalte ich wieder einen Prompt, ich kann also neue Befehle eingeben.
Der Befehl "ls", den wir hier eingegeben haben listet also Objekte auf. Das ist ja schon ganz nützlich, aber so richtig spannend wird es erst, wenn wir den Befehl in verschiedenen Varianten benutzen können. Zum Ausprobieren empfehle ich:
[mac:~] benutzer% ls -F ... [mac:~] benutzer% ls Documents ... [mac:~] benutzer% ls -l Documents ...Am Anfang der eingegebenen Zeile steht unser Befehl "ls". Danach haben wir einige "Optionen" (oft auch als "Argumente" bezeichnet) eingegeben, mit denen wir auswählen, was wir als Resultat gerne hätten. Bevor ich auf die einzelnen Optionen eingehe, sollten wir bemerken, dass praktisch alle Unix-Befehle nach diesem Muster aufgebaut sind. Zuerst kommt der Name des Befehls, dann ein Leerzeichen und daraufhin die Optionen. Mehrere Optionen werden häufig durch Leerzeichen getrennt. Ob ein oder mehrere Leerzeichen spielt keine grosse Rolle, aber ein Leerzeichen am falschen Ort kann unerwartete Resultate haben, zum Beispiel zwischen "-" und "F".
[mac:~] benutzer% ls - F ls: -: No such file or directory ls: F: No such file or directory [mac:~] benutzer%Hier habe ich vor dem "ls" zwei Leerzeichen eingegeben, die den Computer nicht gross interessiert haben. Aber das eine Leerzeichen zwischen "-" und "F" hat zu einem Missverständnis geführt.
Zu unseren Experimentier-Beispielen: Erstmal haben wir den Befehl "ls -F". Die Option "-F" fügt bei einigen der Objekte einen Slash "/" hinten an, um zu markieren, dass es sich um Ordner handelt. "ls Documents" listet nicht den Ordner auf in dem wir uns aktuell befinden (unser "home"-Verzeichnis), sondern den Ordner "Documents" im aktuellen Verzeichnis. Im letzten Beispiel haben wir die Option "-l", die uns ein "langes" Listing mit vielen Informationen ausgibt, kombiniert mit dem Ordnernamen "Documents": Wir möchten also eine lange, ausführliche Auflistung des Inhalts des Ordners "Documents".
Bei "ls - F" hat mich der Computer so verstanden, dass ich eine Auflistung des Verzeichnisses "-" und des Verzeichnisses "F" möchte. Und die beiden gibt es nicht.
Einer der wichtigsten Befehle wird benützt, um nachzuschauen, was andere Befehle machen: Der Befehl "man". "man" steht für "manual", Handbuch. Als Argument gibt man "man" den Namen des Befehls mit, über den man mehr erfahren möchte. Probieren wir es doch mal mit unserem Bekannten "ls" aus:
[mac:~] benutzer% man ls
LS(1) BSD General Commands Manual LS(1)
NAME
ls - list directory contents
SYNOPSIS
ls [-ACFLRSTWacdfgiklnoqrstux1] [file ...]
DESCRIPTION
For each operand that names a file of a type other than directory, ls
displays its name as well as any requested, associated information. For
...
Das Terminal wird mit englischen Erklärungen gefüllt. Ganz unten auf der
letzten Zeile steht (je nach Version) ein Doppelpunkt, eine Angabe
wie viel schon dargestellt wurde oder einfach das Wort "more". Wenn man
den Bildschirminhalt gelesen hat, kann man mit der Leerschritt-Taste
"more" lesen, eben mehr.
Einen Bildschirm zurück nach oben kommt man mit
der Taste "b" und die Taste "q" beendet den ganzen Spuk. Etwas weiter
unten finden wir die Erklärung zu unserer Option "-F":
Unter "DESCRIPTION" bekommen wir eine Beschreibung des Befehls
geliefert. Für uns als Anfänger ist das oft die wichtigste Information:
Was macht dieser Befehl eigentlich? Dazu gibt es noch viele Details über
den Befehl, unter anderem zu den verschiedenen möglichen Optionen.
...
-F Display a slash (/) immediately after each pathname that is a
directory, an asterisk (*) after each that is executable, an at
sign (@) after each symbolic link, a percent sign (%) after each
whiteout, an equal sign (=) after each socket, and a vertical bar
(|) after each that is a FIFO.
...
Da steht also, dass wir einen "/" nach jedem Ordnernamen bekommen, einen
"*" nach jeder ausführbaren Datei. Und dazu noch einige Dinge, deren
Sinn wir vielleicht noch nicht verstehen. Aber mit sorgfältigem lesen
ist es theoretisch möglich, alle wichtigen Informationen über die
Anwendung des Befehls zu bekommen. Wenn uns also jemand in einer
Mailingliste empfiehlt, einen bestimmten Befehl zur Lösung eines
Problems zu benutzen, dann sollten wir als erstes mit "man befehl"
hingehen und uns anschauen, was das Ding eigentlich macht. Dabei sehen
wir uns auch gleich die gewünschten Optionen an: Was genau wurde uns da
gesagt, was wir machen sollen? Ein paar Minuten aufmerksamen Studiums
hilft uns, Fehler zu vermeiden. Und das Verständnis der Lösung wächst
auch, was uns wiederum hilft, für das nächste Problem dazuzulernen.
Zwei der am meisten benutzten Befehle haben wir schon kennen gelernt: man und ls. Einige weitere Befehle können wir mit "man" auch gleich näher kennen lernen:
change directory, um das Verzeichnis zu wechseln, in dem wir uns befinden -- bei man cd bekommen wir allerdings nicht die Handbuch-Seite von "cd", sondern die von unserer Shell (z.B. tcsh oder bash), weil cd eigentlich kein eigener Befehl ist sondern ein "in die Shell eingebauter" Befehl. Mit cd ordner bewegen wir uns "in" den Ordner, mit cd .. gehen wir eine ebene höher und mit nur cd kommen wir direkt in unseren "home"-Ordner
make directory, um ein neues Verzeichnis zu erstellen
remove, löschen von Dateien -- unwiderruflich, also mit höchster Vorsicht zu geniessen
ein spezieller Mac OS X Befehl, der Dateien öffnet, als ob wir sie im Finder mit Doppelklick geöffnet hätten
mit dem wir eine Textdatei durchblättern können, so wie wir das mit der manual page gemacht haben
mit dem wir uns Befehle zu einem Stichwort anzeigen lassen können
Das Unix-Terminal ist keine sehr freundliche Umgebung. Fehler werden nicht unbedingt höflich vergeben. Wenn wir mit "rm" eine Datei löschen und dann feststellen, dass es die falsche war, dann wars das. Die Datei landet nicht zuerst in einem Papierkorb, aus dem wir sie zurückholen können. Auch Tippfehler können dabei gefährlich werden. Deshalb achten wir unbedingt darauf, dass wir wirklich exakt eingegeben haben, was wir eingeben wollten.
Besonders vorsichtig sollten wir sein, bei Anweisungen, die wir aus dem Internet von uns nicht persönlich bekannten oder uns nicht als kompetent bekannten Menschen bekommen. Das muss nicht an bösem Willen liegen. Aber es kann nur schon sein, dass der tragische Tippfehler nicht erst bei uns passiert ist, sondern schon vorher bei unserem Ratgeber. Ein kurzer Blick in die "man"ual-Seite hilft uns da zu verstehen, was passieren sollte oder könnte. Keinesfalls zu empfehlen ist das blinde ausprobieren eines Befehls, den ich irgendwo gesehen habe. Ein typischer Unix-Befehl erklärt nicht zuerst was er macht und fragt dann nach ob wir das auch wirklich wollen. Es rumpelt einfach und hoppla ist das Resultat da, manchmal erst später bemerkt.