Unix für Dawinisten - Kapitel 3
3.   Elementare Unix-Befehle
3.1. Verzeichnis-Befehle
3.2. Datei-Befehle
3.3. Editieren
3.4. Aufräumen und Platzsparen
3.5. Kommunikation
3.6. Netz-Befehle
C.   Kommentarformular

3. Elementare Unix-Befehle

Das Betriebssystem Unix stellt eine große Palette an Befehlen bereit; die meisten dienen für den Umgang mit Verzeichnissen und Dateien, andere sind für die Kommunikation (email, netnews) oder Datentransfer (ftp, telnet) vorgesehen. Die allgemeine Syntax von Unix-Kommandos sieht folgendermaßen aus: Befehl [-Optionen] <Dateiname> Die < >-Klammern stehen dabei für notwendige Angaben, die nicht weggelassen werden dürfen; eckige []-Klammern umgeben optionale Parameter, die nicht unbedingt mitangegeben werden müssen. Wenn an einer Stelle verschiedene Eingabemöglichkeiten bestehen, sind sie mit einem senkrechten Strich getrennt (Beispiel: y|n - hier kann entweder ein y oder ein n angegeben werden).

Unix denkt mit: bei vielen Befehlen können Optionen und/oder Dateinamen weggelassen werden; in diesem Fall setzt Unix automatisch die normalerweise verwendeten Werte (Defaults) ein.

Bei allen Beispielen steht vorneweg das sog. prompt (auf Deutsch wundervoll: "Eingabeaufforderung") das normalerweise die Form "rechner:pfad>" hat (z.B. asterix:/home/obelix/dawin>). Um die Beispiele übersichtlicher zu halten, werde ich im folgenden das abgekürzte Prompt "asterix%" verwenden.

Wer ein Beispiel selbst ausprobieren möchte, darf das Prompt nicht mit eingeben, sondern nur das, was nach dem Prompt steht. Nachdem man eine Zeile eingetippt hat, schließt man sie mit der <RETURN-Taste> ab - erst dann fängt der Rechner mit ihrer Bearbeitung an.
- Beispiel:
asterix% who
Einzutippen wäre hier also "who" <RETURN-Taste>.

Außerdem ist zu beachten, daß Unix "case-sensitive" ist, Groß- und Kleinschreibung sind also nicht egal (z.B. "unix.doc" und "Unix.doc" sind zwei verschiedene Dateien).

Bevor ihr ein Beispielkommando eingebt, solltet ihr zunächst den Abschnitt zuende lesen, um den neuen Befehl auch in seiner Gesamtheit verstanden zu haben, bevor ihr z.B. versehentlich alle eure Dateien löscht ;).


3.1. Die Verzeichnis-Befehle

Wie das Filesystem von Unix verwaltet wird, wurde bereits oben beschrieben. Hier sollen die Kommandos vorgestellt werden, mit denen man sich im "Baum der Verzeichnisse" bewegen kann, und Informationen über die Dateien einholt.

Vorweg noch ein paar Worte zu den Dateinamen:
Eine Datei erhält üblicherweise einen zweiteiligen Namen: erst der eigentliche Name und, durch einen Punkt getrennt, eine Endung (Extension, Suffix), die über die Art der gespeicherten Daten Auskunft gibt.
Es gibt ungeschriebene Gesetze, welche Extensions üblicherweise für bestimmte Daten verwendet werden - mehr dazu im Kapitel 5.
Unix unterscheidet sich von den meisten anderen Betriebssystemen dadurch, daß die Dateinamen sehr lang sein dürfen (bis zu 256 Zeichen im Gegensatz zu 8 bei MS-DOS) und beliebig viele Extensions hintereinandergehängt werden dürfen (z.B. die Endung ".tar.Z" für komprimierte Archive). Einige Sonderzeichen sollten in Dateinamen nicht verwendet werden, weil sie für Unix festgelegte Bedeutungen haben:

  / \ * ? > < & | ( ) $ # " ' , ; { } 
Die Liste ist wahrscheinlich nicht vollständig, es empfiehlt sich also, generell keine Sonderzeichen in Filenamen zu verwenden. Leerzeichen dürfen nicht verwendet werden; das Minuszeichen darf nicht als erstes Zeichen im Dateinamen vorkommen, da es sonst von vielen Befehlen als Hinweis auf eine Option misdeutet wird.

Inhaltsverzeichnisse anschauen, der ls-Befehl
Mit ls (für "list") kann man sich die Dateien in einem Inhaltsverzeichnis anschauen.

- Syntax: ls [-alR] [pfad]
Wenn kein Pfad angegeben wird, zeigt ls den Inhalt des aktuellen Verzeichnisses an. Die Option "-a" zeigt zusätzlich noch "versteckte" Dateien an, mit "-l" bekommt man ausführliche Informationen, die Option "-R" (großes R!) steht für "rekursiv" - ls schaut hierbei automatisch auch in Unterverzeichnisse.
- Beispiel:
asterix% ls
News mbox unix.doc
Der ls-Befehl hat uns also die beiden Dateien "News" und "mbox" angezeigt, allerdings können wir so noch nichts genaueres über die Dateien erfahren; dafür gibt es nämlich die Option "-l", die uns zu jeder Datei detaillierte Informationen liefert.
- Beispiel:
asterix% ls -l
drwxr--r-- 1 ganslan u0dawin 512 Dec 15 11:03 News
-rw------- 1 ganslan u0dawin 15036 Dec 10 10:15 mbox
lrw-r--r-- 1 ganslan u0dawin 78121 Jun 15 10:30 unix.doc ->
/home/obelix/dawin/forusers/unix.doc

Von rechts nach links bekommen wir also folgende Informationen:
- Dateiname
- Uhrzeit und Datum der letzten Änderung
- Größe der Datei in Bytes
- Gruppe des Besitzers der Datei
- User-ID des Besitzers
- Zahl der "links" auf diese Datei
- Zugriffsrechte, Dateiform
Die ersten 5 Einträge sollten klar sein, aber was sind "links"? Ein Link bedeutet, daß eine Datei in mehreren Verzeichnissen stehen kann (also mehrere Kopfteile für einen Datenteil). D.h. die physikalisch nur einmal existierende Datei kann über Verbindungen (=Links) auch von anderen Inhaltsverzeichnissen aus angesprochen werden. Die Zugriffsrechte wurden bereits weiter oben beschrieben. Für jede Zugriffsberechtigung sind 3 Zeichen vergeben: die ersten 3 für den User selbst, die nächsten für seine Gruppe und die letzten 3 für die Welt. Der Eintrag "rwxr--r--" bedeutet also: Der User kann auf der Datei lesen, schreiben und ausführen, Gruppe und Welt können sie nur lesen, nicht aber schreiben oder ausführen.
Der allererste Buchstabe gibt den Dateityp an. Ein "d" steht dabei für Unterverzeichnisse (z.B. "News" ist eins), normale Dateien sind mit einem "-" bezeichnet. "Gelinkte" Dateien werden mit einem "l" bezeichnet und Gerätetreiber (devices) mit einem "c".

Außerdem gibt es noch versteckte Dateien, die mit einem "." im Dateinamen beginnen. Sie können mit der Option "-a" (für "all") sichtbar gemacht werden.

- Beispiel:
asterix% ls -a
.profile .newsrc News mbox unix.doc
Mit der Option "-R" für rekursiv zeigt ls automatisch auch den Inhalt von allen im angegebenen Verzeichnis liegenden Unterverzeichnissen an. D.h. wenn im aktuellen Verzeichnis noch das Directory "News" steht, und darin die Verzeichnisse "comp" und "alt", so wird ls den Inhalt von allen diesen Verzeichnissen nacheinander ausgeben.

Oft wird die Dateiliste (gerade bei Optionen wie "-lR") so lang, daß sie über den Bildschirm rollt, bevor man sie lesen kann. Hierfür kann man an das Ende des ls-Befehls die Ergänzung "| more" anhängen. (| ist der senkrechte Strich, meist links unten auf der "><"-Taste. Die Dateiliste wird dann seitenweise angezeigt (wie das genau funktioniert, wird im Kapitel 4.1. erklärt).

- Beispiel:
asterix% ls -alR | more

Das aktuelle Inhaltsverzeichnis verändern, der cd-Befehl.
Nach dem login befindet man sich in seinem Home-Verzeichnis, das die eigenen Daten enthält. Mit dem cd-Befehl kann man nun entweder den Verzeichnis-Baum hinauf/hinunterlaufen, oder direkt ein Verzeichnis anspringen, wenn man dessen Namen kennt. Um vom aktuellen Verzeichnis in ein Unterverzeichnis zu springen, muß man dessen Namen kennen.

- Syntax: cd <Name>
- Beispiel:
Im aktuellen Verzeichnis befindet sich das Unterverzeichnis "News".
asterix% cd News
/home/obelix/dawin/News
Jetzt ist mein aktuelles Verzeichnis "News". Wenn ich wieder in das übergeordnete Verzeichnis zurückgehen möchte, gebe ich ein:
asterix% cd ..
/home/obelix/dawin
Der Name ".." steht also immer für das übergeordnete "Eltern"-Verzeichnis (parent).

Wenn man ein Verzeichnis direkt anspringen will, das sich nicht im aktuellen Verzeichnis befindet, muß man seinen Pfad kennen.Der Weg zu einem Verzeichnis wird "Pfad" genannt und hat folgendes Format:
/Verzeichnis/Unterverzeichnis/Unter-Unterverzeichnis (etc...)
Jedes Verzeichnis wird also durch einen Slash (/) getrennt. Der erste Slash ganz links hat eine besondere Bedeutung: er steht für das Wurzelverzeichnis (root).
Ein anderes Sonderzeichen ist die Tilde (~): mit ihr kann man direkt in das Verzeichnis eines bestimmten Benutzers springen.

- Beispiel:
asterix% cd ~dawin
/home/obelix/dawin
Wenn man nach der Tilde direkt einen slash angibt, landet man automatisch in seinem eigenenen Home-Verzeichnis:
asterix% cd ~/
/home/obelix/dawin
Eine andere Möglichkeit, in sein Heimatverzeichnis zu kommen, ist bei cd einfach keinen Namen anzugeben (Notanker für Einsteiger ;-)
asterix% cd
/home/obelix/dawin

Das aktuelle Verzeichnis anzeigen, der pwd-Befehl
Mit pwd kann man sich den Pfad zum aktuellen Verzeichnis anzeigen lassen:

- Beispiel:
asterix% pwd
/home/obelix/dawin/News


3.2. Die Datei-Befehle

Nachdem nun klar ist, wie wir uns im Dateibaum bewegen und umschauen können, sollen nun einige Befehle erklärt werden, mit denen man die einzelnen Dateien betrachten und verändern kann.

Um eine bestimmte Datei anzusprechen, muß man ihren Namen kennen. Wenn man aber mehrere Dateien mit ähnlichen Namen bearbeiten will, muß man nicht den selben Befehl x-mal mit den einzelnen Dateinamen eingeben, denn es gibt Jokers und Wildcards.

-der Joker ("?") steht für ein beliebiges Zeichen in einem Dateinamen
- un?x: diese Schablone würde sowohl auf "unix", wie auf "unox" passen.
- die Wildcard ("*") steht für eine Folge von beliebigen Zeichen
- *.doc: Diese Schablone paßt auf alle Dateinamen, die mit ".doc" enden)
- *box*: Diese Schablone paßt auf "mbox", "boxer" etc.
Solche Schablonen können also eine Menge Arbeit ersparen, andererseits sollte man vorsichtig damit umgehen, denn schnell hat man so versehentlich nicht nur eine, sondern gleich ein ganzes Bündel von Dateien unwiderbringlich gelöscht...

Eine Textdatei ausgeben, der cat-Befehl
Mit cat (für concatenate) kann man eine Datei auf den Bildschirm ausgeben lassen. Die Ausgabe erfolgt allerdings nicht bildschirmweise, so daß längere Texte schneller über den Bildschirm scrollen, als man sie lesen kann.

- Syntax: cat <datei>
- Beispiel:
asterix% cat unix.doc

Anfang einer Textdatei anzeigen lassen, der head-Befehl
Der head-Befehl zeigt die ersten 15 Zeilen einer Textdatei an

- Syntax: head <datei>

Ende einer Textdatei anzeigen lassen, der tail-Befehl
Mit tail kann man sich die letzten 15 Zeilen einer Textdatei ausgeben lassen.

- Syntax: tail <datei>

Eine Datei seitenweise anschauen, der more-Befehl.
Textdateien kann man sich mit dem more-Befehl auf dem Bildschirm anzeigen lassen. Immer wenn eine Bildschirmseite voll ist, zeigt das Programm
-- More -- (n %)
an und wartet auf einen Tastendruck (daher der Name). Durch Drücken der <RETURN>-Taste wird jeweils eine neue Zeile angezeigt, mit der <Leertaste> immer ein ganzer Bildschirm. Außerdem versteht more noch weitere Tastenkommandos, eine Auflistung kann man mit der Taste "h" bekommen.

Die wichtigsten Kommandos sind:
- "b" geht eine Bildschirmseite zurück
- "/<Suchtext>" durchsucht die Datei nach einem Text und zeigt die Stelle an
- "n" sucht das nächste Auftreten des vorher angegebenen Suchtextes

Eine Datei kopieren, der cp-Befehl.
Mit cp (für "copy") kann man eine Datei kopieren. Die Kopie kann dabei entweder mit dem selben Namen in ein anderes Verzeichnis gelegt werden, oder im selben Verzeichnis mit einem neuen Namen abgelegt werden.

- Syntax: cp <Quelldatei> <Zielpfad/Zieldatei>
- Beispiel:
asterix% cp mbox mbox2
Hier wird eine Kopie der Datei mbox unter dem Namen "mbox2" im aktuellen Verzeichnis erzeugt.
asterix% cp ~dawin/forusers/unix.doc unix.doc
Hier wird die Datei unix.doc aus dem Verzeichnis "forusers" des Benutzers mit der User-ID "dawin" ins aktuelle Verzeichnis kopiert.
asterix% cp unix.doc ~dawin
Hier wird die Datei unix.doc aus dem aktuellen Verzeichnis in das Home-Verzeichnis des Users "dawin" kopiert.
Wenn die Quelldatei ein Verzeichnis ist, werden alle Dateien (und Unterverzeichnisse), die sich darin befinden zum Zielpfad kopiert. Bei manchen Unices (z.B. Linux) muß hierzu allerdings eine spezielle Option (-r für rekursiv) angegeben werden.
- Beispiel:
asterix% cp ~dawin/forusers ~ganslan
Hier wird das ganze Verzeichnis "forusers" vom User "dawin" in das Home-Verzeichnis von "ganslan" kopiert.

Dateien linken, der ln-Befehl.
Mit ln (für "link") kann man einen Verweis auf eine Datei erzeugen - aber was bedeutet das? Der ln-Befehl erzeugt im aktuellen Verzeichnis einen neuen Eintrag für eine Datei, die bereits existiert. D.h. die gibt es in Wirklichkeit nur einmal physikalisch, aber sie steht gleichzeitig in mehreren Verzeichnissen. Mehrere Benutzer können so gleichzeitig von ihren Directories aus auf eine Datei zugreifen.

Die Vorteile von ln gegenüber dem Kopieren mit cp sind:
- Platzsparen (eine kopierte Datei belegt zweimal Plattenplatz)
- Eine Änderung in der Quelldatei ist automatisch auch in allen dazugelinkten "virtuellen Kopien" aktiv.
- Syntax: ln -s <Quelldatei> [<Zieldatei>]
Wenn keine Zieldatei angegeben wird, legt ln das link im aktuellen Verzeichnis unter dem Namen der Quelldatei an.
- Beispiel:
asterix% ln -s ~dawin/forusers/unix.doc
Hiermit habe ich in meinem aktuellen Verzeichnis unter dem Namen unix.doc ein Link auf die Datei ~dawin/forusers/unix.doc angelegt.
Der ls-Befehl zeigt mit der "-l"-Option auch an, auf welche Quelldatei sich ein Link bezieht:
asterix% ls -l unix.doc
lrw-r--r-- 1 ganslan u0dawin 78121 Jun 15 11:03 unix.doc ->
/home/obelix/dawin/forusers/unix.doc
Der ln-Befehl sollte immer dann angewendet werden, wenn mehrere User gemeinsam auf eine große Datei zugreifen wollen, die gleichzeitig (wegen der Bequemlichkeit ;-) direkt in den Verzeichnissen aller Mitglieder stehen soll. Bei kleineren Dateien kann man ruhig auf das linken verzichten und direkt eine Kopie machen - bei zu vielen links wird das Filesystem schnell unübersichtlich (z.B. könnte ja jemand das Original einer vielfach gelinkten Datei löschen...).

