Hobbes_
Gast
Hallo zusammen,
Wie ich in der Liste gesehen habe, wurde noch ein Tutorial zu Terminal gesucht...
(0) Einleitung
Für den Alltag eines üblichen Mac-Users braucht es das Programm Terminal eigentlich nicht. Da geniesst man die aufgeräumte Benutzeroberfläche. Ein direkter Zugriff auf den UNIX-Unterbau des Mac OS X – Darwin – kann in verschiedenen Fragestellungen nützlich sein (Benutzung von Compilern ohne Integration ins IDE, Netzwerkaufgaben, Benutzung von Spezialprogrammen, Definition von Skripten / Cron-Jobs,...). Da sehr viele Web-Server übrigens Linux-Server sind (LAMP), helfen diese Kenntnisse gleichzeitig auch, einen solchen Web-Server besser zu verstehen.
Dieses Tutorial richtet sich in erster Linie an Mac-User, welche noch keinen Kontakt mit Terminal hatten (es ist bewusst sehr einfach gehalten und erklärt einige Details bewusst noch nicht). Aus Platzgründen wird das Tutorial auf verschiedene Posts verteilt.
Wer übrigens bereits Kontakt mit einer Linux- oder einer UNIX-Distribution hatte, kann dieses Tutorial wohl getrost überspringen. Daneben empfiehlt sich bei ernsthafter weiterer Benutzung zumindestens ein kleines Buch über UNIX.
Selbstverständlich ist dieses Tutorial erweiterungsfähig. So bin ich froh um konstruktive Kritik (Fehlermeldungen / Erweiterungsvorschläge).
Viel Erfolg!
psc
Inhalt
Teil 1
(1) Das Programm
(2) Unix als System
(3) man
(4) Einige Befehle
Teil 2
(5) I/O-Redirection / Pipes und Wildcards / Regular Expressions
(6) Editoren vi/vim, Emacs und nano
(7) "Pimp my Terminal"
Teil 3
(7) "Pimp my Terminal" (Fortsetzung)
(8) User / Admin / Superuser
Teil 4
(8) User / Admin / Superuser (Fortsetzung)
(9) Wie komme ich zu UNIX-Programmen?
Teil 5
(10) Einige Unterschiede zwischen Darwin und anderen UNICES
(11) Weitere Informationen / Referenzen / Links
Dank
Einige spezielle Zeichen
Im Verlauf dieses Tutorials werden einige spezielle Zeichen notwendig werden: ~ # [ ] { } / | \ < >
Wer diese noch nicht benutzt hat, kann sie am einfachsten hier nachschlagen:
(1) Das Programm
Das Einfachste zuerst: Das Programm Terminal findet sich im Verzeichnis
Eine Shell erlaubt neben direkten Benutzereingaben auch das Ausführen von Skripten (Unix war ursprünglich spezialisiert darauf, möglichst viele Funktionen mit kompakten Programmen zu ermöglichen, welche mittels solcher Skripte verbunden waren) sowie eine gewisse Editierbarkeit der Befehle.
So sieht bash beim Start aus. Eine freundliche Begrüssung durch Darwin:
Last login: Fri Apr 6 16:42:04 on console
Welcome to Darwin!
MacXYZ:~ Benutzername$
Die unterste Zeile ist der sogenannte Prompt, hinter welchem die Befehle eingegeben werden. MacXYZ ist der Name des Computers. Dann folgt das aktuelle Verzeichnis. Dabei muss man wissen, dass die Tilde ~ ein Verweis auf das eigene Benutzerverzeichnis ist. Standardmässig beginnt bash im Benutzerverzeichnis. Dahinter folgt der Benutzername. Das Dollarzeichen $ dahinter zeigt, dass bash im Benutzermodus betrieben wird, in dem einige Befehle nicht möglich sind. Ein Gartenzaun # würde zeigen, dass man sich als Superuser (root) angemeldet hat mit vollem Zugriff (siehe unten)...
Ich benutze diese Zeichen in diesem Tutorial auch, um den Prompt am Anfang verkürzt zu symbolisieren.
Geben wir einen ersten Befehl ein (darauf hast Du ja sicher gewartet
):
Als erstes benutzen wir ein Programm, das uns eine Auflistung des Verzeichnisses gibt (ls = list directory contents). Gib mal ls ein (also LS kleingeschreiben) und betätige den Zeilenvorschub.
Gratulation! Damit siehst Du eine Auflistung der Verzeichnisse und Dateien des aktuellen Verzeichnisses ~ (Dein persönliches Benutzerverzeichnis). Unten zeigt sich ein erneuter Prompt für den nächsten Befehl. Erklärungen folgen weiter unten im Tutorial
Die Shell wird mit dem Befehl exit beendet.
(2) Unix als System
Die Benutzung des Terminals setzt die Kenntnis einiger grundsätzlicher Elemente eines UNIX-Systems voraus. Es ist extrem logisch aufgebaut (das Design gefällt mir immer wieder).
UNIX (bzw. initial UNICS) wurde als Multiuser-System konzipiert (sehr interessant: UNIX, Geschichte). Zumindest gerüchtehalber wurde es initial nur entworfen, um ein bestimmtes Spiel (Space Travel) auch auf einem anderen Computern betreiben zu können. Daneben ist die Geschichte von UNIX nur schon durch dessen Hauptautoren eng mit der Entwicklung der Programmiersprache C verknüpft.
(2.1) Rechte in Unix
Ein Multiuser-System setzt eine strikte Rechteverwaltung voraus. Rechte werden für jede Datei vergeben bezüglich
Diese Rechte werden separat angegeben für
So kann beispielsweise definiert werden, dass nur der Besitzer eine Datei lesen und schreiben darf, eine definierte Benutzergruppe die Datei lesen kann, jedoch andere Computerbenutzer die Datei nicht einmal lesen dürfen.
Spezielles | Benutzer-Flags (rwx) | Gruppen-Flags (rwx) | Alle-Benutzer-Flags (rwx)
Beispiel:
drwx------ 5 User User - 170 Jul 3 2006 Music
Klar ein Verzeichnis (d am Anfang), der Benutzer ‚User’ darf das Verzeichnis sehen, darf schreiben und darf es öffnen (Das Ausführen eines Verzeichnisses (x) bedeutet es zu öffnen). Diese Rechte werden allen anderen Benutzern des Computers verweigert.
-rw-r----- 1 User GruppeA - 557 Jul 27 2006 beispiel.txt
Die Datei beispiel.txt darf vom Benutzer gelesen und beschrieben werden. Benutzer, die Miglieder der Gruppe GruppeA sind, dürfen die Datei lesen. Andere Benutzer des Computers dürfen die Datei nicht einmal lesen. Die Datei hat keine Berechtigung ausgeführt zu werden. Das ist gut so: Die Datei ist ja auch kein Programm.
Probier es selbst mal aus. Benutze mal folgendes Kommando
$ ls –l
Info: Der Befehl ls steht für ‚list directory content’. Die Buchstabenkürzel hinter dem Gedankenstrich sind Optionen (werden weiter unten erklärt).
Resultat: Du siehst die Rechteverteilung aller Dokumente Deines Verzeichnisses.
Ergänzend zu diesen klassischen POSIX-konformen Dateirechten erlaubt Mac OSX ab 10.4 (Tiger) auch eine genauere Rechteverteilung mittels Access Control Lists (Granularität, siehe Kapitel 10)
(2.2) User / Admin / Superuser
UNIX basiert auf einem hierarchischen Rechte-System, in dem definiert ist, was ein bestimmter User machen darf. Grundsätzlich wird in UNIX-Systemen zwischen einem Superuser (meist ‚root’ genannt) und gewöhnlichen Benutzern mit klar eingeschränkten Rechten unterschieden. Der Superuser hat alle Rechte auf dem System. Damit besteht jedoch auch das Risiko, dass sich Fehler negativ auf das ganze System auswirken.
Oftmals legt man neben dem eigentlichen Superuser root weitere User mit Administrationsrechten an, welche gezielt auf einzelne Elemente des Systems Einfluss nehmen können (heutzutage übliche "Rollenbasierte Administration", die auch in Darwin konsequent umgesetzt ist).
Nebenbei: Darwin ist in dieser Hinsicht speziell, dass der in Benutzereinstellungen mit Administrator-Rechten ausgestattete Benutzer dieser Zwischenform entspricht und nicht etwa 'root'. Wenn man sich unbedingt als root einloggen können möchte, dann muss man das im Netinfo Manager speziell aktivieren. Dies ist jedoch nichts für uns Einsteiger
Es ist auch nicht notwendig (siehe Kapitel 8 in Teil 3).
Das oben erwähnte Benutzerverzeichnis ~ des aktuellen Benutzers ist übrigens im Verzeichnis /Users/Benutzername/ abgelegt. Wir gehen das gleich mal anschauen...
Dazu kurz eine Info über einige definierte Verzeichnisse:
/ Basisverzeichnis des Systems (root)
~ Benutzerverzeichnis des aktuellen Benutzers
~name Benutzerverzeichnis des Users name
. aktuelles Verzeichnis
.. Verzeichnis oberhalb des aktuellen in der Verzeichnishierarchie
Wichtig: Zwischen dem Basisverzeichnis / (root) und dem Superuser (ebenso meist root genannt; hat UID 0) muss klar unterschieden werden.
Die Daten sind ausserordentlich gut geordnet. Anbei eine kurze Zusammenstellung der typischen Verzeichnisse eines UNIX bzw. Linux Systems. Mac OS unterscheidet sich in einigen Punkten jedoch grundsätzlich (siehe Kapitel 10).
Relative und absolute Verzeichnisbezeichnungen
Also: Wir sind ja jetzt immer noch in unserem heimatlichen Benutzerverzeichnis ~, nicht wahr?
Gehen wir also mal ein Verzeichnis nach oben:
$ cd ..
Wir sehen am Prompt, dass das Verzeichnis gewechselt hat. Es ist jetzt /Users
MacXYZ:/Users Benutzername$
Weil es so schön war, nochmals
$ cd ..
Jetzt sind wir im Baisisverzeichnis, also in root. Das aktuelle Verzeichnis wird im Prompt auch mit / angegeben.
MacXYZ:/ Benutzername$
Jetzt schauen wir mal, was es da so hat:
$ ls –l (die Option ist ein kleines L)
Wir sehen vor allem eine Liste von Verzeichnissen (d am Anfang der Flags), die verschiedenen Benutzern gehören und verschiedenen Gruppen den Zugriff ermöglichen. Wir sehen auch das Verzeichnis Users, in dem letztlich alle Benutzerverzeichniss sind.
Gehen wir nochmals dorthin zurück. Wir benutzen
$ cd Users/Benutzername
Einfacher geht es auch mit folgendem Befehl. Er führt immer zurück ins eigene User-Verzeichnis:
$ cd ~
Mit cd und ls können wir also das ganze System mal ausloten und uns eine Information holen, was wo so gespeichert ist. Der Finder ist da natürlich wesentlich schneller und attraktiver. Jedoch sehen wir dort nie direkt so viele Details wie im Terminal.
(2.3) Präzision im System
Im Gegensatz zu den Shells anderer Betriebssysteme ist UNIX nicht tolerant. Da kommt es auf jedes Leerzeichen, sowie auf Gross- und Kleinschreibung an. Die Shell nimmt einen absolut beim Wort und tut, was man sie beauftragte zu tun. Das muss nicht zwingend das sein, was man selbst beabsichtigte zu tun. Diese verlangte Disziplin ist zu Beginn mühsam; hilft dann später, dass man sich wirklich klar sein kann, was passiert.
Ach ja: Im Finder gibt es die Möglichkeiten auch Dateien mit Leerzeichen im Dateinamen zu haben. Pfade zu solchen Dateien müssen mit Anführungs- und Schlussstrichen gekennzeichnet werden. Sonst werden fälschlicherweise mehrere Parameter angenommen:
$ less "~/irgend ein Verzeichnis/noch ein Verzeichnis/irgend eine Datei.txt"
(3) man
Als nächsten Befehl lege ich man (kurz für Manual = Bedienungsanleitung) ans Herz. Dieser ist einer der hilfreichsten Befehle, der zu jedem Befehl eine kurze Bedienungsanleitung enthält. Wichtig ist insbesondere Erklärung der Optionen (jeweils hinter dem Gedankenstrich angeführt) und anderer Parameter (zB. die bereits benutzten Verzeichnisnamen).
Schauen wir mal, was ls so für Optionen bietet:
$ man ls
Eine ganze Menge, nicht wahr
. Dabei findet man auch, was die Option -l bedeutet, die wir oben für ls benutzt haben.
Das ganze ist (leider) in Englisch gehalten. Gerade für Arbeiten auf Systemebene oder zum Schreiben von Programmen lohnt es sich, Englisch zu lernen (selbstverständlich gibt es auch andere Gründe
)...
Anbei ein Link mit einem Online-man mit deutschen Texten (leider unvollständig): man in Deutsch
man basiert im aktuellen OSX auf dem Programm less (früher more), welches man allgemein zum Anschauen von Textdateien benutzen kann. Entsprechend können alle Optionen benutzt werden. Nur die wichtigsten kurz zusammengefasst:
Dabei lege ich insbesondere die Suchfunktion ans Herz, da man so rasch die Bedeutung der Optionen anzeigen lassen kann. Beispiel:
$ man ls
Auch cd und man selbst haben einiges zu bieten:
$ man cd
bzw.
$man man
Auch bash hat selbstverständlich seine eigene manpage:
$man bash
Eine kurze Hilfe bieten auch oft die Programme selbst. Einige haben eine Option -h bzw. --h, mit denen sie die wichtigsten Parameter angeben. Den Schlüssel zum Erfolg bringt jedoch meist man.
(4) Einige Befehle
Mit der Shell kann man sich selbstverständlich nicht nur das Verzeichnis anzeigen lassen. Der Schlüssel zum Erfolg ist die genaue Kenntnis der vorhandenen Befehle (teilweise Elemente der Shell, teilweise Programme, teilweise Scripts). Zu Beginn ist man erstaunt, wie viele Probleme in UNIX nicht durch Programme, sondern durch Scripts gelöst werden, welche auf basalste Programme zurückgreifen.
Um nicht einfach eine Liste wiederholen zu müssen, verweise ich auf eine externe Quelle. Wichtig ist, dass ein Befehl genau verstanden wird, bevor er eingegeben wird. Bereits als User kann man schon einige Dinge löschen, als Admin/Superuser kann man mit wenigen Tasten das System unbrauchbar machen. So lohnt es sich, einen Befehl gerade bei kritischen Befehlen zu prüfen, bevor man ihn mittels der Eingabetaste zur Ausführung bringt...
Diese Informationen können durch das integrierte Hilfesystem leicht erhalten werden. Ein man <irgendeinBefehl> lohnt sich wohl vor jeder ersten Anwendung. Ich empfehle deshalb, sich nun auch etwas Zeit zu nehmen und sich die wichtigen Befehle zB. aus dieser Liste in man oder online anzusehen. (Nebenbei: Es hilft zu wissen, dass Darwin ein Derivat des BSD-UNIX ist mit POSIX-Kompatibilität)
Da sich nur wenige Leute schon zu Beginn alle Optionen der Befehle locker merken können
, sind Übersichtskarten mit typischen Befehlen (Beispiel [PDF]) praktisch.
(4.1) Wisse, was Du tust!
Aufgrund der sehr kompakt gehaltenen Befehle können teilweise bereits einzelne falsch eingegebene Buchstaben aus einem problemlosen Kommando ein Problem grösserer Tragweite produzieren. Dabei gilt es insbesondere auch zu beachten, dass UNIX strikt zwischen Gross- und Kleinschreibung unterscheidet. Dies ist insbesondere wichtig, da es einige Buchstaben gibt, die als unterschiedliche Optionen verwendet werden, je nachdem ob gross- oder kleingeschrieben.
Dies soll nicht Angst machen, das System zu benutzen. Eine Wachsamkeit ist vor Betätigung der Return-Taste jedoch immer angebracht...
Einige wichtige Befehle, die sich als erstes nachzuschlagen lohnen
Diese Befehle stellen zahlreichste Optionen zur Verfügung, welche man am besten in den man pages nachsieht. Dazu gehören so mächtige Optionen wie rekursive Anwendung (zB. Kopieren ganzer Unterverzeichnisse - jedoch auch Löschen ganzer Dateibäume mit allen Dateien...). Daneben gibt es Sicherheitsoptionen, welche es ermöglichen, eine Sicherheitsfrage aufzurufen. Wir werden weiter unten noch sehen, wie solche Sicherheitsoptionen mittels alias direkt standardmässig "aktiviert" werden können.
(4.2) Von offenen und versteckten Dingen
Neben normal sichtbaren Dateien gibt es auch versteckte Dateien. Diese haben meistens einen Bezug zum System, so dass Manipulationen erst recht sorgfältig vorgenommen werden müssen (gewisse Dinge kann man nicht oft genug sagen
). Versteckte Dateien haben einen Punkt (.) am Anfang des Namens. Schauen wir uns mal die versteckten Dateien unseres Benutzerverzeichnisses an.
$ cd ~
$ ls -lA
Wir sehen eine neue Option -A für ls. Dabei gilt, dass ls -l -A gleichwertig zu ls -lA ist.
Als Übung empfehle ich mal mittels man nachzuschauen, was der Unterschied zwischen ls -la und ls -lA ist.
Daneben können wir uns ja mal anschauen, was wir so im Abfalleimer haben:
$ ls -l ~/.Trash
(hoffentlich gut aufgeräumt...)
(4.3) Abkürzungen durch den Wald
Bis jetzt haben wir nur einzelne Beispiele von Shell-Befehlen angeschaut. Allgemein ist ein Befehl folgendermassen aufgebaut
$ Programm [-Optionen] [-evtl.andereOptionen] [Parameter] [evtl.andereParameter]
Beispiel - Vorbereitung:
$ cd ~
$ mkdir tutorial_test
$ touch test.txt
$ cp -i test.txt tutorial_test/test_april07.txt
Beispiel:
$ cp -i test.txt tutorial_test/test_april07.txt
Erklärung: Wir wechseln in unser Benutzerverzeichnis. Wir erstellen ein Verzeichnis tutorial_test. Dann generieren wir eine Datei test.txt (bzw. aktualisieren das letzte Lesedatum, wenn sie bereits existieren sollte). Diese Datei test.txt wird dann nach tutorial_test/test_april07.txt kopiert. Wenn die Zieldatei bereits bestehen sollte, wird aufgrund der Option -i wird erst gefragt, bevor die Zieldatei überschrieben wird. Wir werden diese Sicherheitsoption noch häufiger nutzen...
Daneben sehen wir, dass wir jetzt zweimal denselben Befehl hintereinander eingegeben haben. Das müsste sicher auch einfacher gehen... Richtig: Nun kommen einige der Vorteile der Shell zum tragen. Die Shell merkt sich die letzten Befehle.
Wenn wir die Pfeiltaste nach oben benutzen, wird jeweils der letzte Befehl vorgegeben, der direkt ausgeführt oder auch zuerst modifiziert werden kann. Dies kann mehrfach wiederholt werden, so dass wir rasch einen der letzten Befehle erneut ausführen können.
Wir können auch die ganze Liste ansehen:
$ history
Wir sehen eine durchnummerierte Liste mit allen vorgängigen Befehlen. Selbstverständlich haben diese Nummern ebenso eine Bedeutung
Nehmen wir die Nummer des obenstehenden Befehls mit cp. Wir können ihn auch ausführen, indem wir einfach dessen Nummer benutzen. Wenn wir annehmen, dass er Nr 12 wäre, so geben wir ein
$ !12
That's it! Das ist schon recht praktisch, nicht wahr.
Nur so aus Interesse: Wo speichert bash seine History? Schauen wir sie uns mal an.
$ less ~/.bash_history
Es ist also eine einfache versteckte Datei in unserem persönlichen Verzeichnis.
Weitere Editierbefehle schauen wir uns später an: Kapitel 7, Teil 3).
Link: Fortsetzung Teil 2
Wie ich in der Liste gesehen habe, wurde noch ein Tutorial zu Terminal gesucht...
(0) Einleitung
Für den Alltag eines üblichen Mac-Users braucht es das Programm Terminal eigentlich nicht. Da geniesst man die aufgeräumte Benutzeroberfläche. Ein direkter Zugriff auf den UNIX-Unterbau des Mac OS X – Darwin – kann in verschiedenen Fragestellungen nützlich sein (Benutzung von Compilern ohne Integration ins IDE, Netzwerkaufgaben, Benutzung von Spezialprogrammen, Definition von Skripten / Cron-Jobs,...). Da sehr viele Web-Server übrigens Linux-Server sind (LAMP), helfen diese Kenntnisse gleichzeitig auch, einen solchen Web-Server besser zu verstehen.
Dieses Tutorial richtet sich in erster Linie an Mac-User, welche noch keinen Kontakt mit Terminal hatten (es ist bewusst sehr einfach gehalten und erklärt einige Details bewusst noch nicht). Aus Platzgründen wird das Tutorial auf verschiedene Posts verteilt.
Wer übrigens bereits Kontakt mit einer Linux- oder einer UNIX-Distribution hatte, kann dieses Tutorial wohl getrost überspringen. Daneben empfiehlt sich bei ernsthafter weiterer Benutzung zumindestens ein kleines Buch über UNIX.
Selbstverständlich ist dieses Tutorial erweiterungsfähig. So bin ich froh um konstruktive Kritik (Fehlermeldungen / Erweiterungsvorschläge).
Viel Erfolg!
psc
Inhalt
Teil 1
(1) Das Programm
(2) Unix als System
(3) man
(4) Einige Befehle
Teil 2
(5) I/O-Redirection / Pipes und Wildcards / Regular Expressions
(6) Editoren vi/vim, Emacs und nano
(7) "Pimp my Terminal"
Teil 3
(7) "Pimp my Terminal" (Fortsetzung)
(8) User / Admin / Superuser
Teil 4
(8) User / Admin / Superuser (Fortsetzung)
(9) Wie komme ich zu UNIX-Programmen?
Teil 5
(10) Einige Unterschiede zwischen Darwin und anderen UNICES
(11) Weitere Informationen / Referenzen / Links
Dank
Einige spezielle Zeichen
Im Verlauf dieses Tutorials werden einige spezielle Zeichen notwendig werden: ~ # [ ] { } / | \ < >
Wer diese noch nicht benutzt hat, kann sie am einfachsten hier nachschlagen:
Apfel --> Systemeinstellungen --> Landeseinstellungen --> Tastaturübersicht
(1) Das Programm
Das Einfachste zuerst: Das Programm Terminal findet sich im Verzeichnis
/Programme/Dienstprogramme
Damit wird ab Panther (10.3) in einem neuen Fenster standardmässig bash angezeigt. bash ist kurz gesagt ein Interpreter, welcher die eingegebenen Kommandos ans System weitergibt. Diese Form der Benutzerumgebung wird auch Shell genannt (siehe bash / Shell). So arbeitete man früher mit allen Computern bevor die heute üblichen grafischen Benutzeroberflächen Standard wurden.Eine Shell erlaubt neben direkten Benutzereingaben auch das Ausführen von Skripten (Unix war ursprünglich spezialisiert darauf, möglichst viele Funktionen mit kompakten Programmen zu ermöglichen, welche mittels solcher Skripte verbunden waren) sowie eine gewisse Editierbarkeit der Befehle.
So sieht bash beim Start aus. Eine freundliche Begrüssung durch Darwin:
Last login: Fri Apr 6 16:42:04 on console
Welcome to Darwin!
MacXYZ:~ Benutzername$
Die unterste Zeile ist der sogenannte Prompt, hinter welchem die Befehle eingegeben werden. MacXYZ ist der Name des Computers. Dann folgt das aktuelle Verzeichnis. Dabei muss man wissen, dass die Tilde ~ ein Verweis auf das eigene Benutzerverzeichnis ist. Standardmässig beginnt bash im Benutzerverzeichnis. Dahinter folgt der Benutzername. Das Dollarzeichen $ dahinter zeigt, dass bash im Benutzermodus betrieben wird, in dem einige Befehle nicht möglich sind. Ein Gartenzaun # würde zeigen, dass man sich als Superuser (root) angemeldet hat mit vollem Zugriff (siehe unten)...
Ich benutze diese Zeichen in diesem Tutorial auch, um den Prompt am Anfang verkürzt zu symbolisieren.
Goldene Regel schrieb:Es ist wichtig, dass Du in der Shell nur Befehle ausführst, von denen Du weisst, was sie machen. Benutze also kein Programm und keine Option, wenn Dir nicht klar ist, was passiert, wenn Du dann auf RETURN drückst!
Geben wir einen ersten Befehl ein (darauf hast Du ja sicher gewartet

Als erstes benutzen wir ein Programm, das uns eine Auflistung des Verzeichnisses gibt (ls = list directory contents). Gib mal ls ein (also LS kleingeschreiben) und betätige den Zeilenvorschub.
Gratulation! Damit siehst Du eine Auflistung der Verzeichnisse und Dateien des aktuellen Verzeichnisses ~ (Dein persönliches Benutzerverzeichnis). Unten zeigt sich ein erneuter Prompt für den nächsten Befehl. Erklärungen folgen weiter unten im Tutorial
Die Shell wird mit dem Befehl exit beendet.
(2) Unix als System
Die Benutzung des Terminals setzt die Kenntnis einiger grundsätzlicher Elemente eines UNIX-Systems voraus. Es ist extrem logisch aufgebaut (das Design gefällt mir immer wieder).
UNIX (bzw. initial UNICS) wurde als Multiuser-System konzipiert (sehr interessant: UNIX, Geschichte). Zumindest gerüchtehalber wurde es initial nur entworfen, um ein bestimmtes Spiel (Space Travel) auch auf einem anderen Computern betreiben zu können. Daneben ist die Geschichte von UNIX nur schon durch dessen Hauptautoren eng mit der Entwicklung der Programmiersprache C verknüpft.
(2.1) Rechte in Unix
Ein Multiuser-System setzt eine strikte Rechteverwaltung voraus. Rechte werden für jede Datei vergeben bezüglich
- lesen (R für read)
- schreiben (W für write)
- ausführen (X für execute)
Diese Rechte werden separat angegeben für
- Benutzer (sozusagen der Besitzer der Datei)
- Gruppe (Listen aus verschiedenen Benutzern)
- Alle
So kann beispielsweise definiert werden, dass nur der Besitzer eine Datei lesen und schreiben darf, eine definierte Benutzergruppe die Datei lesen kann, jedoch andere Computerbenutzer die Datei nicht einmal lesen dürfen.
Spezielles | Benutzer-Flags (rwx) | Gruppen-Flags (rwx) | Alle-Benutzer-Flags (rwx)
Beispiel:
drwx------ 5 User User - 170 Jul 3 2006 Music
Klar ein Verzeichnis (d am Anfang), der Benutzer ‚User’ darf das Verzeichnis sehen, darf schreiben und darf es öffnen (Das Ausführen eines Verzeichnisses (x) bedeutet es zu öffnen). Diese Rechte werden allen anderen Benutzern des Computers verweigert.
-rw-r----- 1 User GruppeA - 557 Jul 27 2006 beispiel.txt
Die Datei beispiel.txt darf vom Benutzer gelesen und beschrieben werden. Benutzer, die Miglieder der Gruppe GruppeA sind, dürfen die Datei lesen. Andere Benutzer des Computers dürfen die Datei nicht einmal lesen. Die Datei hat keine Berechtigung ausgeführt zu werden. Das ist gut so: Die Datei ist ja auch kein Programm.
Probier es selbst mal aus. Benutze mal folgendes Kommando
$ ls –l
Info: Der Befehl ls steht für ‚list directory content’. Die Buchstabenkürzel hinter dem Gedankenstrich sind Optionen (werden weiter unten erklärt).
Resultat: Du siehst die Rechteverteilung aller Dokumente Deines Verzeichnisses.
Ergänzend zu diesen klassischen POSIX-konformen Dateirechten erlaubt Mac OSX ab 10.4 (Tiger) auch eine genauere Rechteverteilung mittels Access Control Lists (Granularität, siehe Kapitel 10)
(2.2) User / Admin / Superuser
UNIX basiert auf einem hierarchischen Rechte-System, in dem definiert ist, was ein bestimmter User machen darf. Grundsätzlich wird in UNIX-Systemen zwischen einem Superuser (meist ‚root’ genannt) und gewöhnlichen Benutzern mit klar eingeschränkten Rechten unterschieden. Der Superuser hat alle Rechte auf dem System. Damit besteht jedoch auch das Risiko, dass sich Fehler negativ auf das ganze System auswirken.
Oftmals legt man neben dem eigentlichen Superuser root weitere User mit Administrationsrechten an, welche gezielt auf einzelne Elemente des Systems Einfluss nehmen können (heutzutage übliche "Rollenbasierte Administration", die auch in Darwin konsequent umgesetzt ist).
Nebenbei: Darwin ist in dieser Hinsicht speziell, dass der in Benutzereinstellungen mit Administrator-Rechten ausgestattete Benutzer dieser Zwischenform entspricht und nicht etwa 'root'. Wenn man sich unbedingt als root einloggen können möchte, dann muss man das im Netinfo Manager speziell aktivieren. Dies ist jedoch nichts für uns Einsteiger

Das oben erwähnte Benutzerverzeichnis ~ des aktuellen Benutzers ist übrigens im Verzeichnis /Users/Benutzername/ abgelegt. Wir gehen das gleich mal anschauen...
Dazu kurz eine Info über einige definierte Verzeichnisse:
/ Basisverzeichnis des Systems (root)
~ Benutzerverzeichnis des aktuellen Benutzers
~name Benutzerverzeichnis des Users name
. aktuelles Verzeichnis
.. Verzeichnis oberhalb des aktuellen in der Verzeichnishierarchie
Wichtig: Zwischen dem Basisverzeichnis / (root) und dem Superuser (ebenso meist root genannt; hat UID 0) muss klar unterschieden werden.
Die Daten sind ausserordentlich gut geordnet. Anbei eine kurze Zusammenstellung der typischen Verzeichnisse eines UNIX bzw. Linux Systems. Mac OS unterscheidet sich in einigen Punkten jedoch grundsätzlich (siehe Kapitel 10).
Relative und absolute Verzeichnisbezeichnungen
- Ein absolute Verzeichnisbezeichnung definiert sich immer ab dem
Basisverzeichnis / . Beispiele:
/Users/psc/.Trash
/Users/psc/Testdateien/anderes/dummy.txt - Eine relative Verzeichnisbezeichnung definiert sich immer ab dem aktuellen Verzeichnis. Daran muss insbesondere gedacht werden, wenn ein Befehl wiederholt wird, wenn zwischenzeitlich das Verzeichnis gewechselt wurde. Beispiele:
psc/.Trash
../dummy.txt
Also: Wir sind ja jetzt immer noch in unserem heimatlichen Benutzerverzeichnis ~, nicht wahr?
Gehen wir also mal ein Verzeichnis nach oben:
$ cd ..
Wir sehen am Prompt, dass das Verzeichnis gewechselt hat. Es ist jetzt /Users
MacXYZ:/Users Benutzername$
Weil es so schön war, nochmals
$ cd ..
Jetzt sind wir im Baisisverzeichnis, also in root. Das aktuelle Verzeichnis wird im Prompt auch mit / angegeben.
MacXYZ:/ Benutzername$
Jetzt schauen wir mal, was es da so hat:
$ ls –l (die Option ist ein kleines L)
Wir sehen vor allem eine Liste von Verzeichnissen (d am Anfang der Flags), die verschiedenen Benutzern gehören und verschiedenen Gruppen den Zugriff ermöglichen. Wir sehen auch das Verzeichnis Users, in dem letztlich alle Benutzerverzeichniss sind.
Gehen wir nochmals dorthin zurück. Wir benutzen
$ cd Users/Benutzername
Einfacher geht es auch mit folgendem Befehl. Er führt immer zurück ins eigene User-Verzeichnis:
$ cd ~
Mit cd und ls können wir also das ganze System mal ausloten und uns eine Information holen, was wo so gespeichert ist. Der Finder ist da natürlich wesentlich schneller und attraktiver. Jedoch sehen wir dort nie direkt so viele Details wie im Terminal.
(2.3) Präzision im System
Im Gegensatz zu den Shells anderer Betriebssysteme ist UNIX nicht tolerant. Da kommt es auf jedes Leerzeichen, sowie auf Gross- und Kleinschreibung an. Die Shell nimmt einen absolut beim Wort und tut, was man sie beauftragte zu tun. Das muss nicht zwingend das sein, was man selbst beabsichtigte zu tun. Diese verlangte Disziplin ist zu Beginn mühsam; hilft dann später, dass man sich wirklich klar sein kann, was passiert.
Ach ja: Im Finder gibt es die Möglichkeiten auch Dateien mit Leerzeichen im Dateinamen zu haben. Pfade zu solchen Dateien müssen mit Anführungs- und Schlussstrichen gekennzeichnet werden. Sonst werden fälschlicherweise mehrere Parameter angenommen:
$ less "~/irgend ein Verzeichnis/noch ein Verzeichnis/irgend eine Datei.txt"
(3) man
Als nächsten Befehl lege ich man (kurz für Manual = Bedienungsanleitung) ans Herz. Dieser ist einer der hilfreichsten Befehle, der zu jedem Befehl eine kurze Bedienungsanleitung enthält. Wichtig ist insbesondere Erklärung der Optionen (jeweils hinter dem Gedankenstrich angeführt) und anderer Parameter (zB. die bereits benutzten Verzeichnisnamen).
Schauen wir mal, was ls so für Optionen bietet:
$ man ls
Eine ganze Menge, nicht wahr

Das ganze ist (leider) in Englisch gehalten. Gerade für Arbeiten auf Systemebene oder zum Schreiben von Programmen lohnt es sich, Englisch zu lernen (selbstverständlich gibt es auch andere Gründe

Anbei ein Link mit einem Online-man mit deutschen Texten (leider unvollständig): man in Deutsch
man basiert im aktuellen OSX auf dem Programm less (früher more), welches man allgemein zum Anschauen von Textdateien benutzen kann. Entsprechend können alle Optionen benutzt werden. Nur die wichtigsten kurz zusammengefasst:
h --> Hilfeseite (wird dann wieder mit q verlassen)
q --> Programm beenden
Pfeiltasten --> zeilenweise nach oben oder unten
w --> ganze Seite nach oben
z oder Leertaste --> Ganze Seite nach unten
g --> an den Anfang des Dokuments
G --> an den Schluss des Dokuments
/test --> Suche nach dem Wort test (man kann auch reguläre Ausdrücke verwenden)
n --> nächste Fundstelle vorwärts
N --> vorgängige Fundstelle rückwärts
Wir sehen: UNIX-Programme bieten ausserordentlich viele Optionen...q --> Programm beenden
Pfeiltasten --> zeilenweise nach oben oder unten
w --> ganze Seite nach oben
z oder Leertaste --> Ganze Seite nach unten
g --> an den Anfang des Dokuments
G --> an den Schluss des Dokuments
/test --> Suche nach dem Wort test (man kann auch reguläre Ausdrücke verwenden)
n --> nächste Fundstelle vorwärts
N --> vorgängige Fundstelle rückwärts
Dabei lege ich insbesondere die Suchfunktion ans Herz, da man so rasch die Bedeutung der Optionen anzeigen lassen kann. Beispiel:
$ man ls
Eingabe: /-l
n bzw. N nach Bedarf
n bzw. N nach Bedarf
Auch cd und man selbst haben einiges zu bieten:
$ man cd
bzw.
$man man
Auch bash hat selbstverständlich seine eigene manpage:
$man bash
Eine kurze Hilfe bieten auch oft die Programme selbst. Einige haben eine Option -h bzw. --h, mit denen sie die wichtigsten Parameter angeben. Den Schlüssel zum Erfolg bringt jedoch meist man.
(4) Einige Befehle
Mit der Shell kann man sich selbstverständlich nicht nur das Verzeichnis anzeigen lassen. Der Schlüssel zum Erfolg ist die genaue Kenntnis der vorhandenen Befehle (teilweise Elemente der Shell, teilweise Programme, teilweise Scripts). Zu Beginn ist man erstaunt, wie viele Probleme in UNIX nicht durch Programme, sondern durch Scripts gelöst werden, welche auf basalste Programme zurückgreifen.
Um nicht einfach eine Liste wiederholen zu müssen, verweise ich auf eine externe Quelle. Wichtig ist, dass ein Befehl genau verstanden wird, bevor er eingegeben wird. Bereits als User kann man schon einige Dinge löschen, als Admin/Superuser kann man mit wenigen Tasten das System unbrauchbar machen. So lohnt es sich, einen Befehl gerade bei kritischen Befehlen zu prüfen, bevor man ihn mittels der Eingabetaste zur Ausführung bringt...
Diese Informationen können durch das integrierte Hilfesystem leicht erhalten werden. Ein man <irgendeinBefehl> lohnt sich wohl vor jeder ersten Anwendung. Ich empfehle deshalb, sich nun auch etwas Zeit zu nehmen und sich die wichtigen Befehle zB. aus dieser Liste in man oder online anzusehen. (Nebenbei: Es hilft zu wissen, dass Darwin ein Derivat des BSD-UNIX ist mit POSIX-Kompatibilität)
Da sich nur wenige Leute schon zu Beginn alle Optionen der Befehle locker merken können

(4.1) Wisse, was Du tust!
Aufgrund der sehr kompakt gehaltenen Befehle können teilweise bereits einzelne falsch eingegebene Buchstaben aus einem problemlosen Kommando ein Problem grösserer Tragweite produzieren. Dabei gilt es insbesondere auch zu beachten, dass UNIX strikt zwischen Gross- und Kleinschreibung unterscheidet. Dies ist insbesondere wichtig, da es einige Buchstaben gibt, die als unterschiedliche Optionen verwendet werden, je nachdem ob gross- oder kleingeschrieben.
Dies soll nicht Angst machen, das System zu benutzen. Eine Wachsamkeit ist vor Betätigung der Return-Taste jedoch immer angebracht...
Einige wichtige Befehle, die sich als erstes nachzuschlagen lohnen
- Dateien: ls (list, Dateien listen), cp (copy, kopieren), mv (move, verschieben), rm (remove, löschen), touch (Datei berühren), open (Mac spezifisch)
- Verzeichnisse: pwd (aktuelles Verzeichnis anzeigen), cd (change dir, Verzeichnis wechseln), mkdir (make dir, neues Verzeichnis erstellen), rmdir (remove dir, leeres Verzeichnis löschen).
Diese Befehle stellen zahlreichste Optionen zur Verfügung, welche man am besten in den man pages nachsieht. Dazu gehören so mächtige Optionen wie rekursive Anwendung (zB. Kopieren ganzer Unterverzeichnisse - jedoch auch Löschen ganzer Dateibäume mit allen Dateien...). Daneben gibt es Sicherheitsoptionen, welche es ermöglichen, eine Sicherheitsfrage aufzurufen. Wir werden weiter unten noch sehen, wie solche Sicherheitsoptionen mittels alias direkt standardmässig "aktiviert" werden können.
(4.2) Von offenen und versteckten Dingen
Neben normal sichtbaren Dateien gibt es auch versteckte Dateien. Diese haben meistens einen Bezug zum System, so dass Manipulationen erst recht sorgfältig vorgenommen werden müssen (gewisse Dinge kann man nicht oft genug sagen

$ cd ~
$ ls -lA
Wir sehen eine neue Option -A für ls. Dabei gilt, dass ls -l -A gleichwertig zu ls -lA ist.
Als Übung empfehle ich mal mittels man nachzuschauen, was der Unterschied zwischen ls -la und ls -lA ist.
Daneben können wir uns ja mal anschauen, was wir so im Abfalleimer haben:
$ ls -l ~/.Trash
(hoffentlich gut aufgeräumt...)
(4.3) Abkürzungen durch den Wald
Bis jetzt haben wir nur einzelne Beispiele von Shell-Befehlen angeschaut. Allgemein ist ein Befehl folgendermassen aufgebaut
$ Programm [-Optionen] [-evtl.andereOptionen] [Parameter] [evtl.andereParameter]
Beispiel - Vorbereitung:
$ cd ~
$ mkdir tutorial_test
$ touch test.txt
$ cp -i test.txt tutorial_test/test_april07.txt
Beispiel:
$ cp -i test.txt tutorial_test/test_april07.txt
Erklärung: Wir wechseln in unser Benutzerverzeichnis. Wir erstellen ein Verzeichnis tutorial_test. Dann generieren wir eine Datei test.txt (bzw. aktualisieren das letzte Lesedatum, wenn sie bereits existieren sollte). Diese Datei test.txt wird dann nach tutorial_test/test_april07.txt kopiert. Wenn die Zieldatei bereits bestehen sollte, wird aufgrund der Option -i wird erst gefragt, bevor die Zieldatei überschrieben wird. Wir werden diese Sicherheitsoption noch häufiger nutzen...
Daneben sehen wir, dass wir jetzt zweimal denselben Befehl hintereinander eingegeben haben. Das müsste sicher auch einfacher gehen... Richtig: Nun kommen einige der Vorteile der Shell zum tragen. Die Shell merkt sich die letzten Befehle.
Wenn wir die Pfeiltaste nach oben benutzen, wird jeweils der letzte Befehl vorgegeben, der direkt ausgeführt oder auch zuerst modifiziert werden kann. Dies kann mehrfach wiederholt werden, so dass wir rasch einen der letzten Befehle erneut ausführen können.
Wir können auch die ganze Liste ansehen:
$ history
Wir sehen eine durchnummerierte Liste mit allen vorgängigen Befehlen. Selbstverständlich haben diese Nummern ebenso eine Bedeutung

Nehmen wir die Nummer des obenstehenden Befehls mit cp. Wir können ihn auch ausführen, indem wir einfach dessen Nummer benutzen. Wenn wir annehmen, dass er Nr 12 wäre, so geben wir ein
$ !12
That's it! Das ist schon recht praktisch, nicht wahr.
Nur so aus Interesse: Wo speichert bash seine History? Schauen wir sie uns mal an.
$ less ~/.bash_history
Es ist also eine einfache versteckte Datei in unserem persönlichen Verzeichnis.
Weitere Editierbefehle schauen wir uns später an: Kapitel 7, Teil 3).
Link: Fortsetzung Teil 2
Zuletzt bearbeitet von einem Moderator: