Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Die wichtigsten Unix-Befehle

Version vom 25. Januar 2005, 20:55 Uhr von Mutax (Diskussion) (Beispiel ergänzt)

Die Unix Shell

Was ist das überhaupt

Prinzipiell kann man mit einem Betriebsystem auf verschiedenen Ebenen arbeiten (um z.B. Dateien zu erzeugen, verschieben oder löschen).

  • Als Benutzer einer graphischen Oberfläche indem man Programme wie den OS X Finder, Windows Explorer oder Gnome Nautilus verwendet.
  • Als Programmierer, indem man Funktionen des Betriebsystems aufruft.
  • Als Shell-Benutzer, der kryptische Befehle in eine Text-Eingabe schreibt.

Und genau um diesen letzten Weg soll es hier gehen.

Im Prinzip gibt es genau zwei Gründe, wieso man eine Shell verwenden möchte:

  • Shell-Kommandos sind in der Regel verdammt viel fixer als es mit einer GUI zu machen (gilt vermutlich nur hier an der Uni)
  • Wenn man sich damit auskennt, kann man alle paar Wochen mal jemanden, der sich nicht damit auskennt, extrem verblüffen. Da man ein zwei Zeilen langes kryptischer Kommando eingibt und damit etwas bewirkt, wofür der andere mindestens eine Viertelstunde gebraucht hätte.

Beispiel:

Dieser Schnipsel ersetzt in allen html-Dateien im aktuellen Verzeichnis eine veraltete Emailadresse:

    for i in *.html; do vi -c ':1,$s/alt@meinedomain.de/webmaster@meinedomain.de/g' -c ':wq' ${i}; done 

...oder wenn es auch die in allen Unterverzeichnissen mit erwischen soll:

    for i in `find . -name "*.html" -type f`; do \ 
            vi -c ':1,$s/alt@meinedomain.de/webmaster@meinedomain.de/g' -c ':wq' ${i} ; \ 
    done 

(wobei auch das zweite Beispiel eigentlich ein Einzeiler ist, und nur wegen der 'Wikibreite' und zu r besseren lesbarkeit umgebrochen wurde.)

Prinzip

Die Idee der Shell ist, dass man eine relativ einfache (und leider aus vielen Abkürzungen bestehende) Programmiersprache hat, die man auf einem Interpreter (der Shell) direkt eingeben kann - also genau das richtige Spielzeug für Informatiker. :)

Logischerweise kann man die auch in eine Datei schreiben und dann am Stück ausführen lassen - sehr praktisch.

Wenn man einen Befehl mit einem kaufmännischen und "&" abschließt (also befehl &, das Lehrzeichen ist wichtig) so wird er im Hintergrund ausgeführt und man kann in der Shell solange etwas anderes tun. Hat man das "&" vergessen, kann man einen laufenden Befehl durch den Tastenkürzel <controll>-z anhalten und mit dem Kommando bg den gleichen Effekt erzielen wie mit "&" am Ende.

Führt man ein Kommando im Vordergrund in der Shell aus und schließt sie, wird das laufende Programm mit der Shell beendet.

Ein Befehl fängt immer mit einem Kommando an und hat danach diverse Argumente.

Argumente gibt es in vielen Variationen:

  • Kurzform: -a -d -f -r etc. Das Prinzip heißt, hat das Argument (manchmal auch Schalter genannt) nur einen Buchstaben, kommt ein Minus davor.

Manchmal kann man mehrere dieser Argumente zu einem zusammenfassen: -adfr. Vorsicht, das geht nicht immer - andersrum aber schon.

  • Langform: --all --directory --force --recursive etc. Ist das Argument ein Wort, wird es normalerweise mit zwei minussen davor geschrieben. Zusammenfassen kann man diese Argumente nicht.
  • Doppel: Manchmal gibt es Argumente die aus einem Schalter und einem Wert bestehen: --directory /home/pub/lib, -d /home/pub/lib, --force YES, -f YES, --number 23", etc...