Dateien bewegen und umbenennen, der mv-Befehl.
Mit mv (für "move") können Dateien umbennant, oder in andere Verzeichnisse verschoben werden. Die Syntax ist dabei die selbe wie bei cp, und in der Tat macht mv genau dasselbe, nur das es die Quelldatei nach dem kopieren löscht (intern läuft es etwas anders: die Datei selbst wird nicht kopiert, es wird nur ihr Kopfteil im Verzeichnis bewegt).

- Beispiel:
asterix% mv unix.doc unix.txt
Die Datei "unix.doc" wird in "unix.txt" umbenannt.
asterix% mv unix.doc News
Die Datei "unix.doc" wird in das Verzeichnis "News" verschoben.

Dateien löschen, der rm-Befehl.
Mit rm (für "remove") können Dateien gelöscht werden - und zwar unwiederbringlich (ein "undelete" wie unter MS-Dos ist unter Unix nicht möglich); evtl. besteht die Möglichkeit, versehentlich gelöschte (wichtige) Dateien von einem Backup des Rechenzentrums zurückzuholen (man wende sich an den Dispatch ;-).

- Syntax: rm <Dateiname>
- Beispiel:
asterix% rm unix.doc
löscht die Datei unix.doc
asterix% rm *.test
löscht alle Dateien mit der Endung ".test" (Vorsicht!)
Wenn der angegebene Dateiname ein Verzeichnis ist, kann er mit rm nicht direkt gelöscht werden. Dafür ist eigentlich der Befehl rmdir vorgesehen, der ein leeres Verzeichnis löscht. Allerdings kann mit der Option "-r" (für "recursive") ein Verzeichnis mit allen darin enthaltenen Dateien und Unterverzeichnissen gelöscht werden.
- Beispiel:
asterix% rm -r test
löscht das gesamte Verzeichnis "test" inklusive Inhalt (Vorsicht!!)
Damit nicht aus Versehen mal wichtige Dateien verschwinden, gibt es die Option "-i" (interactive); ist sie gesetzt, so fragt rm bei jeder Datei nach, ob sie auch wirklich gelöscht werden soll.
- Beispiel:
asterix% rm -ir test
löscht das Verzeichnis "test" mit Sicherheitsabfrage für alle darin enthaltenen Dateien oder Unterverzeichnisse.

Verzeichnisse löschen, der rmdir-Befehl
Mit rmdir (für "remove directory") kann ein Verzeichnis gelöscht werden, sofern es keine Dateien (oder Unterverzeichnisse enthält), also völlig leer ist.

- Syntax: rmdir <Verzeichnis>

Ein neues Verzeichnis anlegen, der mkdir-Befehl
Mit mkdir (für "make directory") kann man im aktuellen Verzeichnis ein neues Unterverzeichnis anlegen.

- Syntax: mkdir <Verzeichnisname>
- Beispiel:
asterix% mkdir briefe
Ein neues Verzeichnis mit dem Namen "briefe" wird im aktuellen Verzeichnis angelegt.
Der Verzeichnisname kann natürlich auch ein kompletter Pfad sein, so daß man auch außerhalb des aktuellen Verzeichnisses ein neues Unterverzeichnis anlegen kann:
asterix% mkdir /home/obelix/dawin/post
Hier wird das Unterverzeichnis "post" im Verzeichnis "/home/obelix/dawin" angelegt.

Zugriffsrechte ändern, der chmod-Befehl
Mit chmod können die Zugriffsrechte Lesen, Schreiben und Ausführen für einzelne (oder auch gleich mehrere) Dateien verändert werden. Dieser Befehl kann nur vom Besitzer der jeweiligen Datei ausgeführt werden. Wie bereits oben erklärt, werden die Zugriffsrechte getrennt für den Besitzer (u=user), seine Gruppe (g=group) und die "Welt" (o=others) vergeben. Die Abkürzungen der Rechte lauten r (read), w (write) und x (execute). Der chmod-Befehl erlaubt nun zwei Wege, die Zugriffsrechte von Dateien zu verändern:

- Angabe der Rechte als dreistellige Okalzahl
Die erste Ziffer steht dabei für die Rechte des Besitzers, die zweite für die seiner Gruppe, die dritte für die der anderen (also genau wie beim ls-Befehl). Jede Ziffer besteht aus 3 bit, für r, w und x. Für r setzt man eine 4 ein, für w eine 2 und für x eine 1 und addiert das ganze zusammen; für rw ergibt sich also 6, für rwx kommt eine 7 heraus. Das ganze wiederholt man dann für gruppe und welt und heraus kommt eine dreistellige Zahl.
    z.B. 700 für rwx------
         644 für rw-r--r--
Da dies alles aber recht mühsam ist, gibt es noch die...

- Angabe im Klartext
Dabei können Zugriffsrechte einzeln oder gemeinsam für bestimmte Gruppen vergeben werden:
- Format: <Nutzergruppe(n)><+|-|=><Recht(e)>
Mit + werden Rechte hinzugefügt, mit - abgezogen.
Mit = werden die Rechte (unabhängig von den vorher definierten) mit den neuen Werten überschrieben
- Bespiel:
g+rw gibt der Gruppe Lese- & Schreibzugriff, der execute-Zugriff bleibt unverändert.
go-rwx entzieht Gruppe und Welt alle Zugriffsmöglichkeiten
ug=rwx gibt Besitzer und Gruppe alle Zugriffe
- Syntax: chmod <Rechte> <Datei>
- Beispiel:
asterix% chmod go-w News
Das Verzeichnis News kann jetzt von Gruppe und Welt nicht mehr geändert werden.
asterix% chmod g+r mbox
Die Datei mbox kann von Gruppenmitgliedern gelesen werden.
asterix% chmod gu=rwx unix.doc
Die Zugriffsrechte der Datei unix.doc werden für Besitzer und Gruppe werden auf Lesen, Schreiben und Ausführen gesetzt.
asterix% chmod go-rwx *
Alle Dateien im aktuellen Verzeichnis können von niemanden außer dem Besitzer verwendet werden.

Besitzer einer Datei ändern, der chown-Befehl
Mit chown (für change owner) kann man eine Datei einem anderen Besitzer zuordnen. Dieser Befehl kann nur vom Besitzer der Datei ausgeführt werden - d.h. wenn man den Owner geändert hat, kann dies nur vom neuen Besitzer rückgängig gemacht werden. Der chown-Befehl macht dann Sinn, wenn man eine Datei im eigenen Verzeichnis ausschließlich für einen bestimmten anderen User zugänglich machen will. Man ändert vorher also die Zugriffsrechte so, daß nur noch der Besitzer die Datei lesen kann (chmod go-rwx <Datei>) und ruft anschließend den chown-Befehl auf.

- Syntax: chown <neuer Besitzer> <Datei(en)>
- Beispiel:
asterix% chown dawin unix.doc

Gruppe einer Datei ändern, der chgrp-Befehl
Mit chgrp (für change group) kann die Gruppenzuordnung einer Datei geändert werden.

- Syntax: chgrp <neue Gruppe> <Datei(en)>
- Beispiel:
asterix% chgrp u0dawin unix.doc


3.3. Editieren

Um einen Text in eine Datei einzugeben, gibt es unter Unix eine Menge unterschiedlich komfortabler Möglichkeiten, die (je nach Ausbaugrad des Systems) nicht immer zur Verfügung stehen müssen. Der einfachste Editor ist der ex, der zeilenorientiert arbeitet. Eine Stufe komfortabler (aber auch komplizierter) ist der vi (visual), der bildschirmorientiert ist. Diese beiden Editoren sind auf jedem Unix-System vorhanden. Meist findet man auch den joe ("Joe's Own Editor"), der sehr einfach zu bedienen ist und verständliche online-Hilfen bereitstellt (die Bedienung ist identisch mit der von Wordstar und vergleichbaren Editoren, z.B. Turbo-Editor, Sidekick, etc.) Ein wirklich komfortabler und leistungsstarker Editor ist der emacs, der zudem noch selbsterklärend ist. Auf X-Windows-Systemen gibt es Editoren wie den aXe, Xcoral oder Xedit, die grafisch, mit Menüs und Mausunterstützung das Nonplusultra darstellen.

a) ex, der Zeileneditor

Syntax: ex <Dateiname>

Nach dem Aufruf von ex erscheint entweder die Meldung "[New File]" oder eine Angabe über die Länge der Datei (in Zeilen). Danach erscheint das command-prompt ":" des ex. In diesem Kommando-Modus können nun verschiedene Befehle zur Manipulation des Textes eingegeben werden:

p [zeile][,zeile]
Zeigt die aktuelle Zeile an, oder die Zeile mit der angegebenen Nummer, oder den Textbereich zwischen zwei Zeilennummern. Das $-Zeichen kann für die letzte Zeile eingesetzt werden, die erste Zeile trägt die Nummer 1.
[zeile]z
Zeigt von der aktuellen Zeile an (oder von der angegebenen) eine Bildschirmseite Text an.
d [zeile][,zeile]
Löscht die aktuelle Zeile oder den angegebenen Textbereich
[zeile]r <Datei>
Liest die angegebene Datei und fügt sie hinter die aktuelle Zeile (oder die angegebene) ein
/<Suchtext>
Sucht von der aktuellen Zeile an im Text nach dem angegebenen Suchtext; die erste Zeile, die den Suchtext enthält, wird angezeigt und zur neuen aktuellen Zeile gemacht. Falls der Suchtext nicht angegeben wird, sucht ex nach dem zuletzt angegebenen.
s/<suche>/<ersetze>
Suchtext mit einem Ersatztext austauschen (substitute). Hiermit wird nicht der ganze Text bearbeitet, sondern nur die jeweils nächste Fundstelle.
g/<suche>/<Befehl>
Sucht im gesamten Text nach dem Suchtext und führt auf diese Zeilen den angegebenen Befehl aus. Beispiel: g/hallo/s/hallo/helau - Hiermit wird im ganzen Text das Wort "hallo" durch "helau" ersetzt.
a
Fügt Text hinter der aktuellen Zeile ein (append). Nach diesem Befehl befindet man sich im edit-Modus.
i
wie "a", fügt den Text aber vor der aktuellen Zeile ein (insert).
c
Zeile durch neuen Text ersetzen (change).
w [Datei]
schreibt den Text in die Ausgangsdatei oder in die angegebene (write).
q
beendet den ex (falls der Text nicht vorher abgespeichert wurde, gibt es eine Warnung)
q!
beendet den ex, auch wenn vorher nicht gespeichert wurde
wq [Datei]
speichert den Text und beendet den ex.
Im edit-Modus können beliebig viele Zeilen hintereinander eingegeben werden (auch beim "c"-Befehl!) - in den Kommando-Modus kommt man zurück, indem man als erstes Zeichen einer neuen Zeile einen einzelnen Punkt "." eingibt.
Bei den Suchbefehlen ist zu beachten, daß als Suchtext eine regular expression gefordert wird; damit ist ein spezielles Format gemeint, daß die Suche mit Jokers und Wildcards erlaubt. Dies hat unter anderem zur Folge, daß Klammern () [] im Suchtext nicht direkt eingesetzt werden dürfen - statt dessen muß man "\(" oder "\)" schreiben (Backslash, nicht verwechseln mit dem normalen slash "/").
- Beispiel für eine typische ex-session:
asterix% ex test.doc
[New File]
:a
Dies ist ein Test. (ehrlich!)
Wenn ich gleich einen "." eingebe,
komme ich wieder in den command-mode
.
:wq

b) vi, der Bildschirm-Editor
Der Nachteil des ex ist, daß man, um eine Zeile zu ändern, immer die ganze Zeile komplett neu eintippen muß (falls man nicht mit dem s-Befehl einzelne Worte austauschen kann). Dafür ist der ex recht gut überschaubar, man weiß stets, woran man mit ihm ist (was man vom vi nicht immer behaupten kann ;-)...
Dafür bietet der vi den Luxus einer bildschirmorientierten Eingabe, so daß auch einzelne Zeichen innerhalb einer Zeile verändert werden können.

Der vi baut auf dem ex auf, so dass sich ingesamt drei Modi ergeben:
- Kommandomodus des vi: Verändern der Cursor-Position im Text
l = ein Zeichen nach links
h = ein Zeichen nach rechts
k = eine Zeile nach oben
j = eine Zeile nach unten
w = nächstes Wort
$ = Zeilenende
<control>+B = eine Seite zurück
<control>+F = eine Seite vorwärts
G = Gehe ans Dateiende
<n>G = Gehe zur Zeile <n>
/<text> = Suche nach <text>
n = letzte Suche wiederholen
- Einfügen von Text: vi geht in den Eingabemodus:
i = insert, Text vor der aktuellen Cursorposition einfügen
a = append, Text hinter der aktuellen Position einfügen
I oder A = Text am Anfang oder Ende der aktuellen Zeile einfügen
o oder I = Neue Zeile unter oder über der aktuellen einfügen
cw = nächstes Wort ersetzen
cc = aktuelle Zeile ersetzen
s oder S = aktuelles Zeichen oder ganze Zeile ersetzen
R = folgenden Text ersetzen
- Löschen von Text
dw = aktuelles Wort löschen
dz oder x = aktuelles Zeichen löschen
dd = aktuelle Zeile löschen
<n>dd = lösche die nächsten <n> Zeilen
u = undo, letzte Änderung rückgängig machen
- und ausserdem
J = aktuelle Zeile mit der nächsten zusammenziehen
ZZ = Text speichern und vi beenden
- Kommandomodus des ex
Im vi-Kommandomode gelangt man durch den Doppelpunkt ":" in den ex-Kommandomodus, in dem alle oben beschriebenen ex-Befehle eingegeben werden können.

- Eingabemodus des vi
Hier kann direkt Text eingegeben werden. Durch Druck der <Escape>-Taste gelangt man wieder zurück in den vi-Kommandomodus.
Nach dem Aufruf mit "vi <datei>" befindet man sich im vi-Kommandomodus.

c) emacs, der intelligente Editor
Der emacs ist ein Public-Domain-Programm, das nicht zum Lieferumfang von Unix gehört. Mit seinen (fast) unbegrenzten Möglichkeiten ist er der komfortabelste, aber auch komplizierteste (und Speicher in Mengen verbratende) Editor unter Unix. Glücklicherweise verfügt der emacs über ein eingebautes Hilfesystem und ein Tutorial, das den Ein- und Umstieg erleichtert; für besonders entnervte befindet sich in manchen emacs-Versionen das berühmte Eliza-Programm, der elektronische Psychotherapeut.
Emacs erlaubt unter anderem, mehrere Texte in verschiedenen Fenstern gleichzeitig zu bearbeiten, besitzt spezielle Modi für das Editieren von Programmtexten und ist über eine eigene Programmiersprache (Lisp-Dialekt) erweiterbar.
Alle Befehle des emacs hier aufzuführen, würde den Rahmen dieser Einführung sprengen; daher sollen hier nur die für den Normalbetrieb erforderlichen Kommandos erklärt werden.

Allgemeines:
- Syntax: emacs <dateiname>
Nach dem Start befindet man sich direkt im Eingabemodus
- Befehle werden über <control>-Sequenzen eingegeben.
Emacs erkennt zwei unterschiedliche Kontroll-Tasten: zunächst die <control>-Taste (auch <strg> oder <ctrl>), die zusammen mit dem folgenden Kontroll-Buchstaben gedrückt werden muss (Beispiel: <control>+g = <control>-Taste gedrückt halten und g tippen). Die andere Meta-Kontrolltaste ist <Escape>; hier muss der folgende Kontrollbuchstabe erst nach dem Loslassen der <Escape>-Taste eingegeben werden (Beispiel: <Escape>-g = <Escape>-Taste drücken und loslassen, anschliessend g tippen). Mit <control>+x gelangt man in den erweiterten (eXtended) Kommandomodus. Emacs erwartet dann die Eingabe eines weiteren Zeichens oder Kontrollzeichens. Mit <escape>-x wird der "explizite" erweiterte Kommandomodus aufgerufen; hier können Kommandos im Klartext eingegeben werden (z.B. "replace-regular-expression").
- Cursor-Steuerung:
Der Cursor kann teilweise über die Pfeiltasten des Terminals bewegt werden (Dies funktioniert allerdings nicht, wenn man sich von einem PC aus eingeloggt hat). Unter X-Windows kann der Cursor sogar direkt mit der Maus positioniert werden. Die folgenden Kontroll-Sequenzen funktionieren in jedem Fall:
<control>+f = ein Zeichen vorwärts
<control>+b = ein Zeichen rückwärts
<escape>-f = ein Wort vorwärts
<escape>-b = ein Wort rückwarts
<control>+n = eine Zeile vorwärts
<control>+p = eine Zeile rückwärts
<control>+v = eine Seite vorwärts
<escape>-v = eine Seite rückwärts
<control>+a = zum Anfang der Zeile
<control>+e = zum Ende der Zeile
<escape>-< = zum Textanfang
<escape>-> = zum Textende
- Hilfe:
Mit <control>+h gelangt man in das ausführliche Hilfe-System. Die Hilfe kann mit <control>+g abgebrochen werden. Falls ein zusätzliches Hilfs-Textfenster geöffnet wurde, kann dieses mit <control>+x1 geschlossen werden.