Da offenbar alle Unix-Programmmierer Französisch-Fans waren gibt es natürlich reichlich Ausnahmen von diesen Regeln. :(

Aber immerhin gibt es diese Regeln überhaupt.

Was sieht man

Man hat immer zuerst einen Prompt und der sieht in etwa so aus:

conde mhaecker 11 (~):

  1. Vorne steht immer der name des Rechners auf dem man gerade eingelogt ist. In der Uni kann das zum Beispiel "conde" (schnell), "fiesta" (lahm) und noch einige andere sein. (Welcher Rechner schnell ist hängt natürlich davon ab, wie viele hundert Studenten dort gerade versuchen KDE zu benutzen).
  2. Danach kommt der Benutzername, desjenigen dem die Shell "gehört", das heißt in wessen Namen die eingegebenen Kommandos ausgeführt werden ("mhaecker" ist mein Benutzername)
  3. die Zahl danach sagt Euch wie viele Kommandos Ihr schon in dieser Shell abgesetzt habt. (Meiner Meinung nach unnütz...)
  4. Danach in Klammern steht das Verzeichnis in dem Ihr gerade seid "~" steht immer für euer Heimatverzeichnis

Wichtigste Kommandos

Die jetzt folgenden Kommandos bitte am besten gleich ausprobieren. Merken kann man sie sich sowieso nicht, aber man bekommt ein Gefühl dafür was möglich ist und kann dann hier nachschlagen.

Befehl Erklärung Praktische Argumente
ls list (vermute ich). Zeigt den inhalt des derzeitigen Verzeichnisses an -a alle Dateien (auch "versteckte", die mit "." anfangen), -l Langes Format mit Anzeige vieler nützlicher Informationen zu den Dateien.
cd change directory "cd" bringt einen immer ins Heimverzeichnis zurück. "cd .." ins darüber liegende und "cd einVerzeichnisName" in genau das angegebene Verzeichnis
mv move, umbenennen und bewegen von Dokumenten / Ordnern. Man kann mehrere Dateien auf einmal bewegen. mv alterDateiname neuerDateiname
ssh (secure shell), dient dazu sich über eine Verschlüsselte Verbindung auf einem anderen Rechner anzumelden. -X schaltet X11 forwarding ein, wichtig wenn man graphische Programme benutzen will. benutzername@rechnerOderIPAdresse damit gibt man an auf welchen Rechner man will.
scp (secure copy) damit kann man Dateien zwischen verschiedenen Rechnern hin und her kopieren. Z.B. von Zuhause in die Uni, für eine Abgabe. Man benutzt es wie mv also scp quelldatei zieldatei. Liegt eine der Dateien auf einem anderen Rechner, schreibt man wie bei ssh einfach den Benutzernamen und Rechner davor scp quelldatei benutzername@rechnernameOderIPAdresse:zieldatei. Für quasi alle Betriebsysteme gibt es graphische Programme für diesen Zweck. Fugu oder Cyberduck (Mac), WinSCP (win), Nautilus oder Konqueror (Linux)
less damit kann man komfortabel einfach Dateien anzeigen less eineDatei zeigt die an. Während der anzeige kann man sich mit "h" eine ausführliche Hilfe anzeigen lassen. Wichtigste Kommandos: " " (space) für nächste Seite , "b" (backwards) für vorherige Seite, ansonsten Pfeiltasten. "/muster" sucht nach "muster" und man kann mit "n" zum nächsten Fundort springen. "f" geht ganz ans ende und "F" geht ganz ans ende und zeigt neue Zeilen wenn diese dazukommen sollten
grep Sucht text in mehrere Dateien grep suchmusterohnelehrzeichen dateieins dateizwei dateidrei...
man show manual man grep, man man, man less... Man kann damit eine Erklärung zu den verschiedenen Kommandos anzeigen. Nicht immer besonders hilfreich, aber dafür immer verfügbar.
gzip /gunzip (gnu zip) packt oder entpackt eine einzelne Datei gunzip gepackteDatei.gz
tar tape archiver ursprünglich für backups auf Bandlaufwerke verwendet, inzwischen der standard um viele Dateien in eine Datei zu packen - z.B. um sie dann mit gzip zu komprimieren. Man erzeugt ein gleich komprimiertes Archiv mit tar cfz komprimierteDatei.tar.gz komprimierendeDateien und entpackt es mit tar xfz komprimierteDatei.tar.gz wieder. ist das Archiv nicht komprimiert lässt man das "z" weg.
pico ein minimaler text-editor. Sein großer Vorteil ist, das er unten am Bildschirmrand immer ein Menü anzeigt. "^" steht dabei immer für <controll> <controll>-x um den Editor zu beenden
emacs Ein eigenes Betriebsystem (in Lisp geschrieben). Nebenbei noch ein brauchbarer Text-Editor. Wird mit dem Fingerbrecher <controll>-x-c (x und c nacheinander, Controlltaste dabei gedrückt halten) beendet.
Vi oder Vim Vi ist der Unix-Standard-Texteditor und bei jedem Unix-artigen-System (wie z.B. Solaris, Linux, AIX, Irix, HP-UX, BSD) vorhanden, daher sollte man zumindest die wichtigsten Befehle beherrschen. Vim (Vi IMprooved) ist der beliebteste und mächtigste Vi-Clone und der Editor der Wahl für Leute, die keinen Lisp-Editor brauchen um ASCII-Dateien zu editieren. Mit <escape> wechselt man in den Kommandomodus und mit i aus dem Kommandomodus in den insert Modus. Die wichtigsten Befehle im Kommandomodus: ":w" zum Speichern, ":e <dateiname>" zum Öffnen und Editieren einer Datei und ":q" zum Beenden. Mit "/<Muster>" kann man nach regulären Ausdrücken im Text suchen.
chmod change mode Ändert die Rechte die an einer Datei hängen. Also wer sie lesen und schreiben darf und wer nicht. Wichtig wenn man mit anderen Leuten zusammenarbeiten will/muss. Das man es braucht merkt man wenn man Fehlermeldungen wie "Permission Denied" bekommt. Optionen werde ich hier nicht erklären - aber "man chmod" hilft weiter.
grp group administrativia damit könnt ihr euch in unix-gruppen eintragen. Wichtig wenn ihr in Gruppen Hausaufgaben erledigen wollt. Der Trick ist, das man den Zugriff auf eine Datei nur auf Gruppenmitglieder einschränken kann - sie muss also nicht immer gleich für alle sichtbar sein. http://irb.cs.tu-berlin.de/leitfaden/arbeiten-in-gruppen.html

Wer sich seine shell-arbeitsumgebung weiter einrichten möchte, der kann sich selbst mit dem Kommando "alias" neue Befehl definieren. Damit die dann in jeder Shell zur verfügung stehen muss man sie in init-dateien eintragen. Was das ist und wie das geht kann man im offiziellen Handbuch oder bei Google nachlesen.

Unsere Programme

Noch ein Wichtiger Hinweis, viele interessante Programme, so wie Firefox und Eclipse werden von Studenten installiert und gewartet. Alle diese Programme findet Ihr im Verzeichnis "/home/pub/lib/". Es lohnt sich also ab und an einen Blick dorthin zu werfen.

Ausblick, links

Es lohnt sich zumindest, rudimentär über die Shell Bescheid zu wissen, gerade weil man an der Uni nicht daran vorbeikommt. Weiter Informationen findet Ihr in der Anleitung des Fachbereichs und überall sonst im Internet.

Es lohnt sich auch zumindest eine Shell-Script-Sprache zu beherschen. Ich bin allerdings der Meinung das man sich für diesen Zweck ruhig eine richtige Programmiersprache so wie Python oder Ruby ins mentale Boot holen sollte.