- Dateien:
<control>+x <control>+f <Datei> = Datei laden
<control>+x i <Datei> = Datei einfügen
<control>+x <control>+s = Text speichern (Emacs speichert automatisch alle paar Minuten)
<control>+x <control>+w <Datei> = Text in <Datei> speichern
<control>+x <control>+c = Text speichern und emacs verlassen
- Suchen:
<control>+s <Text> = Text vorwärts suchen
<control>+r <Text> = Text rückwärts suchen

d) joe, der komfortable Editor
Joe's Own Editor wird nicht nur alte Hasen, die sich noch an graubärtige Programme wie Wordstar erinnern, erfreuen, da die Bedienung auch stark an andere gängige Editoren (zB. in Borland-Produkten) angelehnt ist; Greenhorns werden an joe besonders die ausführlichen Hilfsbildschirme schätzen, die sich leicht in den laufenden Text einblenden lassen.

- Syntax: joe <Dateiname>
- Befehle:
Die Befehle werden alle über <control>-Sequenzen aufgerufen. Die wohl wichtigste Sequenz ist <control>+kh = Hilfsmenü aufrufen (mit der selben Sequenz läßt sich übrigens der Hilfsbildschirm wieder ausblenden).

- Cursorsteuerung:
normalerweise sollten die Cursortasten des Terminals funktionieren, aber die hier gehen immer:
<control>+f = ein Zeichen nach rechts
<control>+b = ein Zeichen nach links
<control>+n = eine Zeile vorwärts
<control>+p = eine Zeile rückwärts
<control>+ku = an den Textanfang
<control>+kv = an das Textende
<control>+kl<n> = zu der Zeile mit der Nummer <n>
- Sonstiges:
<control>+kx = Text speichern und joe verlassen

<control>+c = Text nicht speichern und joe abbrechen

Da ich selbst noch keine Erfahrungen mit joe gemacht habe, solltet ihr euch die restlichen Kommandos (und da gibt es jede Menge!) lieber von joe persönlich erklären lassen ;-)


3.4. Aufräumen und Platzsparen

Man bedenke, dass auf einem Unix-System manchmal über tausend User Accounts besitzen, die sich einen begrenzten (!) Plattenspeicher teilen müssen. Falls sich niemand darum kümmert, unbenötigte Dateien zu löschen und seinen eigenen Speicherverbrauch in Grenzen zu halten, platzt selbst die größte Gigabyte-Platte irgendwann aus den Nähten - irgendwann ist dann der Sysop gezwungen, Quotas zu vergeben, d.h. jeder User bekommt eine feste Menge Plattenplatz zugewiesen, mit denen er auszukommen hat. Um diesen verhängnisvollen Schritt zu verhindern, gilt es also, seinen Platzbedarf so gering wie möglich zu halten - und Unix stellt dafür einige hilfreiche Befehle zur Verfügung, die das Aufräumen zum reinen Vergnügen machen ;-)
So kann man zum Beispiel Dateien, die man momentan nicht braucht, die aber vielleicht später wieder aktuell werden, komprimieren (so daß sie weniger Platz wegnehmen). Dateien können ausserdem zu "Archiven" zusammengefaßt werden, die dann leicht auf andere Rechner (oder auf Disketten) ausgelagert werden können.

Dateien komprimieren, der compress-Befehl
Der compress-Befehl erlaubt es, Dateien extrem zu verkleinern - im Schnitt wird eine Rate von 50% erreicht, aber bei Bild- oder Textdaten sind auch Werte bis 75% und mehr möglich.
Compress erzeugt eine neue Datei mit der zusätzlichen Endung ".Z", die Ausgangsdatei wird gelöscht.
Dabei gehen natürlich keine Daten verloren - nach dem Dekomprimieren ist alles wie vorher (compress erkennt z.B. lange Wiederholungen in Texten und faßt sie zu kleineren Zeichen zusammen).

- Syntax: compress <Dateiname>
- Beispiel:
asterix% compress unix.doc

Dateien entkomprimieren, der uncompress-Befehl
Mit uncompress kann man Dateien, die mit compress gepackt wurden (erkennbar an der Endung ".Z"), wieder entpacken. Dabei wird die .Z-Datei gelöscht und die Originaldatei wieder hergestellt.

- Syntax: uncompress <Dateiname>

Komprimierte Dateien ausgeben, der zcat-Befehl
Der zcat-Befehl ermöglicht es, eine gepackte Datei anzuschauen, ohne sie vorher extra auszupacken - das erledigt zcat sozusagen unterwegs.

- Syntax: zcat <Dateiname>
- Beispiel:
asterix% zcat unix.doc.Z

Dateien packen und entpacken, der pack und unpack-Befehl
Pack und unpack machen im Prinzip dasselbe wie compress und uncompress. Da sie nach einem anderen Verfahren arbeiten, kommen andere Kompressionsraten dabei heraus - allerdings erreicht compress meist die stärkeren Kompressionsraten. Dateien, die mit pack komprimiert wurden, kann man an der Endung ".z" erkennen.

Dateien "zippen", der gzip und gunzip-Befehl
Das gzip-Programm ("gnu-zip") erreicht zur Zeit die besten Kompressionsraten überhaupt. Es empfiehlt sich also, nur noch gzip zu verwenden. Mit gzip gepackte Dateien sind an der Endung ".gz" zu erkennen. Durch Angabe einer Zahl als Option kann man die Geschwindigkeit & Effektivität der Kompression einstellen (-0 = schnell, geringe Kompression; -9 = langsam, maximale Kompression). Mit der Option "-v" (verbose) veranlaßt man gzip, anzugeben, wie stark er die jeweilige Datei komprimieren konnte.

- Syntax: gzip [-0|9v] <Dateiname>
gunzip <Dateiname>
- Beispiel:
asterix: gzip -9v unix.doc
asterix: gunzip unix.doc.gz

Ein Archiv anlegen, der tar-Befehl
Mit tar (für "tape archive") kann man viele Dateien und/oder Verzeichnisse in einer gemeinsamen Datei zusammenfassen. Dies ist z.B. dann sinnvoll, wenn viele Dateien auf Diskette abgezogen, oder per ftp übertragen werden sollen - sonst müßte man jede Datei einzeln überspielen. Ein weiterer Vorteil ist, daß tar die Verzeichnisstruktur übernimmt; d.h. wenn die Dateien aus dem Archiv extrahiert werden, legt tar automatisch die richtigen Verzeichnisse und Unterverzeichnisse an.

- Syntax: tar <optionen> [archivdatei] <datei> [Datei2] [Datei...n]
- Optionen:
c: neues Archiv anlegen (create) - sonst werden die Dateien an ein evtl. bestehendes Archiv angehängt.
v: ausführliche Informationen über die Archivierung anzeigen (verbose) - hat keinen Einfluss auf das Archiv
x: Dateien aus dem Archiv extrahieren
t: Inhalt des Archivs anzeigen
f: Archivname spezifizieren - diese Option muß stets angegeben werden (sonst landet das Archiv sonstwo - z.B. auf einer Bandmaschine im Keller des RZ ;-)
z: komprimiertes Archiv bearbeiten (gibt es nur beim neueren gnu-tar)

In der Praxis werden immer nur drei Kombinationen verwendet:
cvf: neues Archiv unter dem angegebenen Namen anlegen
tvf: Inhaltsverzeichnis des angegebenen Archivs ausgeben
xvf: angegebenes Archiv auspacken
Bei gnu-tar kann man das ARchiv durch hinzufügen der "z"-Option gleich in einem Schritt komprimieren oder dekomprimieren.

- Beispiel:
asterix% tar cvf news.tar News
Das Verzeichnis "News" wird mitsamt allen darin enthaltenen Dateien und Unterverzeichnissen in das Archiv "news.tar" zusammengefaßt.
asterix% tar tf news.tar
Der Inhalt des Archivs news.tar wird angezeigt.
asterix% tar xvf news.tar
Die Dateien aus dem Archiv "news.tar" werden im aktuellen Verzeichnis ausgepackt. Nach dem Befehl wird also das Directory "News" samt Inhalt im aktuellen Verzeichnis stehen.

- im übrigen:
Die Optionen werden bei tar ohne vorangestelltes Minuszeichen angegeben. Archive, die mit tar angelegt wurden, kann man an der Endung ".tar" erkennen. Allerdings hängt tar diese Endung nicht automatisch an - das muß man bei der Angabe des Archivnamens selbst tun.
Nachdem man nun mit tar einen Haufen Dateien zu einem übersichtlichen Archiv zusammengezogen hat, ist es nur logisch, diese Archiv mit gzip zu komprimieren:

- Beispiel:
asterix% gzip -9 news.tar
Jetzt haben wir die ganzen Daten aus dem Verzeichnis "News" in der kleinstmöglichen Form zusammengepreßt - es ist nur noch eine Datei (news.tar.z) übriggeblieben, die bei einem Drittel des Platzbedarfs alles das enthält, was vorher in zig Dateien und Unterverzeichnissen vorhanden war. Jetzt können wir also (zur Vollendung) das Original-Verzeichnis "News" löschen.
asterix% rm -r News

Falls es uns später gelüstet, mal wieder in unserem alten "News"-Verzeichnis zu blättern - nichts leichter als das:
asterix% gunzip news.tar.gz
asterix% tar xvf news.tar
Sich mit dieser Befehlsgruppe auszukennen ist unerläßlich - Programme und Daten, die über ftp kopiert werden können, sind (fast) ohne Ausnahme nach diesem Prinzip als komprimierte Archive (.tar.Z) angelegt.

Aber Ausnahmen gibt es natürlich immer: andere Archivformen, die hauptsächlich auf Atari ST, IBM PC's oder Amigas verwendet werden, kann man an folgenden Endungen erkennen: .lha, .lzh, .zoo, .zip, .arj, .arc, .ice... um nur einige zu nennen. Programme, um diese Archive auf den entsprechenden Rechnern auszupacken, sind im Netz verfügbar, man kann sie per ftp (s.u.) abrufen. Die meisten Archivformate können mit entsprechenden Programmen auch auf einem Unix-Rechner ausgepackt werden, hier muß man einfach ausprobieren, ob das entsprechende Programm (zB. zip, unzip, lharc, zoo) vorhanden ist.


3.5. Kommunikation

Als Multi-User-System bietet Unix die Möglichkeit, Mitteilungen an andere Benutzer zu schicken (mail, write) oder sich sogar direkt zu unterhalten (talk). Über die Anbindung zum Internet können so auch User von anderen Systemen angesprochen werden. Gerade diese (international nutzbare) Möglichkeit ist besonders interessant, da so verschickte Briefe meist innerhalb von 5 Minuten beim Empfänger angekommen sind (und das sogar Gebührenfrei ;). Unter Internet-Addicts ist die gute alte Bundespost daher nur noch als "Snail-Mail" (Schneckenpost) bekannt...

a) Informationen über User

Es gibt eine Reihe von Befehlen, die Informationen über die momentan eingeloggten Benutzer liefern:

Der who-Befehl
Mit who bekommt man eine Liste der aktuell eingeloggten User. Dabei wird ausserdem angezeigt, von welchem Rechner und zu welcher Uhrzeit sich die Benutzer eingeloggt haben.

- Beispiel:
asterix% who
operator tty0 Mar 04 06:42
dawin pts/6 Mar 05 20:23 (COMIX.UNI-MUENST)
Der w-Befehl
Der w-Befehl zeigt außerdem an, welche Programme von den Benutzern momentan gefahren werden, und wie lange die letzte Tastatureingabe zurückliegt (idle-time).
- Beispiel:
asterix% w
08:42PM up 8464 days, 19:43, 11 users, Runable processes: 31
User tty login@ idle JCPU PCPU what
operator tty0 Thu06AM 36 1 0 -ksh
dawin ttyp1 Thu08AM 1 1 0 emacs
Der finger-Befehl
Mit finger kann man sich zusätzlich zu den Usernamen auch die vollen Namen der aktuellen Benutzer ausgeben lassen.
- Syntax: finger [user][@host]
- Beispiel:
asterix% finger
Login Name TTY Idle When Site Info

operator Operateure t0 36 Thu 06:42
zyp003 Kursteilnehmer p17 232d Fri 16:30 O03
Mit finger können außerdem detaillierte Informationen über einzelne User eingeholt werden:
- Syntax: finger <username>
- Beispiel:
asterix% finger dawin
Login name: dawin In real life: DaWIN-Account
Site Info: J09
Directory: /home/obelix/dawin Shell: /bin/ksh
No plan.
Die Zeile "No plan" bedeutet natürlich nicht, daß der Dawin-User keinen Plan hat - hier wird nur angezeigt, dass dieser User keine ".plan"-Datei in seinem home-Verzeichnis angelegt hat. Diese Datei ist dafür vorgesehen, seine Adresse oder Telefonnummer (oder auch Wegbeschreibung = Plan) einzutragen. Da allerdings jeder [potentielle Telefon-Terrorist] auf diese Informationen zugreifen kann, ist fraglich, ob man seine Daten dort eintragen sollte... Viele Leute tragen dort auch einfach nur ihr Motto oder irgendein witziges Zitat ein.
Die Zeile "Site Info" bezieht sich auf das Ausgabefach im Rechenzentrum, in dem etwaige Printouts abzuholen sind.
Hinter der "Shell" verbirgt sich der Kommando-Interpreter von Unix, der vom jeweiligen User benutzt wird. Es gibt jede Menge Shells mit unterschiedlichen Vor- und Nachteilen.

Außerdem kann man finger auch auf andere Rechner am Internet anwenden und bekommt dann angezeigt, welche User auf diesem Rechner eingeloggt sind. Es kommt allerdings vor, daß diese Möglichkeit gesperrt ist (in diesem Fall erscheint "Connection refused.")

- Syntax: finger @<hostname>
- Beispiel:
asterix% finger @math.uni-muenster.de
Natürlich kann man finger auch auf einen User auf einem Netzrechner anwenden:
- Syntax: finger <username>@<hostname>
- Beispiel:
asterix% finger mud@math.uni-muenster.de

b) Informationen mit eingeloggten Usern austauschen

Der write-Befehl
Mit write kann man eine Botschaft an einen User abschicken, der zur selben Zeit auf dem selben Rechner eingeloggt ist. Die Information fließt dabei nur in eine Richtung (nur vom Sender zum Empfänger). Nachdem man den write-Befehl gestartet hat, erscheint alles, was man ab diesem Zeitpunkt eingibt, auf dem Bildschirm des angegebenen Users, bis man den Befehl mit <control>+d beendet.

- Syntax: write <username> [schnittstelle]
Der Parameter "Schnittstelle" kann auch weggelassen werden; er ist dafür vorgesehen, die Botschaft an ein bestimmtes Fenster zu schicken, wenn der Empfänger mehrfach eingeloggt ist (wird beim who-Befehl angezeigt).
- Beispiel:
asterix% write dawin
asterix% write dawin pts/2
Der talk-Befehl
Mit talk kann man ein Gespräch mit einem zur selben Zeit eingeloggten User auf einem beliebigen am Netz angeschlossenen Rechner führen. Der Empfänger erhält dann eine Meldung, daß er "angerufen" wurde, sowie die Aufforderung, durch seinerseitige Eingabe des talk-Befehls das Gespräch anzunehmen. Der Bildschirm wird dann in zwei Hälften aufgeteilt, in der oberen erscheint das, was man selbst eingibt, in der unteren der Input des Angerufenen.
Es kann Probleme mit dem Bildschirmaufbau geben, wenn die Terminaleinstellung nicht stimmt; manchmal hilft es, "set term=vt100" einzugeben und es noch einmal zu probieren.
- Syntax: talk <username>[@hostname] [schnittstelle]
- Beispiel:
asterix% talk dawin
asterix% talk dawin@asterix.uni-muenster.de
Der mesg-Befehl
Da es durchaus Phasen gibt, in denen man möglichst ungestört am Rechner arbeiten will (!), kann man mit dem mesg-Befehl "die Telefonleitung durchschneiden". Sämtliche write- und talk-Befehle für einen selbst werden dann abgefangen, himmlische Ruhe breitet sich aus... (Man selbst kann natürlich weiterhin write- und talk-Befehle an andere User absetzen ;)
Von der Sperre ausgenommen sind Meldungen des Systemoperators (root), z.B. Ankündigungen eines Shutdowns.
- Syntax: mesg <y|n>
- Beispiel:
asterix% mesg n
hiermit schalte ich die Kommunikation für mich ab...
asterix% mesg y
...und so bin ich wieder erreichbar.

c) Elektronische Post verschicken und lesen

Mit Hilfe des mail-Kommandos kann man Texte an User auf einem beliebigen Rechner im Internet und anderen Datennetzen verschicken. Vorraussetzung ist natürlich, daß Username und Internetadresse dessen Rechners bekannt sind. Es ist auch möglich, Programme oder andere Binärdaten (z.B. Bilder) über email zu verschicken; die Daten müssen allerdings vorher in ein spezielles Format umgewandelt werden (mit Hilfe des uuencode-Programms). Ausserdem gibt es Beschränkungen über die Länge der zu verschickenden Dateien (spätestens ab einer Größe von 64 Kilobyte ist mit Problemen zu rechnen).
Als Alternative zum mail-Kommando gibt es noch den elm - ein Programm, das durch interaktive Menüs den Benutzer recht übersichtlich durch den mail-Dschungel führt (ist allerdings nicht auf allen Unix-Systemen vorhanden).

Das mail-Programm hat zwei Modi, je nachdem ob man selber Post verschicken will, oder die angekommenen Briefe lesen möchte.

Elektronische Post verschicken
Um einen Brief abzuschicken startet man mail mit dem Usernamen des Empfängers als Parameter. Wenn der User auf einem "fremden" Netzrechner ist, muß außerdem in bekannter Weise der Hostname des Zielrechners angegeben werden. Wenn der Brief an mehrere User geschickt werden soll, können auch mehrere User- und Hostnamen (durch Leerzeichen getrennt) angegeben werden.
Das mail-Programm fragt dann nach dem Thema (Subject) des Briefs. Falls man sich auf einen anderen Brief oder Artikel bezieht, ist es üblich, das Subject mit "Re: <bezug>" zu beginnen.
Anschließend kann man den Text des Briefes eingeben. Der Eingabemodus wird durch Eingabe von <control>+d oder durch einen einzelnen Punkt (.) als ersten und einzigen Buchstaben einer neuen Zeile beendet. Korrekturen sind hier nur innerhalb der gerade einzugebenden Zeile möglich; das mail-Programm kann aber mit der Tastenkombination <control>+c (zweimal) abgebrochen werden.
Danach fragt mail, welche User eine Kopie ("Cc" = Carbon-Copy) des Briefes erhalten sollen. Hier können (durch Leerzeichen getrennt) mehrere User@host-Adressen eingegeben werden. Wenn keine Kopien benötigt werden, drückt man einfach <return>.
Damit ist der Brief komplett und wird losgeschickt; normalerweise ist er innerhalb der nächsten 5-10 Minuten bei den Empfängern angekommen.
Falls die Adresse fehlerhaft war, oder die Rechnerverbindung nicht hergestellt werden konnte, wird der Brief an den Absender zurückgeschickt. Falls man das mail-Programm mit <control>+c abgebrochen hat, wird der bis dahin eingegebene Teil des Briefes im aktuellen Verzeichnis in der Datei "dead.letter" abgelegt.

- Syntax: mail <username>[@hostname]
- Beispiel:
asterix% mail dawin@uni-muenster.de
Subject: unix.doc
Hallo!

Also eure Unix-Dokumentation ist ja echt Spitze, usw. usf...
.
Cc:
Es ist auch möglich, Dateien zu verschicken, die man vorher mit einem Editor fertiggestellt hat. Da man ja im mail-Programm seine Tippfehler nur begrenzt korrigieren kann (und nachträglich keine Zeilen einfügen kann), ist dies sicherlich die bessere Methode. In der ersten Zeile der Datei sollte das Subject stehen, danach kommt wie gewohnt der Text des Briefes, der nicht mit einem Punkt oder <control>+d enden muß.
Auf diesem Weg können auch Programme oder Binärdaten verschickt werden, die vorher mit uuencode konvertiert worden sind (der Empfänger kann die Daten mit uudecode wieder lesbar machen).
- Syntax: mail <username>[@hostname] < dateiname
Das "<"-Zeichen vor dem Dateinamen sagt Unix, dass das mail-Programm seinen Input aus der angegebenen Datei lesen soll (näheres dazu in Kapitel 4.1.).
- Beispiel:
asterix% mail dawin@uni-muenster.de < brief

Die angekommene Post lesen
Wenn Post angekommen ist, wird dies beim einloggen durch die Meldung "[YOU HAVE NEW MAIL]" angezeigt. Durch Aufruf des "mail"-Programms ohne Parameter kann man sich die Briefe anzeigen lassen.

Nach dem Aufruf zeigt das mail-Programm dann die Subject-Zeilen aller vorliegenden Briefe an, wobei jeder Brief eine Nummer und einen Status-Buchstaben erhält.

Die Statusbuchstaben haben folgende Bedeutung:
N = new, neuer Brief
U = unread, alter Brief, der noch nicht gelesen wurde
R = read, alter Brief, der bereits gelesen wurde
> = aktueller Brief, auf den sich die mail-Kommandos beziehen
Anschließend befindet sich das mail-Programm im Kommando-Modus (angezeigt durch das mail-prompt "&"). Hier kann man sich durch verschiedene Befehle die Briefe anzeigen lassen, speichern oder auch löschen.
- mail-Befehle:
h: Zeigt die Subject-Zeilen und Absender aller vorliegenden Briefe an (header)
p [n]: Zeigt den aktuellen Brief oder den mit der Nummer n an (print)
more [n]: wie p, zeigt aber Bildschirmseitenweise an (nützlich für längere Briefe)
r <user>[@host]: aktuellen Brief beantworten (reply).
s <Datei>: Speichert den aktuellen Brief in der angegebenen Datei, wobei die Header-Informationen (Absender etc.) mitgespeichert werden (save).
w <Datei>: wie s, speichert aber den Header nicht mit ab (write)
d [n]: Löscht den aktuellen Brief oder den mit der Nummer n (wird erst ausgeführt, wenn mail mit "q" verlassen wird) (delete).
q: mail verlassen und Änderungen übernehmen. Alle gelesenen Briefe werden automatisch in die Datei "mbox" im home-Verzeichnis geschrieben. Mit preserve gehaltene Briefe werden mit dem Status "R" versehen und nicht in die mbox gespeichert (beim nächsten mail-Aufruf erscheinen sie wieder). Mit d gelöschte Briefe werden zu diesem Zeitpunkt aus der mail-Datei entfernt (quit).
x: mail verlassen, aber die mail-Datei nicht verändern. Egal, ob Briefe gelesen, gelöscht oder gehalten wurden - die mail-Datei wird nicht verändert; beim nächsten mail-Aufruf ist dann alles beim alten (exit).
Im Alltag wird man die mail-Befehle also folgendermassen nutzen:
Nachdem man sich einen Brief mit p oder more angesehen hat, kann man ihn ggf. mit s speichern (wenn er wichtig war), sonst löscht man ihn mit d und geht zum nächsten Brief weiter. Briefe, die bis zum Verlassen des mail-Programms mit q nicht gelöscht wurden, werden in die mbox-Datei geschrieben, die schnell beachtliche Ausmaße annehmen kann. Hin und wieder sollte man diese Datei also nach Datenmüll durchforsten.
- Beispiel:
asterix% mail
Mail [5.2 UCB] [IBM AIX 3.2] Type ? for help.
"/usr/spool/mail/dawin": 1 message 1 new
>N 1 ganslan Tue Mar 9 20:15 12/346 "unix-dokumentation"
& p
Message 1:
From ganslan Tue Mar 9 20:15:04 1993
Date: Tue, 9 Mar 1993 20:14:56 +0100
From: ganslan (Thomas Ganslandt)
To: dawin
Subject: unix-dokumentation

Hallo!
Also ich hätte da folgende Ergänzung anzubringen etc. ppque.

& h
> 1 ganslan Tue Mar 9 20:15 12/346 "unix-dokumentation"
& s mail/unix.comments
mail/unix.comments [appended]
& d
& q

Mail managen mit elm
Der elm bietet eine komfortable Menüoberfläche, die gerade Einsteigern den Umgang mit der elektronischen Post stark erleichtern sollte. Aus einer Liste der gespeicherten Briefe kann der Benutzer einzelne Nachrichten auswählen, die er dann lesen, beantworten, löschen usw. kann. Die Befehle bestehen aus einfachen Buchstaben, die jeweils am unteren Bildschirmrand erläutert werden. Außerdem bietet der elm noch eine mehr oder weniger ausführliche Hilfsfunktion an, die mit der "?"-Taste aufgerufen werden kann.

- Optionen:
-f <Briefdatei> = elm mit einer Briefdatei öffnen. Die Briefe werden aus der angegebenen Datei gelesen.

- elm-Befehle:
j = nächste Nachricht auswählen
k = vorherige Nachricht wählen
<Nr> = Nachricht mit der Nummer <Nr> auswählen
<return> = ausgewählte Nachricht lesen
s = Nachricht speichern (ein "=" am Anfang des Folders hängt die Nachricht hinten an)
d = Nachricht löschen (delete)
u = Löschung rückgängig machen (undelete)
r = Brief beantworten (reply)
f = Brief weiterschicken (forward)
m = neuen Brief abschicken (mail)
? = Hilfe
q = elm verlassen (quit)


3.6. Netz-Befehle

Durch die Anbindung ans Internet können weltweit über eine Million Rechner direkt angesprochen werden. Das Angebot reicht dabei von Datenbanken über Informationsdienste und Shareware-Sammlungen bis zu interaktiven Spielen. Es gibt prinzipiell zwei Möglichkeiten des Zugriffs auf Rechner im Internet: einerseits die direkte, interaktive Verbindung (telnet, rlogin), andererseits die Übertragung ausgewählter Dateien (ftp).
Der Zielrechner im Internet (remote host) wird über die bereits weiter oben erklärte vierteilige Netzadresse bzw. den symbolischen Namen angesprochen.

a) interaktive Verbindung

Der telnet-Befehl
Mit telnet kann ein beliebiger Rechner im Internet so angesprochen werden, als ob man direkt an dessen Konsole sitzt. Nachdem die Verbindung hergestellt ist, erscheint die normale login-Meldung des Rechners. Um hier weiter in den Rechner hereinzukommen, muss man dort einen Account besitzen.
Zusätzlich zur Adresse des Zielrechners kann noch eine Port-Nummer angegeben werden. Hierbei wird eine Verbindung zu einem speziellen Programm auf dem Zielrechner hergestellt (z.B. bei Datenbanken; hier ist z.T. zum einloggen kein account nötig).
Der telnet-Befehl gibt beim Herstellen der Verbindung an, welche Tastenkombination als Escape-character verwendet wird (meistens <control>+]). Über diese Tastenkombination kann man während der Verbindung in den Kommando-Modus des telnet-Programms wechseln.

- Syntax: telnet <hostname | internet-adresse> [port]
- Beispiel:
asterix% telnet comix.uni-muenster.de
asterix% telnet pascal.uni-muenster.de 4711

- telnet-Kommandos
Hier sollen nur die drei wichtigsten telnet-Kommandos aufgeführt werden:
help: Hilfe über alle telnet-Kommandos anzeigen
quit: Verbindung abbrechen (falls z.B. der remote host abgestürzt ist)
z: telnet suspendieren (d.h. vorübergehend unterbrechen => näheres siehe job-control)

b) Übertragung von Dateien über das Internet

Der ftp-Befehl
Mit ftp (file transfer protocol) wird eine Verbindung zu einem Netzrechner aufgebaut, die speziell auf die Übertragung von Dateien ausgerichtet ist. Man hat dabei keinen direkten Zugriff auf die Unix-Befehle des remote host; es stehen die Verzeichnis-Befehle zur Verfügung, um sich durch den Dateibaum zu bewegen und Inhaltsverzeichnisse einzusehen, sowie einige spezielle ftp-Befehle. Wenn man auf dem remote host einen account besitzt, kann man auf alle Dateien zugreifen, die man auch direkt unter Unix zur Verfügung hat. Falls es sich bei dem Zielrechner um einen anonymous-ftp-server handelt, kann man ohne account auf einen speziellen Bereich zugreifen, der öffentlich zugängliche (frei kopierbare) Software enthält.

- Syntax:ftp <hostname | internet-adresse> [port]
- ftp-Befehle:
help: Hilfe über alle ftp-Befehle anzeigen
ls: Inhalt des aktuellen Verzeichnisses anzeigen
dir: ausführliches Inhaltsverzeichnis mit Dateigrössen
cd: Verzeichnis wechseln
bin: auf binäre Übertragung umschalten (wichtig! wenn man's vergißt, kommt nur Datenmüll rüber, und man kann wieder von vorne anfangen)
ascii: auf text-Übertragung zurückschalten (günstig, wenn Texte zwischen unterschiedlichen Rechnertypen übertragen werden, zB. Unix <=> MS-Dos)
get <Datei> [localname]: angegebene Datei auf den Heimatrechner übertragen; wenn [localname] angegeben ist, wird die Datei unter diesem Namen angelegt, sonst unter dem gleichen, den sie auf dem remote host hatte.
put <Datei> [remotename]: Datei auf den remote host übertragen
mget, mput: mehrere Dateien über Jokers und Wildcards (?*) übertragen (bei get/put dürfen keine Platzhalter verwendet werden). Es wird bei jeder Datei einzeln nachgefragt, ob sie übertragen werden soll.
prompt: Nachfrage nach einzelnen Dateien bei mget/mput abschalten.
quit: ftp beenden
Der Uni-Interne ftp-Server von Münster ist einfach unter dem Hostnamen ftp zu erreichen (bei anderen Unis meist analog, z.B. ftp.tu-clausthal.de). Um auf anonyme ftp-server zuzugreifen, muss man sich unter dem Usernamen ftp oder anonymous einloggen; als password gibt man seine email-adresse an.
- Beispiel:
asterix% ftp ftp
Connected to VON-NEUM.UNI-MUENSTER.DE.
220 von-neumann FTP server (Tue Mar 16 14:34:09 MET 1993) ready.
Name (ftp:zyc044): ftp
331 Guest login ok, send e-mail address as password.
Password: dawin@uni-muenster.de
230-Westfälische Wilhelms-Universität (WWU), Münster, Germany
230- (Tue Mar 16 21:15:46 1993)
230-Welcome to the WWU-ftp-server!
ftp> cd pub
250 CWD command successful.
ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for file list.
Monty_Python
Prime-Time-Freeware
226 Transfer complete.
ftp> cd Monty_Python
250 CWD command successful.
ftp> bin
200 Type set to I.
ftp> get blckmail.Z
200 PORT command successful.
150 Opening BINARY mode data connection for blckmail.Z (2337 bytes).
226 Transfer complete.
2337 bytes received in 0.02554 seconds (89.38 Kbytes/s)
ftp> quit
221 Goodbye.
Bei der Verwendung von ftp sollte man sich darüber im klaren sein, dass die Übertragung von großen Datenmengen (speziell über lange Strecken) das Netz stark belastet. Man sollte also, bevor man Daten aus Übersee kopiert, zunächst prüfen, ob die Daten nicht Uni-intern, in Deutschland oder einem Rechner im benachbarten Europa zur Verfügung stehen.
Um herauszufinden, auf welchen ftp-servern eine bestimmte Datei vorhanden ist, gibt es den "Archie"-Service, eine Datenbank, die den aktuellen Stand der meisten ftp-server (weltweit) beinhaltet. Auf asterix ist hierfür der archie-Befehl vorhanden:
- Syntax: archie [-Optionen] <suchwort>
- Optionen:
-max <n> = maximal n Fundstellen anzeigen
-s = Suchwort auch als Teil (substring) eines Namens erkennen
- Beispiel:
asterix: archie -max 4 linux
__Bitte warten, die Abfrage kann einige Zeit dauern__

Datum Bytes Server: Dateipfad
1992-05-06 512 flash.bellcore.com /pub/mgr/linux
1993-04-03 1024 ftp.denet.dk /pub/OS/linux
1993-04-04 512 f.ms.uky.edu /pub3/linux
1993-04-04 512 hydra.helsinki.fi /outgoing/risto/linux
Auf Rechnern ohne archie-Kommando kann man mit telnet (z.B. telnet archie.tu-darmstadt.de) einen der archie-Server anwählen, als login-namen gibt man einfach archie ein. Unter X-Windows gibt es den archie-client xarchie, der eine grafische Benutzeroberfläche anbietet (genial einfach zu bedienen). Ansonsten kann man mit dem help-Befehl in archie Informationen über die Bedienung des Archivs bekommen.