UNIX® Basix

 

 

 

Inhaltsverzeichnis:

 

1                 UNIX – was ist das ???                           PDF

 

2                 Erster Kontakt mit dem System:

2.1                 Login, logout und das Home-Verzeichnis

 

3                 Shell-Grundlagen

3.1                 Die Shell als Kommandointerpreter

3.2                 Metazeichen

3.3                 Ein- und Ausgabeumleitung 

3.4                 Pipelining

3.5                 Ein Tässchen Tee bitte!

3.6                 Wichtige Tastaturkürzel

 

4                 Help, I need somebody, help!

4.1                 Das Programm – dein Freund und Helfer

4.2                Die Manpages

 

5                 Navigation im UNIX-Labyrinth

5.1                 Verzeichnisse und Dateien

5.2                 Das hierarchische Prinzip des UNIX-FS und das Root-Dateisystem

5.3                                 Standortbestimmung

5.4                                 Mit Verzeichnissen arbeiten

5.5                                 Mit Dateien arbeiten

5.6                                 Wie man herausfindet wieviel Platz man noch hat

 

6                 Hier kommt jeder zu seinem Recht: Mit Sicherheit

6.1                 So ändern Sie ihr Passwort

6.2                 Dateirechte

6.3                 Dateirechte verändern

6.4                 Besitzer festlegen  

 

7                 Was Kafkas Prozess mit UNIX zu tun hat

7.1                Ps is in  town

7.2                Der UNIX-Killer und seine Signale

7.3                Hintergrund-Prozesse

7.4                Hupen verboten: nohup

7.5                Nice to see you again.

 

8                 Vi – Textdateien bearbeiten

8.1                 Die 3 Modi

8.2                 Andere Tools

 

9                 Shellscripte und andere Kuriositäten

9.1                 Shell-Variablen

9.2                 Ein einfaches Scriptchen

 

10               Kommunikation – ganz große Welt

10.1               Mail

10.2               Write

 


2       Erster Kontakt mit dem System:

2.1                                 Login, logout und das Home-Verzeichnis

         

Nachdem Sie nun wissen, was UNIX ist, werden Sie sich bestimmt fragen, wie Sie denn mit UNIX arbeiten können.

 

Da UNIX ein Mehrbenutzersystem ist (engl. Multiusersystem), daß zudem auf Sicherheit Wert legt, muß sich jeder Benutzer beim System anmelden. Die Anmeldung ist die Grundlage für das Rechtekonzept von UNIX, das wir in Kapitel 6 kennenlernen werden.

Durch die Anmeldung stellt das System auch die individuelle Benutzerumgebung jedes users ein. Auch dieses ist ein Konzept von UNIX, das in vielen modernen Betriebsystemen übernommen wurde. Zur Authentifizierung erhält jeder Benutzer einen eigenen Benutzernamen, sowie ein Passwort. Hierdurch wird gewährleistet, das sich auch wirklich nur der jeweilige Benutzer anmelden kann. Den Benutzernamen und das Passwort erhält man von dem jeweiligen Systemverwalter, der einen Eintrag in die User-Datenbank vornimmt.

 

Der Systemverwalter ist der wichtigste Benutzer eines UNIX Rechners. Er hegt und pflegt ihn und sorgt dafür das immer alles in Ordnung ist. Seien Sie also stets freundlich zu Ihm, sonst kann es sein, daß er sich in einen Bastard Operator from Hell verwandelt.   ;-) 

 

Wenn man sich nun an ein Terminal setzt, das mit einem UNIX-System verbunden ist, wird man durch die untenstehende Eingabeaufforderung begrüßt:

 

login: 

 

Nun muß man seinen Benutzernamen eingeben und die Eingabe mit der [Enter]-Taste abschließen. Danach wird man nach seinem Passwort gefragt. Die Eingabe des Passwortes  wird nicht auf dem Bildschirm angezeigt. Neugierige Zeitgenossen werden also nicht mit ihrem Passwort belont, wenn Sie Ihnen beim einloggen über die Schulter schauen.

Bei der Eingabe von beidem, Benutzername und Passwort, gibt es allerdings noch etwas zu beachten. UNIX ist ‚case sensitive‘, unterscheidet also nach Groß- und Kleinschreibung.

‚Username‘, ‚username‘ oder ‚UsErNaMe‘ sind also nicht dasselbe.Achten Sie also auf die Art und Weise in der Sie ihre Eingaben machen. Im Falle einer falschen Angabe bei der Anmeldung antwortet der Rechner mit:

 

 login incorrect

 

Nun müssen Sie es nochmals versuchen. Ein korrekter Login an der Konsole Sieht dann wie folgt aus:

 

      login:  Superman        [Enter]

      password:               [Enter]

     

      $

 

Seitdem es auch UNIX mit graphischen Benutzerumgebungen á la Windows gibt, kann man sich selbstverständlich auch direkt im graphischem System anmelden. Der Anmeldevorgang läuft hier analog ab, allerdings bekommt man ein Login-Fenster präsentiert. An der Anmeldung kann man aber nicht durch einen Klick auf ‚abbrechen‘ vorbeikommen.

Sicher ist nunmal sicher!

 

Wenn Sie sich richtig angemeldet haben, startet UNIX ihre Shell und setzt Sie in Ihr Home-Verzeichnis. Die Shell ist ein Programm, das Sie mit UNIX kommunizieren läßt. Näheres dazu erfahren Sie aber im nächsten Kapitel. 

Das Home-Verzeichnis ist für Sie von besonderer Bedeutung. In diesem können Sie tun und lassen was Sie wollen. Uns weil Sie sich dort wie zu Hause fühlen dürfen, heißt es auch auf Deutsch Heimatverzeichnis, oder kurz Heimverzeichnis. Was ein Verzeihnis ist erfahren Sie etwas später in Kapitel  5.

 

Jetzt wollen wir uns aber erstmal nicht überfordern. Deswegen verlassen wir das System auch gleich wieder. Dazu gibt es bei UNIX gleich 3 Möglichkeiten.

 

1.      Sie geben logout ein

2.      Sie geben exit ein

3.      Sie drücken die Tasten Strg und D gleichzeitig

         

Die erste Möglichkeit ist die Traditionelle Art sich zu verabschieden. Mit exit beenden Sie eigentlich die Shell. Aber da Sie sonst nicht mit UNIX ‚sprechen‘ können, werden Sie einfach abgemeldet. Das Drücken von Strg+D ist bei manchen UNIX-Systemen nicht ganz ohne Probleme einsetzbar. Es kann zum Beispiel Ihre Terminaleinstellungen vor Verlassen des Systems verändern. Gehen Sie also auf Nummer sicher, und verwenden Sie Methode eins.      

 

 

3                 Shell-Grundlagen

3.1                                 Die Shell als Kommandointerpreter

 

Im vorherigen Kapitel haben wir die Shell schon erwähnt . Allerdings wurde hier noch nicht erklärt was die Shell denn nun ist. Um das Konzept der Shell zu verstehen, betrachten wir zunächst den theoretischen Aufbau von UNIX.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Die obere Abbildung zeigt das sogenannte Schalenmodell, welches oft im Zusammenhang mit Betriebssystemen gezeigt wird. Es hat für UNIX eine besondere Bedeutung, da UNIX sich besonders streng daran hält.

Wie man erkennen kann, hat nur der Kernel die Möglichkeit auf die Hardware zuzugreifen. Der Kernel ist der Betriebsystemkern, man kann also sagen, er ist das eigentliche UNIX. Rund um die ‚Kernel-Schale‘ liegen die Programme. Sie können über Systemaufrufe mit dem Kernel kommunizieren und ihn zu Hardwarezugriffen bringen.

 

Durch die Tatsache, daß die Programme nicht selbst auf die Hardware-Ressourcen zugreifen können, erhält UNIX seine Stabilität und Sicherheit. Denn nur der Kernel entscheidet was erlaubt ist und was nicht.

 

Eines dieser Programme ist die Shell. Shell heißt auf Englisch Schale, und so soll die Shell eigentlich noch eine weitere Schale im Modell darstellen. Die Shell bildet das Bindeglied zwischen den Programmen und den Benutzern. Sie ermöglicht es uns Programme zu starten und zu kontrollieren. Geduldig wartet Sie auf unsere Eingaben, interpretiert diese und führt dann das aus, was wir ihr zugetragen haben. Deswegen wird Sie auch oft als Kommando- interpreter bezeichnet.

 

Eigentlich ist es falsch von der Shell zu sprechen. Denn im Unterschied zu anderen Betriebsystemen gibt es derer unter UNIX mehrere. Da wäre zum Beispiel die ‚Ur-Shell‘, nach ihrem Erfinder Bourne-Shell genannt. Abgekürzt heißt Sie sh.

Sie war eine der ersten Shells und ist auf jedem UNIX Rechner vorhanden. Da die Bourne-Shell aber noch recht Benutzerunfreundlich war, entwickelten findige Programmierer im Laufe der Zeit weitere Shells. Die wichtigsten sind die Korn- und die C-Shell.

Sie unterscheiden sich im wesentlichen durch zusätzliche Funktionen von der sh. Dementsprechend hat man also heute die Qual der Wahl wenn man sich für eine Shell entscheiden will.

 

Die Shell bietet dem Benutzer aber weit mehr als ihre Funktion als Kommandointerpreter. So kann man sich seine Shell auf seine Bedürfnisse anpassen (man spricht hier von einer Benutzerumgebung) oder Befehle von UNIX zu größeren Programmen zusammenfassen (Shell-Scripte).

 

Für Sie, als Benutzer ist dies aber erstmal nebensächlich. Denn Sie interesSieren sich zunächst nur dafür, wie Sie mit der Shell umgehen können. Nehmen wir an, Sie hätten sich jetzt am System angemeldet. Gegebenenfalls hat UNIX Ihnen dann einige Meldungen um den Kopf geworfen, dann aber wurde es ganz still. Sie sehen nun nur noch den Cursor vor sich blinken.

Eigentlich befinden Sie sich jetzt schon in der Shell und diese wartet auf Ihre Eingabe.

Das könnte dann so aussehen:

 

[Falcon] $ _

 

Falcon ist der Rechnername, und das Dollarzeichen ist der Prompt, also die Eingabeaufforderung der Shell. Vielleicht haben Sie Glück, und die Shell meldet sich mit # als Prompt. Dann sind Sie als root   angemeldet, also als Systemverwalter.

Falls sich Ihre Shell mit dem Prozentzeichen meldet ist auch alles in Ordnung, denn dies ist der Prompt der C-Shell.

 

Neben dem normalen Prompt gibt es noch den Hilfsprompt (>), der immer dann auftritt, wenn die Shell auf weitere Angaben wartet.

 

Sobald Sie einen Prompt bekommen, ist es Ihnen möglich der Shell Anweisungen zu geben. Diese können Sie anhand von Befehlen erteilen. Befehle sind eigentlich Programme, die die Shell startet. Die allgemeine Form einer Befehlseingabe lautet:

 

$ Befehl [-Option] [Agument 1] [Argument 2] ... [Argument N]

 

Diese Schreibweise ist ein UNIX-Standard und wird Ihnen noch desöfteren begegnen. Die Angaben in eckigen Klammern können angegeben werden, müssen es aber nicht. Eine Option steuert die Art in der ein Programm ausgeführt wird. So würde die Option –lesen in einem fiktiven Programm z.B. dazu führen das daß Programm eine Datei zum Lesen öffnet. Die Eingabe würde dann lauten:

 

$ fiktiv –lesen

 

Hier müssen Sie das Dollarzeichen nicht miteingeben. Ich schreibe es nur hin, damit Sie wissen das es sich um eine Eingabe handelt. Das Minuszeichen ist allerdings obligatorisch, weil es dem Programm zu verstehen gibt, das es sich hierbei um eine Option und nicht um ein Argument handelt. Als Trennzeichen zwischen den Befehlen, Optionen und Argumenten müssen entweder Leerzeichen oder Tabulatoren verwendet werden.

Optionen können meistens in beliebiger Zahl angegeben und kombiniert werden. Es versteht sich von selbst, daß man sinnvolle Kombinationen wählt.

 

$ fiktiv –lz

 

Dieses Beispiel zeigt eine weitere Besonderheit. Oft werden Optionen nämlich nur in Kurzform angebeben. Hier könnte –lz bedeuten, das daß Programm fiktiv die Datei zeilenweise lesen soll. Fragt sich jetzt nur welche Datei geöffnet werden soll.

Genau dieses können wir dem Programm mit einem Argument mitteilen. Das letzte Beispiel hätte bestimmt eine Fehlermeldung durch das Programm verursacht. Hier also die richtige Eingabe um die Datei Zeitung zu öffnen:

 

$ fiktiv –lz Zeitung

 

Argumente sind also folglich Übergabe werte an das Programm. Durch Sie weiß es an was es etwas zu tun hat. Zum Beispiel könnte man einem Sortierprogramm einen Dateinamen als Argument geben. Dadurch wüßte das Programm welche Datei es zu sortieren hätte.

Fehlen einem Programm Optionen oder Angaben, reagiert es entweder mit einer Fehlermeldung oder mit Schweigen.

         

Nach der Eingabe eines Kommandos, sucht die Shell nach dem Programm, startet es und übergibt diesem die Optionen und Argumente. Wenn Sie das Programm nicht findet,  reagiert die Shell mit einer Fehlermeldung.

 

sh: command not found

 

Probieren Sie dies einmal aus, indem Sie irgend etwas eingeben.

Übrigens können Sie nicht nur einen Befehl in einer Zeile angeben, sondern beliebig viele. Damit die Shell weiß, wo der nächste Befehl anfängt, müssen Sie aber ein Trennzeichen eingeben. Dieses ist meistens das Semikolon.

 

Hier ein Beispiel:

 

$ clear; echo Hallo user; logout

 

Dieses Beispiel würde den Bildschirm löschen, ‚Hallo user‘ ausgeben und den Benutzer abmelden. Dabei wird jedes Programm nach dem Beenden des vorangehenden gestartet.

 

 

3.2                                 Metazeichen

 

Die Shell erleichtert uns oft den Umgang mit dem System. Ein Mittel dazu sind die sogenannten Metazeichen. Diese, oft auch Wildcards oder Joker genannten Zeichen werden automatisch von der Shell ersetzt, sobald Sie auf diese in der Eingabezeile trifft. Die folgende Tabelle zeigt die Standard-Metazeichen aller Shells:

 

 

Metazeichen

Wird ersetzt durch

*

Beliebige Zeichenfolge

?

Beliebiges Zeichen

[ ... ]

Durch Angabe spezifiziertes Zeichen

 

 

Der Stern wird durch einen beliebigen Text ersetzt. So kann man z.B. einem Programm mitteilen, daß es alle Dateien die mit ‚AT‘ anfangen öffnen soll, indem man ihm AT* als Argument übergibt. Nehmen wir an es gäbe 100 Dateien die dieser Angabe entsprechen würden. Können Sie sich vorstellen wieviel Zeit Ihnen durch den Stern gespart wurde?

 

Ein weiteres Beispiel: In Ihrem Heimatverzeichnis befinden sich 55 Dateien. Zweiundfünfzig davon haben Sie als Wochenberichte angelegt und diese fortlaufend numeriert. Ein Wochenberichtsnamen hat also die Form ‚WochenberichtXX‘, wobei das X durch eine Zahl  gefüllt ist. Der dritte Wochenbericht würde z.B. Wochenbericht03 heißen.

 

Nun wollen Sie zum Beispiel nur die Wochenberichte von 10-19 zum Lesen öffnen. Weil Sie etwas Schreibfaul sind, möchten Sie nicht alle zehn Dateinamen eingeben. Jetzt könnten Sie zwar auch ‚Wochenbericht1*‘ als Argument angeben, aber leider haben Sie noch 3 Dateien mit den Namen Wochenbericht12a, Wochenbericht12b und Wochenbericht123 in Ihrem Verzeichnis. Mit ‚Wochenbericht1*‘ würden Sie nun alle Wochenberichte meinen, die mit ‚Wochenbericht1‘ anfangen. Was nun?

 

Ein Blick in die Tabelle hilft uns weiter: Das Fragezeichen ersetzt einzelne Zeichen. Wir geben also ein (angenommen das Programm heißt zeige):

 

$ zeige Wochenbericht1?

 

Somit werden dem Programm von der Shell die Namen aller Dateien, die auf das o.g. Muster passen übergeben (Wochenbericht10-Wochenbericht19).

Angenommen, Sie wissen, das etwas entweder in Woche 15, 16 oder 17 statt gefunden hat. Können wir uns nicht noch einmal Tiparbeit sparen ? Die Shell macht’s möglich.

 

Mit eckigen Klammern kann ein  Zeichen aus einem bestimmten Bereich ersetzt werden. Es können entweder Zahlen oder Buchstaben angegeben werden. Im oberen Beispiel muß die Klammer also [5-7] lauten, da die letzte Stelle der Zahl durch 5, 6 oder 7 ersetzt werden soll.

 

$ zeige Wochenbericht1[5-7]

Wollten Sie nun Wochenbericht12a und Wochenbericht12b lesen, so würden Sie [a-b] angeben, weil der Bereich von a bis b eingesetzt werden soll. Natürlich macht das ganze erst bei sehr vielen Dateien Sinn. Sie können  auch folgendes angeben:

 

$ zeige Datei[ANZ]

 

Nun würden Sie alle Dateien sehen, deren Namen mit Datei anfängt und mit einem A,N oder Z als Buchstaben aufhört.

 

Soweit zu den Metazeichen der Shell. Manchmal möchte man, z.B. bei Shellscripten, das die Ausgabe eines Programms in die Befehlszeile eines anderen gesetzt wird. Zum Beispiel könnte man ein Programm alle Dateien in einem Verzeichnis finden lassen, die nach einem bestimmten Datum verändert wurden, und deren Namen einem Sicherungsprogramm übergeben. Hier gibt es zwei Möglichkeiten:

 

1.      Man schreibt das Such-Programm in Hochkomata (´)

2.      Man schreibt $(Suchprogramm)

 

Zu beidem noch ein konkretes Beispiel:

 

$ Sicherungsprogramm ´Suchprogramm´

 

oder:

 

$ Sicherungsprogramm $(Suchprogramm)

 

 

Wie man Sieht bietet UNIX vielerlei Möglichkeiten ein Problem zu lösen. Aber man muß auch noch sagen, daß dies nur die Spitze des Eisbergs ist. UNIX bietet dem Benutzer noch viel mehr solcher Tricks, und zudem hat jede Shell noch ihre eigenen Spezialitäten.

 

3.3                                 Ein- und Ausgabeumleitung

 

Im letzten Beispiel wurde die Ausgabe eines Programms in die Befehlszeile eines anderen übernommen.  Unter UNIX gibt es noch weitere ‚Spielereien‘, die man mit der Ausgabe eines Programms machen kann. So kann man z.B. die Ausgabe eines Programms direkt in einer Datei speichern. Dafür behilft man sich der Ausgabeumleitung.

 

Da UNIX ein Multi-User Betriebssystem ist, bietet es auch die Möglichkeit, mehrere Terminals (also Tastaturen und Bildschirme) gleichzeitig zu bedienen. Es gibt also prinzipiell nicht nur einen Monitor, sondern viele. Um die Programmierarbeit einfach zu halten, haben die UNIX Entwickler jedem Benutzer oder jedem Programm eine Standard-Eingabe (z.B. Tastatur), Standard-Ausgabe (z.B. Bildschirm) und eine Standard-Fehlerausgabe (auch meistens ein Bildschirm) zugeteilt.

 

 

Englische Bezeichnung

Funktion

stdin(0)

Standard-Eingabe, nimmt Eingaben des Users auf

stdout(1)

Standard-Ausgabe, gibt Ausgaben von Programmen aus

stderr(2)

Standard-Fehlerausgabe, gibt Fehlermeldungen von Programmen aus

Wie Sie oben sehen können, werden Ihre Eingaben der Shell über ihre Standard-Eingabe übergeben. Die Shell und die anderen Programme schreiben ihre Ausgaben dann entweder in die Standard-Ausgabe oder die Standard-Fehlerausgabe. Um den Rest kümmert sich das Betriebsystem.

 

 

 

 

 

 


Veranschaulichen wir den Sachverhalt mit dem Befehl cat. Cat kommt vom englischen Wort concatenate, was soviel wie anhängen bedeutet. Es nimmt Daten von seinem Standard-Eingang auf und hängt diese an eine Datei an. Geben Sie bitte folgendes ein:

 

$ cat

         

Wenn Sie alles richtig gemacht haben, werden Sie erkennen, das Ihr Prompt weg ist. Geben Sie nun etwas ein, z.B. Hallo, gefolgt von der [Enter]-Taste. Wie Sie sehen können, wiederholt cat Ihre Eingabe. Um dem Spuk ein Ende zu bereiten drücken Sie gleichzeitig die Strg und D-Taste.Was macht cat nun wirklich? Nun zuerst geben Sie ja den Text über die Standard-Eingabe ein, er erscheint auch gleichzeitig am Bildschirm (Stdout). Dann nimmt cat Ihre Eingabe auf und gibt Sie auf seiner Standard-Ausgabe wieder aus. Weil Sie das Programm gestartet haben, ist Ihre Standard-Ausgabe auch seine.

 

Nun gibt es bei UNIX die Möglichkeit die Standard-Eingabe und Sie Standard-Ausgaben umzuleiten. Das heißt z.B., das ein Programm seine Ausgabe direkt in eine Datei schreiben kann, statt Sie auf dem Bildschirm auszugeben.

Folgende Umleitemöglichkeiten stehen Ihnen zur Verfügung:

 

 

Umleitezeichen

Folge

>

Umleitung von stdout eine Datei

2>

Umleitung von stderr in eine Datei

>>

Anhängen von stdout an eine Datei

<

Ein Programm nimmt eine Datei als stdin an

 

Hierzu einiger Beispiele mit cat:

 

$ cat > cat-datei

 

Cat nimmt wieder die Eingaben entgegen, schreibt diese aber jetzt in die Datei cat-datei. Dies ist eine schnelle und einfache Art eine Datei zu erzeugen. Sollte die Datei cat-datei allerdings schon bestehen, so wird deren Inhalt überschrieben.

 

 

 

 

 

 

 

 


$ cat 2> cat-err

 

Cat schreibt seine Ausgaben wieder auf den Bildschirm. Wenn Fehler auftreten, werden die Fehlermeldungen jedoch in die Datei cat-err geschrieben.

 

$ cat >> cat-datei

 

Cat nimmt Eingaben entgegen und hängt diese an den bestehenden Inhalt der Datei cat-datei an.

 

 

 

 

 

 

 

 

 


$ cat < text.txt

 

Cat nimmt den Inhalt der Datei text.txt als (Standard-) Eingabe und ihn auf dem Bildschirm aus.

         

Eigentlich  wird cat benutzt um mehrere Dateien zusammenzufügen. Dies erledigt dieses Beispiel:

 

$ cat datei1 datei2 dateiN > enddatei

 

Nehmen Sie sich die Zeit und Probieren Sie die bisherigen Beispiele aus.

Die Ein-/Ausgabeumleitung ermöglicht Ihnen die Ausgaben eines Programmes zu speichern. Zudem bieten verschiedene Shells noch weitere Möglichkeiten.

 

3.4                                 Pipelining

 

Eine der Möglichkeiten ist das sogenannte Pipelining. Es gehört zum Standardprogramm aller Shells und ist ausgesprochen nützlich. Pipelining ermöglicht es, die Ausgabe eines Programms einem anderen als Eingabe zu geben. Eine Pipeline verbindet also die Standard-Ausgabe eines Programms mit der Standard-Ausgabe eines anderen Programms.

 

 

 

 

 

 

 

 


Durch den Einsatz von Pipelines, oder kurz Pipes, wird es möglich aus vielen kleinen spezialiSierten Programmen ein großes zu bauen. Und genau das ist ein weiteres Grundprinzip von UNIX, welches es so erfolgreich gemacht hat. Programme werden sozusagen als Werkzeuge angesehen, die wie bei einem Baukasten zusammengesetzt werden können um eine komplexe Aufgabe zu erledigen. Als Anwender muß man also nicht warten, bis ein Programm für ein Problem geschrieben wird, man schneidert es sich einfach selbst aus den vorhandenen Programmen. Sehr wichtig ist das Pipelining vorallem in der Script-Programmierung.

Zur Verbindung zweier Programme wird das | Zeichen, auf manchen Systemen auch der accent grave (^) verwendet.

 

Allgemeine Syntax:

 

$ Programm | Programm2

 

Hier wird Programm mit Programm2 verkettet. In einer Kommandozeile können Sie beliebig viele Programme mit Pipes verbinden. Zum Beispiel könnten Sie folgendes eingeben:

 

  $ Programm|Programm2|Programm3|Programm4|Programm5|Programm6  ...

 

Wie Sie sehen können, muß vor und nach dem Pipe-Zeichen kein Leerzeichen stehen.

Nun aber zu einem Beispiel, das Sie auch anwenden können. Geben Sie folgendes ein:

 

 $ ls –al /bin/ | cat

 

Die Ausgabe des Programms ls (dazu im Kapitel 5 mehr) wird cat übergeben, welches Sie am Bildschirm ausgibt. Nun ist sicher ein großer Teil der Ausgabe an Ihnen ‚vorbeigerauscht‘, so das Sie nur die letzten Zeilen der Ausgabe lesen konnten. Praktischer wäre es, wenn cat Ihnen die Ausgabe Bildschirm für Bildschirm zeigen würde. Leider kann cat dies nicht. Aber das Programm more ist für eben diese Aufgabe geschrieben worden.

 

Hier ein Überblick über die Programminternen Kommandos von more:

 

Kommando-Taste

Auswirkung

[Enter]

Zeigt die nächste Zeile an

[Space] oder [Leerzeichen]

Zeigt die nächste Bildschirmseite an

[b]

Zeigt die vorherige Bildschirmseite an (back)

[l]

 

[h]

Aufrufen der Hilfefunktion, [Esc] zum verlassen der Hilfe drücken

[q]

Beendet more (quit)

 

Die Kommando-Tasten werden nach dem Start von more gedrückt. Rufen Sie jetzt am besten selbst das nächste Beispiel auf und experimentieren Sie welche Auswirkungen die einzelnen Tasten haben.

 

$ ls –al |more

 

Mit more kann man auch den Inhalt von Textdateien ansehen. Sie sollten jetzt aber über genügend Wissen verfügen, um selbst herausfinden zu können wie more dazu bringen können. Auf manchen UNIX-Systemen fehlt der more-Befehl. Hier findet sich das Programm pg oder page, welches wie more funktioniert.  Auf anderen Systemen befindet sich zusätzlich zu more auch noch das Programm less. Less ist more sehr ähnlich, bietet aber eine komfortablere Handhabung.

 

3.5                                 Ein Tässchen Tee bitte!

 

Im vorherigen Kapitel haben Sie gelernt, wie man zwei Programme wie mit einer Rohrleitung verbinden kann. Manchmal ist es bei Verküpfungen von vielen Programmen mit Pipelines ganz nützlich einzelne Zwischenschritte zu protokollieren. Für diesen Zweck wurde das Programm Tee geschrieben.

 

Sein Name leitet sich von der Tatsache ab, das tee wie ein T-Stück in einer Rohrleitung funktioniert. Tee ist nämlich die englische Bezeichnung von T. Hier eine Abbildung zur Veranschaulichung von Tee:

 

$ programm1 | tee Datei |Programm2

 

entspricht:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Statt in eine Datei kann man die Ausgabe natürlich auch in ein anderes Programm fließen lassen. Eben wie bei einem T-Stück.

 

 

3.6                                 Wichtige Tastaturkürzel

 

Beim Arbeiten mit UNIX werden Sie oft Tastaturkürzel benutzen können. Die Shell reagiert auf diese und führt dementsprechend Aktionen aus. Mit Tastaturkürzel ist im folgenden das gleichzeitige drücken der Strg-Taste (Steuerung, auf manchen Tastaturen Ctrl) und einer anderen gemeint. Wenn Sie also z.B. Strg+C drücken wollen, so müssen Sie die Strg- und die C-Taste gleichzeitig drücken. Die folgende Tabelle gibt einige Kürzel der Bourne-Shell wieder, die auch in allen anderen Shells funktionieren:

 

Tastenkombination:

Auswirkung:

Strg+C

Das laufende Programm wird abgebrochen

Strg+D

Einsetzen des Zeichen für Dateiende (EOF)

Strg+S

Ausgabe anhalten

Strg+Q

Ausgabe wieder  fortlaufen lassen

Strg+U

Kommandozeile löschen

 

 

Statt der Schreibweise Strg+C wird in der UNIX Literatur auch oft nur ^C geschrieben. Vielleicht verstehen Sie jetzt auch weshalb das drücken von ^D in einem der vorherigen Beispiele cat dazu veranlasst hat, mit der Aufnahme der Eingabe aufzuhören.

         

 

4                                      Help, I need somebody, help!

Ein UNIX-System hat zwischen 100 und 1500 Befehlen. Dazu kommen noch mindestens ein Dutzend Optionen und Argumente pro Programm.  Da kann man sich nicht alle Optionen  und Programme merken. Sicher ist es Ihnen auch bereits so ergangen: Sie haben einen Befehl eingetippt und haben eine Fehlermeldung erhalten mit der Sie recht wenig anfangen konnten. Was nun? Dieses Kapitel soll Ihnen Hilfe zur Selbsthilfe bieten.

 

4.1                                 Das Programm – dein Freund und Helfer

 

Wie die Überschrift schon sagt, kann uns ein Programm schon selbst ein wenig helfen. Zum Beispiel können wir die Shell mit dem Befehl help um Hilfe bitten. Sie wird uns dann eine Liste ihrer internen Befehle mitsamt einer kurzen Eingabebeschreibung liefern. Probieren Sie dies jetzt aus, indem Sie folgendes eingeben:

 

$ help

 

Gegebenenfalls werden Sie nun mehrere Bildschirmseiten an Beschreibungen erhalten, benutzen Sie also more, um sich einen Überblick zu verschaffen.

Zusätzlich können Sie help noch den Namen eines internen Kommandos als Argument übergeben. Die Shell bietet Ihnen dann eine genauere Beschreibung jenes Kommandos.

Probieren Sie auch dies mit einem Kommando ihrer Wahl, welches Sie in der vorherigen Ausgabe von help erspäht haben.

 

Nun bietet die Shell zwar schon recht viele Befehle an, jedoch befindet sich die Mehrzahl der verfügbaren Programme außerhalb der Shell. Informationen über diese Programme erhalten Sie oft durch die Angabe der Option --help. Geben Sie nun das nächste Beispiel ein:

 

$ more --help

 

More zeigt Ihnen nun seine Syntax, also wie Sie die Optionen uns Argumente anzuordnen haben. Andere Programme reagieren auch auf die Kurzform –h, jedoch ist --help ein Quasistandard unter UNIX-Programmen. Die Ausführlichkeit der Hilfe unterscheidet sich aber von Programm zu Programm. Manche halten sich kurz, wie more, andere sind sehr Ausführlich.

 

Letztenendes geben manche Programme schon einen Hifebildschirm aus, wenn Sie garkeine Optionen oder Argumente angeben.

 

4.2                                 Die Manpages

 

Die Hilfe, die Sie von einem Programm erhalten ist wie gesagt meistens sehr knapp. Zudem erhalten Sie keine Beschreibung aller Argumente und Optionen eines Programms. Zum Glück verfügt jeder UNIX-Rechner über ein ‚eingebautes‘ UNIX Handbuch: Die Manpages.

 

Die Manpages können Sie jederzeit lesen, solange Sie mit UNIX arbeiten, man sagt deshalb auch Online-Handbuch dazu. In den Manpages befinden sich Beschreibungen zu allen UNIX Programmen, die auf Ihrem Rechner installiert sind, sowie weitere Beschreibungen zu vielen Systeminternen Dateien usw.

Aufgerufen wird es durch folgende Kommandozeile:

 

$ man [option] programmname

 

Wollen Sie z.B. mehr über cat wissen, würden Sie

 

$ man cat

 

eingeben. Nach dem Aufruf von cat kann es ein wenig dauern bis etwas auf dem Monitor erscheint. Angenommen, Sie wissen nach, das es einen Befehl zum finden einer Datei gibt, können sich aber nicht an seinen Namen erinnern. Dann können Sie man mit der Option –k (keyword, engl. Schlüsselwort) aufrufen:

 

$ man –k find

 

Man sucht jetzt in allen manpages , also den Dateien welche die Beschreibngen enthalten, nach dem Schlüsselwort und zeigt jene an, die es enthalten. Man benutzt more um die manpages  Seitenweise anzuzeigen. Um die nächste Seite anschauen zu können müssen Sie also  die Leertaste drücken.

 

Probieren Sie mit man aus, Informationen über cat und  more zu erhalten. Versuche Sie auch Sie Option -k.

 

 

Wie eben schon erwähnt, werden die Manpages in verschiedenen Dateien gespeichert. Zusätzlich sind diese noch in verschiedene Kategorien eingeteilt:

 

 

Manpage

Kategorie

Man 1

Benutzer Befehle

Man 2

Systemaufrufe

Man 3

Library Funktionen

Man 4

Spezielle Dateien

Man 5

Dateiformate

Man 6

Spiele

Man 7

Weiteres

Man 8

Systemadministator Befehle

Man n

Textformatierungsprogramme, Macros

 

Um z.B. herauszufinden was das Programm useradd macht, können Sie eingeben:

 

$ man 8 useradd

 

Spätestens jetzt werden Sie bemerkt haben, das jede Manpage nach einem bestimmte Schema aufgebaut ist. Hier ist also  Beschreibung dieses Aufbaus:

Gefaltete Ecke: 	
Kopfzeile  	Name des Programms und Seitennummer
Name		Schreibweise des Kommandos, kurze Erklärung von Funktion und Zweck
Synopsys	Knappe Zusammenfassung, Syntax des Programms
Description	Ausführliche Beschreibung der Optionen und Argumente
Options	Beschreibung  der Optionen
Files		Beschreibung der zur Ausführung gebrauchten Dateien
Diagnostics	Fehlermeldungen sowie besondere Hinweise
Warnings	Fehlermeldungen
Example	Beispiele
See also	Kommandos mit ähnlicher Funktion	
Bugs		Programmfehler
 


         

 

 

 

 

 

 

 

 

 

Manche der o.g. Einträge können auch fehlen. Das ist von System zu System und von Hersteller zu Hersteller verschieden. Beispielsweise kommt der Punkt Bugs nicht bei allen Unicen vor.

 

Wenn Sie aber nur kurz wissen wollen, was ein Programm tut, so können Sie auch das Kommando whatis benutzen. Finden Sie jetzt mit Hilfe der Manpages heraus, was whatis tut.

 

 

5                 Navigation im UNIX-Labyrinth

5.1                                 Verzeichnisse und Dateien

 

Nachdem Sie jetzt wissen, wie man mit der Shell umgehen und wie Sie sich Hilfe beschaffen können, wird es Zeit endlich zu erfahren wie man mit Dateien und Verzeichnissen arbeitet.

 

Zunächst sollten wir klären was eigentlich mit einer Datei gemeint ist. Nun, eine Datei ist eine Ansammlung von Daten, die in einem Stück auf einem Datenträger gespeichert ist. Ein Text kann in einer Datei stehen, es können aber auch Programme darin enthalten sein (Binärdateien). Diese zusammenhängenden Daten bilden also eine Einheit, die Datei.

 

Ein Verzeichnis ist für UNIX eine besondere Art von Datei. Denn es enthält eine Liste aller in ihm befindlichen Dateien und Verzeichnisse. Verzeichnisse sorgen für Ordnung und Struktur im Wirrwarr der unzähligen Dateien eines UNIX-Systems.  Sie fassen Dateien zu Gruppen zusammen.

 

Wie gesagt befinden sich in einem Verzeichnis meist mehrere Dateien. Um diese unterscheiden zu können hat jede Datei ihren eigenen Dateinamen. Es versteht sich von selbst, das zwei Dateien im selben Verzeichnis nicht denselben Namen haben können.

 

Ein Dateiname darf bis zu 256 Zeichen lang sein. Auf einigen älteren UNIX-Systemen sind 14 Zeichen das Maximum. Im Dateinamen können Sie bis auf den Shlash (/) alle Zeichen verwenden. Das heißt Ihr Dateiname darf fast alle Buchstaben, Zahlen und sonstige Zeichen die Sie auf der Tastatur finden können enthalten.

 

Vorsicht! Sie dürfen zwar fast alle Zeichen verwenden, aber das heißt noch lange nicht, daß  dieses auch sinnvoll ist.  Wenn Sie z.B. Metazeichen verwenden, bekommen Sie mit der Shell Probleme. Zudem gibt es bestimmte Kombinationen von Zeichen, die von der Shell als Steuerzeichen aufgefasst werden (z.B. \n). Es macht auch keinen Sinn einen Dateinamen mit einem Minuszeichen zu verwenden, da die Programme dann nicht wissen ob es sich um eine Option oder eine Datei handelt.

 

Dateinamen, die mit einem Punkt anfangen, werden normalerweise nicht angezeigt. Deshalb nennt man diese Dateien auch versteckte Dateien. Von diesen versteckten Dateien gibt es zwei, die eine besondere Bedeutung haben:

 

Datei

Bedeutung

.

Aktuelles Verzeichnis

..

Nächsthöheres Verzeichnis

 

Wir werden auf die 2 Dateien später nocheinmal zurückkommen.UNIX kennt, im Gegensatz zu anderen Betriebsystemen keine besondere Dateinamensendung. Eine Datei kann also im Prinzip alles mögliche enthalten. Für UNIX ist eine Datei eine Datei. Punkt.

Trotzdem kann UNIX aber durch die Dateimodi zwischen den Inhalten von Dateien unterscheiden.  Die Dateimodi bestimmen über die Dateiart, die Zugriffsrechte usw., und sind in einer Art Tabelle gespeichert.

Für uns sind aber zunächst nur die Dateiarten relevant:

 

Dateiarten Bezeichnung

Bedeutung

-

Normale Datei

d

Verzeichnis (Directory)

l

Symbolischer Link

c

Charackter Device

b

Block Device

p

Pipe Datei

s

Socket

         

In der alltäglichen Arbeit mit UNIX werden Sie nur den ersten drei Dateiarten begegnen. Für Systemadministratoren haben die Dateiarten c und b besondere Bedeutung, auf die aber hier genausowenig eingegangen wird wie auf die zwei letzten, die für Programmierer wichtig sind. Sie sollen nur der Vollständigkeit wegen erwähnt sein.

 

Ein zentrales Konzept von UNIX ist es, für alles eine einheitliche Schnittstelle bereitzustellen. Dies erleichtert Programmierern und Benutzern oft die Arbeit mit UNIX. Diese einheitliche Schnittstelle ist die Datei. Man kann also sagen daß bei UNIX alles wie eine Datei gehandhabt wird. So sind z.B. auch Geräte, wie z.B. die Tastatur, für das System nichts anderes wie Dateien. Sie haben dies auch schon im Kapitel Ausgabeumleitung praktisch erfahren.

 

         

5.2                                 Das hierarchische Prinzip des UNIX-FS und das Root-Dateisystem

 

Sie wissen bereits, das Verzeichnisse auch andere Verzeichnisse enthalten können. Man nennt diese Ordnung hierarchisch, da Sie von einem Basisverzeichnis ausgeht, in welchem dann andere angelegt werden können. Bildlich Sieht solch ein hierarchisches Dateisystem wie ein Baum aus, weshalb man das Basisverzeichnis auch Wurzelverzeichnis nennt.

 

 

 

 

 

 

 

 

 

 

 


Im obereren Beispiel sehen Sie die Struktur eines fiktiven Dateisystems. Das Wurzelverzeichnis befindet sich ganz oben uns hat den Namen /. Dies ist unter UNIX der Bezeichner für das Root-Directory (engl. für Wurzelverzeichnis).  Unterhalb des Wurzelverzeichnisses befinden sich 4 sogenannte Unterverzeichnisse, in denen sich teilweise ebenfalls Unterverzeichnisse befinden. Auf der Abbildung können Sie die Hierarchie deutlich erkennen.

 

Schauen wir uns das Homeverzeichnis genauer an. Sein Pfad beginnt mit dem Slash (/), worauf sich sein Name anschließt. Der Slash ist nicht nur der Bezeichner für das Root-Directory, er dient auch als Trennzeichen zwischen den einzelnen Verzeichnisnamen in einem Pfad. Vielleicht verstehen Sie jetzt auch, warum er nicht in einem Dateinamen vorkommen darf. Ein Pfad ist der Weg, den Sie gehen müssen, um vom Wurzelverzeichnis ein Unterverzeichnis zu gelangen. In einem Pfadnamen dürfen sich keine Leerzeichen befinden.

 

Zum Beispiel lautet der Pfad /home/MrB/daum, um von / über das Unterverzeichnis home und über dessen Unterverzeichnis MrB in das Verzeichnis daum zu gelangen. Wie Sie sehen können Setzt sich ein Pfadname nach folgender Formel zusammen:

 

   Pfad           =   /  + Unterverzeichnis +  /   + Unterverzeichnis ...

 

z.B. /home/MrB = / + home        + / + MrB

 

Ein vom Wurzelverzeichnis ausgehender Pfad wird auch als absoluter Pfad bezeichnet. Daneben gibt es auch einen relativen Pfad. Relative Pfade beziehen sich auf das Verzeichnis, indem sich ein Benutzer gerade befindet. Im Gegensatz zu absoluten Pfaden beginnen relative Pfade nicht mit dem Slash. Ein Beispiel für einen relativen Pfad wäre texte/fun. Angenommen, Sie befänden sich in dem Verzeichnis /home/MrB, dann würde der absolute Pfad des Verzeichnisses fun   /home/MrB/texte/fun lauten.

 

Wie Sie sehen können sparen relative Pfade Tipparbeit. Eine gebräuchliche Art der relativen Pfade beginnt mit der Angabe der schon vorher genannten Punktdateien . und .. . Das Verzeichnis ./fun beizeichnet so beispielsweise ausgehend vom aktuellen Verzeichnis das Unterverzeichnis fun. Wenn Sie annehmen, Sie befänden sich gerade im Verzeichnis /home und Sie wollten eine Datei in /usr anschauen, so könnten Sie als Pfad dort hin ../bin schreiben.

 

Schauen wir uns an dieser Stelle das UNIX Dateisystem etwas genauer an. In dem Dateisystem befinden sich einige Standard-Einträge, die auf allen UNIX-Systemen vorhanden sind. Durch seine besondere Anordnung gewährleistet UNIX eine Trennung von sensiblen Daten.

 

 

 

                      /           Wurzelverzeichnis

                      /bin      Wichtigste Befehle für alle Benutzer

                      /etc      Konfigurations- und informationsdateiten

                      /usr     Alle wichtigen Programme, Manpages, Documentationen

                                 /usr/bin            wie /bin

                                 /man               Manpages

                                

                      /dev     Gerätedateien

                      */var    Informations- und Verwaltungs-Dateien des Systems (altes Unix: /etc)

                                 /var/tmp          Temoräre Dateien

                                 /var/spool        Warteschlangen (z.B. Drucker)

 

                      /sbin    Administratorprogramme, Systemprogramme

                      /lib       Shared libraries des Compilers, Programmbibliotheken

                      /home Heimatverzeichnisse der Benutzer

                      /proc   Informationen über laufende Prozesse

 

* Das Verzeichnis /var fehlt bei einigen UNIX-Systemen.

 

5.3                 Standortbestimmung

 

Nehmen wir an, Sie hätten sich gerade neu am System angemeldet und befinden sich am Shellprompt. Leider haben Sie vergessen, in welchem Verzeichnis Sie gelandet sind. Wie können Sie dieses nu herraus finden? Nun natürlich bietet UNIX hierfür einen Befehl an. Er heißt pwd, was ausgeschrieben print working direktory heißt. Es gibt Ihnen den Namen ihres Arbeitsverzeichnisses aus. Probieren Sie jetzt pwd aus:

 

$ pwd

 

/home/MrB

 

Bei diesem Beispiel ist /home/MrB unser aktuelles Arbeitsverzeichnis, also das Verzeichnis indem wir uns gerade befinden. Sie können pwd überall im Dateisystem verwenden und es wird Ihnen immer ihr aktuelles Verzeichis mitteilen. Achten Sie darauf, das UNIX einen Unterschied zwischen Großbuchstaben und Kleinbuchstaben kennt. Kommandos sind meistens komplett klein geschrieben, die Eingabe von Pwd wird also eine Fehlermeldung hervorrufen.

 

Gut. Nun, in Verzeichnissen befinden sich Dateien und Verzeichnissen. Sicherlich wäre es praktisch zu wissen welche Dateien sich in unserem aktuellen Verzeichnissen befinden. Es sollte also einen Befehl geben, der uns den Verzeichnisinhalt auflistet. Diesen Zweck erfüllt ls, was ausgeschrieben list heißt. Ls hat folgende Syntax:

           

ls [option] [pfadliste]

 

Einige gebräuchliche Optionen von ls:

 

Option

Auswirkung

-a

all, listet alle Dateien auf

-l

long, gibt Dateien mit zusätzlichen Dateiinformationen aus

-t

time, gibt Zeitinformationen der Datei aus

-k

kilobytes, kürzt die Angabe der Dateigröße in KB ab

-r

recursive, listet Inhalt der Unterverzeichnisse mit auf

-F

Full, gibt Dateityp mit an:

/     Verzeichnis

@  Symbolischer Link

*     Ausführbare Datei

=    Socket

 

 

Probieren Sie jetzt einige der Optionen von ls aus, besonders aber die Optionen -a und -l. Wenn ls Ihnen nichts auflistet befinden sich keine Dateien in Ihrem Verzeichnis. Probieren Sie entweder die Option -a aus oder geben Sie folgendes ein:

 

$ ls -la /bin

 

 

5.4                 Mit Verzeichnissen Arbeiten

 

Nur in einem Verzeichnis zu bleiben wird mit der Zeit langweilig. Zudem möchten Sie irgendwann auf Ihre Dateien in Ihren Unterverzeichnissen zugreifen. Wechseln wir also unser Verzeichnis. Der Befehl cd (change directory) wechselt das Arbeitsverzeichnis. Er hat folgende Syntax:

 

$ cd [pfad]

 

Als Pfad können Sie entweder einen absoluten oder relativen Pfad angeben. Wenn Sie keinen Pfad angeben, wechselt cd automatisch in Ihr Heimatverzeichnis. Die Eingabe von cd .. wechselt in das nächst-übergeordnete Verzeichnis.

           

Wenn Sie viele Dateien haben, wird es Ihnen irgendwann in den Sinn kommen diese in Verzeichnissen zu ordnen. Um ein Verzeichnis anzulegen verwenden Sie den Befehl mkdir. Mkdir bedeutet make directory, und mkdir legt nur dann ein Verzeichnis an, wenn Sie in dem Verzeichnis indem Sie ein neues Verzeichnis anlegen wollen entsprechende Berechtigungen haben. Die Syntax lautet:

 

$ mkdir [Verzeichnisnamen]

 

Statt dem Verzeichnisnamen können Sie auch einen Pfad mit dem neuen Verzeichnis angeben (z.B. ../texte/neues_verzeichnis). Allerdings müssen die Verzeichnisse im Pfad bereits bestehen. Die Option -p (parent) befreit Sie von diesem Umstand. Übrigens: Sie können auch gleichzeitig mehrere Verzeichnisse anlegen indem Sie folgendes eingeben:

 

$ mkdir [Verzeichnis1] [Verzeichnis2] ...

 

Irgendwann wird auch der Zeitpunkt kommen, an dem Sie ein Verzeichnis entfernen wollen. Durch Verwendung des Befehles rmdir können Sie leere Verzeichnisse löschen.

Nochmals ein kurzes Beispiel:

 

$ rmdir ../texte

 

Wenn Sie mehr über die bisher genannten Befehle wissen möchten, dann scheuen Sie sich nicht diese in den Manpages nachzuschlagen. Und, noch einmal: Achten Sie auf Groß- und Kleinschreibung.

 

5.5                                 Mit Dateien arbeiten

 

Nehmen wir an, Sie haben  mit cat einige Dateien erstellt, die Sie nun nicht mehr brauchen. Damit Ihr Verzeichnis nicht überläuft sollten Sie diese entfernen. Es liegt nahe, das der Befehl, der das Entfernen oder löschen von Dateien übernimmt auch auf englisch so heißt, nämlich remove, kurz rm. Auch hier müssen Sie natürlich über die Berechtigung zum Löschen der Datei verfügen. Rm hat folgende Syntax:

 

$ rm [Optionen] datei

 

Und hier die gebräuchlichsten Optionen:

 

Option

Wirkung

-i

interaktiv, rm fragt vor dem löschen

-r

rekursiv, Löschen von Dateien und Verzeichnissen im aktuellen Verzeichnis und aller Unterverzeichnisen

 

Vorsicht! Rm löscht Dateien unwiederbringlich! Das heißt , daß alles was Sie mit rm löschen für immer weg ist. Anfängern sei deshalb die Option -i empfohlen, da rm Sie hiermit vor dem Löschen um Bestätigung bittet. Ohne Sie erhalten Sie gar keine Meldung von rm.

Mit der Option -r können Sie Verzeichnisse mitsamt Inhalt löschen. Mir rmdir können Sie ja nur leere Verzeichnisse löschen. Seien Sie aber mit dieser Option vorsichtig und prüfen Sie was Sie löschen. Am besten benutzen Sie wieder eine Kombination mit der Option-i. Hierzu ein Beispiel, um das Verzeichnis texte mitsamt Inhalt zu löschen:

 

$ rm -ir /home/MrB/texte

 

Der Befehl cp (copy) ermöglicht es Ihnen eine Datei zu kopieren. Damit cp weiß wohin es die Datei kopieren soll (es dürfen ja nicht 2 Dateien gleichen Namens in einem Verzeichnis sein), müssen Sie einen Zielpfad angeben:

 

$ cp [Optionen] quelle ziel

 

Die Quelle ist die Datei, die Sie kopieren wollen, das Ziel ist entweder ein neuer Dateiname, oder ein Pfad. Um z.B. die  Datei misc in das Verzeichnis  /home/Jacky zu kopieren würden Sie folgendes eingeben:

 

$ cp misc /home/Jacky/

 

Eine gerbäuchliche Option von cp ist -R, mit der Sie ganze Verzeichnisse kopieren können. Zum kopieren müssen Sie natürlich die Leseerlaubnis an der zu kopierenden Datei und die Schreiberlaubnis im Zielverzeichnis haben. Wieder ein Wort der Mahnung: Wenn Sie eine Datei in ein Verzeichnis kopieren, indem es bereits eine Datei mit dem selben Namen gibt, so wird diese überschrieben.

 

Wenn Sie eine Datei umbenennen wollen, könnten Sie sie in eine Datei mit dem neuen Namen kopieren und die alte Datei löschen. Das gleiche könnten Sie natürlich tun um eine Datei zu verschieben. Dies wird aber bei vielen Dateien zur Qual. Warum sich auch soviel Mühe machen, es gibt ja mit mv (move) einen Befehl für diesen Zweck. Um eine Datei umzubenennen oder zu verschieben geben Sie ein:

 

$ mv Quelle Ziel

 

Quelle und Ziel sind analog zu cp zu gebrauchen. Sie können auch mehrere Dateien gleichzeitig verschieben, indem Sie folgendes eingeben:

 

$ mv datei1 datei2 Dateien ... Zielverzeichnis

 

Manchmal ist es praktisch einer Datei 2 Namen zu geben. Zum Beispiel könnte man auf diese Weise den cryptischen UNIX Befehlen sinnvolle Namen geben. So könnte cp etwa 'kopiere' genannt werden. UNIX ermöglicht uns einer Datei mehrere Namen zu geben anhand von sogenannten Links. Generell unterscheidet man dabei zwischen Hardlinks und symbolischen Links.

 

Hardlinks sind nichts anderes als weitere Einträge für dieselbe Datei in der Datei-zuordnungstabelle. Es stehen dort also mehrere Verweise  auf eine Datei. Durch die Tatsache, das der Eintrag fest an die Tabelle gebunden ist (daher hardlink), kann man aber auch nur innerhalb eines Dateisystems (bzw. einer Partition) auf einen Hardlink zugreifen. Angelegt werden Links mit dem Befehl ln (link):

 

$ ln [Option] Quelle [Ziel]

 

Läßt man den Zielnamen weg, so legt ln, gesetzt den Falls daß man sich derzeit in anderem Verzeichnis befindet als die zu linkende Datei, im aktuellen Verzeichnis einen Link mit demselben Namen wie die Quelldatei an.

 

$ ln hallo.txt goodbye.text

 

Diese Beispiel legt  goodbye.text als zweiten Namen für hallo.txt an.

Die Option -s legt einen Symbolischen Link an. Ein Symbolischer Link ist eine spezielle Datei, die auf eine Datei oder ein Verzeichnis verweist. Ein Link auf ein Verzeichnis, darf übrigens nur der Systemverwalter als Hardlink anlegen, alle anderen müssen symbolische Links verwenden. Ein Vorteil von Symbolischen Links liegt darin, daß Sie Dateisystemübergreifend sein können.

 

$ ln -s hallo.txt goodbye.text

 

Dieses Beispiel legt wie das vorherige Beispiel einen Link an. Diesmal handelt es sich allerdings um einen symbolischen Link. Später werden Sie erfahren, wie Sie mit ls -l erkennen können, ob es sich bei einer Datei um einen Hardlink oder  einen Symbolischen Link handelt.

 

Oft kommt es vor, das man nicht mehr weiß wo man eine Datei abgelegt hat. Dann bleibt einem nichts anderes übrich, als nach der Datei zu suchen, was aber bei komplexen Verzeichnisstrukturen sehr viel Zeit in anspruch nehmen kann. Das Programm find kann diese Arbeit für uns erledigen. Hier die etwas komplexe Syntax von find anhand eines Beispiels:

 

$ find . -name dattel -print

 

 


Was soll mit dem Ergebnis gemacht werden ?

 

Zusatz

zu

-name

 

Nach

was ?

 

Wo?

 
       

 

 

 

 

Find sucht rekursiv in allen Unterverzeichnissen ab dem angegebenen nach Dateien, die den angegebenen Kriterien entsprechen. Im oberen Beispiel sucht find ab dem aktuellen Verzeichnis (.) dem Namen nach Dateien und Verzeichnissen mit dem Namen (-name)  dattel und gibt den Pfad zu Ihnen auf dem Bildschirm aus (-print).

Find ist ein sehr flexibles Programm und es ermöglicht uns unter anderem nach dem Änderungsdatum, dem Dateityp, dem Besitzer und der Gruppenzugehörigkeit einer Datei zu suchen. Die letzte Option bezeichnet wie oben schon beschrieben, was mit dem Ergebnis der Suche zu tun ist. Anstatt das Ergebnis auszudrucken, kann man es auch in einer Datei speichern, oder beim auffinden der Dateien bestimmte Programme starten.

Find ist sehr komplex, und ich rate Ihnen einmal einen Blick in die Manpage von find zu werfen. Übrigens muß man nicht auf allen UNIX-Systemen die Option -print angeben. Probieren Sie es einfach einmal mit und einmal ohne Sie aus, um heraus zu finden, was bei Ihnen gilt.

 

5.6  Wie man herausfindet wieviel Platz man noch hat           

 

Spätestens, wenn Ihnen das System mit der Meldung ' no space left on disk' zu verstehen gibt, daß Ihnen kein Speicherplatz mehr zur Verfügung steht, werden Sie sich dafür interreSieren wieviel Platz Sie bisher belegt haben. Damit es erst garnicht dazu kommt können Sie mit dem Befehl du (disk usage) überprüfen wieviele Blöcke (Cluster) ein Verzeichnis mit Inhalt belegt. Ein Block entspricht  512 Bytes, auf manchen Systemen aber auch 1024 Bytes.

Die Angabe des belegten Platzes in Blöcken ist etwas umständlich. Manche Systeme bieten mit der Option -k an, statt dessen die Größe des belegten Platzes in Kilobyte anzugeben.  Ein kurzes Beispiel ohne weitere Erklärung:

 

$ du -k

 

Um festzustellen, wieviel Speicherplatz man noch belegen kann kann man das Programm df (disk free) benutzen. Df zeigt Ihnen unter anderem die Anzahl der freien Blöcke und die Zahl der belegten Blöcke an. Die Ausgabe von df ist viel Ausgiebiger als die Ausgabe von du, und df gibt automatisch  die Größen in Blöcken und Kilobytes an. Allerdings ist dieses Programm sehr systemspezifisch. Probieren Sie es also bei sich aus und konsultieren Sie wenn nötig die zugehörige Manpage.

                     

 

 

6                 Hier kommt jeder zu seinem Recht: Mit Sicherheit

6.1                 So ändern Sie ihr Passwort

 

Eigentlich sollten Sie schon nach dem ersten Anmelden an Ihrem System Ihr Passwort ändern, da Sie zu Anfangs meist ein Standard-Passwort erhalten, welches vielen Benutzern bekannt ist. Das Kommando zum ändern des Passworts lautet passwd (password). Sie geben es folgendermaßen ein:

 

$ passwd

 

Passwd fragt Sie nun nach Ihrem alten Passwort und bittet Sie dann Ihr neues Passwort zweimal einzugeben. Auf diese Weise können Tippfehler vermieden werden. Wenn die Eingaben unterschiedlich sind erfolgt keine Änderung des Passworts. Bei der Auswahl Ihres neuen Passworts sollten Sie folgende Punkte beachten:

 

-         Das Passwort darf nicht länger als 8 Zeichen lang sein

-         Es darf aus allen Zeichen bestehen

-         Sie sollten Metazeichen vermeiden

-         Halten Sie sich an die Sicherheitsrichtlinien Ihres Administrators

 

 

6.2                 Dateirechte

 

In diesem Kapitel erfahren Sie endlich was Dateirechte sind. In den vorhergehenden Kapiteln wurde bereits häufig auf Ihre Bedeutung hingewiesen.

Sie können mit ls -l die Dateirechte von Verzeichnissen und Dateien herausfinden. Ls zeigt Ihnen z.B. folgendes:

 

$ ls -l  /home/MrB/kunden

 

-rwxr-xr--       1     MrB   farmers 724 Aug 19 12:45      /home/MrB/kunden  

 

 

 

 

 

 

 

                     

Die Dateiarten haben Sie im Kapitel über das UNIX-Dateisystem kennengelernt. Das Minuszeichen gibt an, das es sich um eine normale Datei handelt. Die Dateirechte werden wir anschließend betrachten. Der Referenzzähler gibt an, das nur ein Verweiß auf die Datei besteht. Ls gibt ferner an, das MrB der Besitzer der Datei ist und das diese der Gruppe farmers angehört. Die Datei ist 724 Bytes groß und wurde zuletzt am 19. August um 12:45 h verändert. Und schließlich heißt die Datei kunden und befindet sich in /home/MrB/.

 

Nun aber zu den Dateirechten. Die Dateirechte sind nach folgendem Schema in Dreiergruppen codiert:

 

rwx

rwx

rwx

user

group

others

 

Die ersten drei Zeichen geben die Rechte des Besitzers der Datei an (user), die nächsten drei Zeichen beschreiben die Rechte welche die Gruppenmitglieder der Gruppe, zu der die Datei gehört (group) , hat und die letzten drei Zeichen sagen aus, welche Rechte alle anderen Benutzer haben (others). Die Dateirechte sind an die jeweilige Datei gebunden.

Sie geben an was mit der Datei oder dem Verzeichnis gemacht werden darf.

 

Kürzel

Recht

r

Leserecht (read)

w

Schreibrecht (write)

x

Ausführerecht (execute)

-

kein Recht

 

Das Leserecht ermöglicht es uns eine Datei zu öffnen und deren Inhalt auslesen zu können. Bei einem Verzeichnis bedeutet das, daß man sich dessen Inhalt mit ls ansehen darf.

 

Das Schreibrecht erlaubt uns eine Datei zu erzeugen, ihren Inhalt verändern zu dürfen oder Sie abspeichern zu dürfen. Bei einem Verzeichnis entscheidet dieses Recht, ob Sie dessen  Verwaltungsinformationen verändern dürfen. Da beim Löschen, Kopieren und Verschieben aber gerade hierauf zugegriffen wird, bedeutet dies nicht anderes, als das daß Schreibrecht bei einem Verzeichnis darüber entscheidet, ob die darin enthaltenen Dateien gelöscht, kopiert oder verschoben werden dürfen. Das W-Recht einer Datei hat damit nichts zu tun!

 

Das X-Recht bestimmt, ob eine Datei ausgeführt werden darf. Dies macht natürlich auch nur bei Dateien Sinn, die entweder Programme oder Scripts sind. Bei einem Verzeichnis bestimmt dieses Recht darüber, ob Sie auf dessen Vewaltungsinformationen zugreifen dürfen. Praktisch bedeutet dies, das Sie ohne das X-Recht nicht in ein Verzeichnis wechseln dürfen.

 

Schließlich machen manche mögliche Kombinationen wenig Sinn. Beispielsweise nutzt Ihnen das Schreibrecht wenig, wenn Sie die Datei nicht öffnen dürfen. Deswegen kommen solche Kombinationen auch nur in Ausnahmefällen vor. Probieren Sie am besten selbst die Auswirkungen der Rechte aus.

 

Schauen wir uns noch einmal die Rechte der Datei des letzten Beispiels an:

 

-rwxr-xr--       1     MrB   farmers 724 Aug 19 12:45      /home/MrB/kunden

 

Die Rechte für den Besitzer der Datei (MrB) lauten rwx, was bedeutet, das er die Datei öffnen und auslesen darf, ihren Inhalt verändert abspeichern darf und Sie ausführen dürfte. Die Gruppe (farmers) dürfte die Datei ebenfalls öffnen, auslesen und ausführen. Da das Schreibrecht nicht gesetzt ist, was durch das Minuszeichen angezeigt wird, darf die Gruppe Sie aber nicht  verändern. Alle anderen Benutzer dürfen die Datei nur öffnen und lesen.

 

6.3                                 Dateirechte verändern 

 

Da Sie jetzt wissen was Dateirechte sind, wird es Sie interesSieren, wie Sie diese an Ihren Dateien verändern können. Dafür verwendet man den Befehl chmod, was change mode heißt. Auf Englisch heißen die Dateirechte auch modes, und der Name entspricht also genau dem was das Programm bewirkt. Chmod kann an einer Datei nur von dessen Besitzer oder dem Systemverwalter angewandt werden und hat folgende Syntax:

 

$ chmod modi Datei

 

Modi bezeichnet die Dateirechte und kann auf 2 Arten angeben werden:

 

1)      In beschreibenden Buchstabenkombinationen

2)      Mit einer dreistelligen Zahl

 

 Da die erste Möglichkeit sehr einfach ist, werden wir Sie hier ausführlich behandeln.

Die Buchstabenkombination ist folgendermaßen aufgebaut:

 

Wer?

Was?

Wofür?

 

 

 

 

 

 

 

 

Wollen wir z.B. der Gruppe erlauben, eine Datei zu lesen und Sie ausführen zu können, würden wir eingeben:

 

$ chmod g=r-x Datei

 

Das Gleichheitszeichen sorgt dafür, das die Datei die exakt beschriebenen Rechte erhält. Das Plus- bzw. Minuszeichen gibt nur an wie bestehende Rechte verändert werden sollen. Wenn uns jetzt einfällt, daß die Gruppe die Datei doch verändern können soll, so würden wir folgendes schreiben:

 

$ chmod g+w Datei

 

oder

 

$ chmod g=w Datei0

 

Sie können auch die Änderungen für alle drei (u, g, o) auf einmal eingeben:

 

$ chmod u=rwx,g-rwx,o=--- Datei

 

Jetzt haben wir der Gruppe alle Rechte genommen. Beachten Sie, daß Sie keine Leerzeichen zwischen den Beschreibungen der Modi machen dürfen.Übrigens gibt es ausser r,w und x noch zwei andere modi, die aber nur vom Superuser angewandt werden können. Deswegen werden Sie hier nicht genannt. Sie können in der Manpage von chmod danach suchen, wenn Sie an Ihnen interesSiert sind.

 

Vorher wurde genannt, das Sie die Modi auch mit einer Zahl angegeben können. Schlagen Sie in den Manpages nach, wie dies gemacht wird. Im allgemeinen ist aber die Angabe der Modi mit Buchstaben einfacher.

 

 

6.4                                 Besitzer festlegen

 

Der Befehl chown ermöglicht es Ihnen den Besitzer einer Datei zu ändern. Er hat folgende Syntax:

 

$ chown [Option] Benutzer Datei

 

Benutzer bezeichnet den zuckünftigen Besitzer der Datei. Chmod ist allerdings auf dem meisten System nur vom Superuser ausführbar, da es als Sicherheitsloch angesehen wird. Die Option -R erlaubt Ihnen chown rekursiv auf alle Dateien und Unterverzeichnisse anzuwenden.

 

Um die Gruppenzugehörigkeit einer Datei zu ändern, benutzt man den Befehl chgrp. Seine Syntax lautet analog zu der von chown:

 

$ chgrp [Optionen] Gruppe Datei

 

Chgrp ist chown sehr ähnlich, und die Option -R erlaubt auch hier, die Gruppen-zugehörigkeit rekursiv zu ändern.

 

 

 

7                 Was Kafkas Prozess mit UNIX zu tun hat

 

Ein Prozess ist ein Programm, das in den Speicher geladen wurde und ausgeführt wird. Benutzerprozesse, also vom Benutzer gestartete Prozesse, werden durch die Shell aufgerufen. Da die Shell diese Prozesse generiert, spricht man in diesem Zusammenhang auch von Vater- und Sohnprozessen, bzw. Eltern- und Kindprozessen.  Die Shell ist also ein Elternprozess, der einen Kindprozess erzeugt. Da die Shell die Prozesse geschaffen hat, befinden sich diese in Abhängigkeit von ihr. Die Shell kann ihre Kindprozessen kontrollieren. Dazu bedient Sie sich sogenannter Signale.

 

 

7.1                                   Ps is in  town

 

Mit dem Shell-internen Befehl ps (process status) können Sie sehen welche Prozesse zur Zeit laufen. Ps ist sehr systemspezifisch, konsultieren Sie daher wieder die manpage für genauere Informationen. Wenn Sie ps ohne Optionen eingeben, zeigt es Ihnen welche Prozesse Sie gestartet haben. Gebräuchliche Optionen sind -a bzw. -e (je nach System), welches Ihnen alle laufenden Prozesse zeigt, und -l, welches ausführliche Informationen über die Prozesse liefert.

 

Ps wird Ihnen auf allen Systemen die sogenannte PID und den Status eines Prozesses liefern. PID ist ein Akronym für die Prozess Identification Number, eine vom Betriebsystem vergebene Nummer, die zur Verwaltung der Prozesse dient.

Folgende Zustände von Prozessen sind möglich:

 

Status (Zustand)

Bedeutung

r

laufend (running)

s

schlafend (sleeping)

t

unterbrochen (trapped)

z

Zombie

 

Als schlafenden Prozess bezeichnet man ein Programm, das auf Bearbeitung wartet. Da ein Computer nicht beliebig viele Programme gleichzeitig bearbeiten kann, müssen auf einem Multitaskingbetriebsystem wie UNIX einige Prozesse warten, bis Sie abgearbeitet werden können. Ein unterbrochenes Programm ist ein von der Shell angehaltenes Programm. Es kann ebenso von der Shell wieder aktiviert werden. Ein Zombie ist ein Programm, das gerade Beendet wird und auf die Rückmeldung von seinem Elternprozess wartet. Besteht der Elternprozess nicht mehr, so lebt der Prozess inaktiv, eben wie ein Zombie, weiter.

Zudem gibt es noch einige andere Zustände, z.B. für gerade gestartete Prozesse, welche man aber nicht so häufig antrifft.

 

7.2                                   Der UNIX-Killer und seine Signale

 

$ kill [-Signal] PID

 

Die PID eines Prozesses erhalten Sie mit ps. Im allgemeinen reicht es aus einen Prozess durch die Angabe seiner PID zu killen. Sie geben dann z.B. ein:

 

$ kill 511

 

Manchmal sind aber Programme recht hartnäckig, so daß man zu schärferen Mitteln greifen muß. Das Signal -9 kann mit jedem Programm kurzen Prozess machen. Es ist sozusagen der UNIX-Killer. Falls Sie noch an anderen Signalen interesSiert sind ... ach Sie, wissen bestimmt schon wo Sie nachschauen können.

 

 

7.3                Hintergrund-Prozesse

 

Da UNIX ein Multitaskingbetriebsystem ist, erlaubt es Programmen auch für sich allein zu laufen, ohne auf Benutzereingaben zu warten, während die Benutzer andere Dinge erledigen können. Weil diese Prozesse im Hintergrund ablaufen, nennt man Sie auch Hintergrundprozesse. Eine besondere Art von Hintergrundprozessen sind die sogenannten Demons. Sie sind Programme, die vom System gestartet wurden, im Hintergrund laufen und Ihm einen Dienst erbringen.

 

Der Nachteil von normalen Programmen, die im Vordergrund laufen ist, daß Sie die Shell blockieren. Bei Programmen, die ohne Eingaben vom Benutzer laufen, bietet sich also an, diese in den Hintergrund zu schicken, damit wir die Shell benutzen können. Da die Shell die Prozessteuerung übernehmen kann, beinhaltet Sie auch eine Möglichkeit einen Prozess in den Hintergrund zu schicken Allerdings ist diese von Shell zu Shell verschieden.

Bei den meisten Shells wird das Kaufmännische Und-Zeichen (&) verwendet. Um einen Befehl von Anfang an in den Hintergrund zu schicken geben Sie ein:

 

$ Befehl &

 

Daraufhin gibt Ihnen die Shell die job-Nummer des Hintergrundprozesses bekannt. Dies Sieht aber bei den vielen Shells sehr verschieden aus. Suchen Sie also mit dem Schlüsselwort 'job' nach weiteren Informationen. Übrigens schreiben Hintergrundprozesse immernoch nach stdout. Es bietet sich also an ihre Ausgabe umzuleiten.

 

Bei manchen Shells kann man mit fg [jobnr] einen Prozess wieder in den Vordergrund holen und Sie nach dem drücken von Strg+Z mit bg [jobnr] wieder in den Hintergrund schicken.

                    

7.3                                   Hupen verboten: nohup

 

Stellen Sie sich vor, Sie hätten ein Programm, das furchtbar viel Zeit in Anspruch nimmt, bei dem Sie aber keinerlei Eingaben tätigen müssen. Das Compilieren eines Programmes ist  z.B. ist eine solche Aufgabe. Beim Programm zu verweilen wäre bestimmt vergeudete Zeit. Nun, die Shell bietet uns mit dem Befehl nohup die Möglichkeit, Prozesse auch noch nach dem ausloggen laufen zu lassen. Hier die Syntax von nohup:

 

$ nohup Befehl

 

Die Ausgaben der per nohup gestarteten Programme landen in der Datei nohup.out in Ihrem Heimatverzeichnis. Nochmal kurz ein Beispiel in Verbindung mit &:

 

$ nohup  cc nuevo.c &

 

7.5                Nice to see you again.

 

Wenn sich viele Prozesse einen Rechner teilen, dann kann man sich vorstellen, daß es bestimmte Programme gibt, die wichtiger sind als andere. Deswegen teilt UNIX jedem Programm eine Prioritätsstufe zu.

Wenn Sie nett sein wollten, dann könnten Sie mit dem Befehl nice ihr Programm von Anfang an mit einer niedrigen Priorität starten. Es bekommt dann weniger Rechenzeit zur Verfügung gestellt, behindert aber auch die anderen Programme weniger.

 

$ nice [ Nettigkeit] programm

Bei Nettigkeit müssen Sie eine Zahl zwischen -20 und +19 angeben. Je höher die Zahl ist, desto niedriger ist die Priorität ihres Programmes und desto netter sind Sie. Negative Werte kann übrigens nur der Superuser angeben. Wenn Sie nice ohne Option angeben gilt automatisch 10 als Nettigkeitswert.

 

Beispiel:

 

$ nice +15 nohup sh compile.sh &

 

Hier wird das Shellscript compile.sh per nohup im Hintergrund gestartet und es wird Ihm die Nettigkeit +15 zugewiesen. Sh ist die Shell selbst, und die müssen wir bei diesem Beispiel zum Interpretieren des Shellscripts starten.

 

 

8                 Vi – Textdateien bearbeiten

 

Textbearbeitung ist ein wichtiges Thema, denn dadurch können wir erst etwas mit dem Computer anfangen. Sie haben in einem vorherigen Kapitel schon gelernt, wie man mir cat einen Text in eine Datei schreiben kann. Diese Möglichkeit ist aber nicht sehr bequem, und Sie erlaubt es uns auch nicht schon existente Dateien zu bearbeiten. Daher haben sich schon früh viele sogenannte Editoren entwickelt, mit denen man Textdateien bearbeiten kann. Einer der ersten Editoren war ed, ein Zeilenorientierter Editor, mit dem Sie nur Zeilenweise arbeiten konnten. Ed ist der Standardeditor unter UNIX. Allerdings ist seine Benutzung sehr Umständlich. Deswegen wurden andere, einfacher zu bedienende Editoren geschrieben. Einer dieser ist vi. Vi ist heute auf jedem UNIX-System zu finden. Er ist ein visueller Editor, d.h. er ist Bildschirmorientiert. Im Gegensatz zu ed, bei dem Sie nur einzelne Zeilen ansehen können, ermöglicht Ihnen vi sich mit den Cursotasten durch den Text zu bewegen.

Vi ist sehr viel einfacher zu bedienen als ed, deswegen, und weil er heute zum Standardumfang gehört, ist er Gegenstand diesen Kapitels.

 

 

8.1                 Die 3 Modi

 

Vi ist ein dreigeteilter Editor. Dreigeteilt deshalb, weil er in drei Modi arbeitet.  Je nach dem in welchem Modus Sie sich befinden, können Sie verschiedene Operationen ausführen. 

 

 

 

 

 

 

 

 


Wenn Sie mit vi eine Datei öffnen, können Sie nicht sofort anfangen zu tippen. Sie befinden sich dann im Befehlsmodus. Der Befehlsmodus ermöglicht es Ihnen vi Anweisungen zu geben. Zum Beispiel können Sie vi nach Textpassagen suchen lassen. Im Befehlsmodus achtet vi auf jeden Ihrer Tastendrücke. Sie müssen also für einen Befehl nur eine Taste drücken (z.B. i), und schon wird der Befehl ausgeführt. Ihre Eingabe erscheint derweil nicht am Bildschirm.

 

Vom Befehlsmodus aus, gelangt man in einen der beiden anderen Modi, den Eingabemodus oder des Komplexbefehlmodus. Der Eingabemodus gestattet Ihnen den Text zu bearbeiten. Sie können z.B. durch Drücken der a- oder i-Taste während Sie im Befehlsmodus sind dahin gelangen. Wenn Sie fertig sind, drücken Sie die ESC-Taste um wieder in den Befehlsmodus zu kommen.

 

Der Komplexbefehlsmodus hört sich schlimmer an als er ist. Vi ist eine Weiterentwicklung  des Editors ex. Im Komplexbefehlsmodus benutzen Sie dessen Befehle, welche im Unterschied zu den normalen Befehlen mit einem Doppelpunkt eingeleitet werden. Im Komplexbefehlmodus befinden Sie sich nur sehr kurz, nämlich wenn ex-Befehl ausgeführt wird. Nach der Eingabe des Befehls und dem Abschluß der Eingabe mit Enter, landen Sie automatisch wieder im Befehlsmodus. 

 

Gestartet wird vi durch die Eingabe der folgenden Befehlszeile:

 

$ vi Datei

 

Dies öffnet auch gleich die zu bearbeitende Datei. Sie können vi auch ohne Angabe des Dateinamens starten, dann erstellt vi eine neue Datei. Vi zeigt Ihnen nach dem Öffnen gleich den Inhalt der Datei. Die Tilde (~ ) am Anfang einer Zeile sagt aus, das es sich hierbei um eine Leerzeile handelt. Im Befehlsmodus, indem Sie sich jetzt befinden, können Sie mit den Pfeiltasten durch den Text bewegen, um beispielsweise eine bestimmte Stelle zu suchen. Auf älteren Systemen ohne Pfeiltasten können Sie die Tasten k (aufwärts), j (abwärts), h (links) und l (rechts) zur Bewegung innerhalb des Textes benutzen.

 

Bewegen können Sie sich im Ur-vi aber nur während Sie im Befehlsmodus sind. Im Einfügemodus funktionert dies nicht. In neueren vi-Versionen ist dies aber durchaus möglich. Probieren Sie also aus was bei Ihnen funktioniert. 

 

Im Befehlsmodus können Sie zudem noch Seitenweise im Text blättern indem Sie Strg+f drücken um sich die nächste Seite anzusehen (forward) und Strg+b drücken um sich die vorhergehende anzusehen (backward).

 

Die unterste Bildschirmzeile benutzt vi um Ihnen seinen Zustand bekanntzumachen. Vi gibt Ihnen hier diverse Meldungen aus. Zum Beispiel merken Sie durch die Meldung -Insert- das Sie sich im Eingabemodus befinden.

 

Hier eine kurze Zusammenstellung der wichtigsten Befehle von vi:

 

Befehlsmodus

a

Text nach aktueller Cursorposition einfügen (append)

i

Text vor aktueller Cursorposition einfügen (insert)

l

Text am Anfang der Zeile einfügen (line)

R

Text Überschreiben (replace)

o

Neue Zeile einfügen (open)

c[Arg]

Löscht (clear) nach Angabe des Argumentes folgendes:

 

w   Wort nach dem Cursor

G   Text bis zum Dateiende

^    Text bis zum Zeilenanfang

$   Text bis zum Zeilenende

dd

Die gesamte Zeile löschen

yy

Die gesamte Zeile kopieren

p

Kopiertes in die aktuelle Zeile einfügen (put)

u

Rückgängigmachen der letzten Aktion

 

 

 

Komplexbefehlmodus:

:q

vi verlassen (quit)

:q!

vi verlassen ohne zu speichern

:w

speichern (write)

:x

Speichern und vi verlassen (auch :wq)

 

 

Daneben hat vi noch viele weitere Funktionen, wie z.B. Textersetzung, Textsuche und diverse Löscharten. Dies würde aber den Rahmen dieser Einführung sprengen.

 

8.2                 Andere Tools

 

Neben vi und den anderen Editoren bietet UNIX noch sehr viele andere Programme, die den Inhalt einer Datei durchsuchen, verglichen, formatieren oder verändern können. Diese werden über die Shell aufgerufen und sehr oft in Shellscripten verwendet. An dieser Stelle nur ein Abriss der wichtigsten ohne nähere Erläuterung:

 

Befehl

Auswirkung

awk

Durchsucht Dateien auf Textmuster und führt dann vom Benutzer definierte Aktionen aus (eigene Scriptsprache)

diff

Vergleicht Dateien auf Unterschiede und gibt  Zeilen aus, die sich unterscheiden

grep

grep sucht nach Textmustern in Datei(en) und schreibt Zeile in der das Textmuster gefunden wurde nach stdout

sort

Sortiert Dateiinhalt nach angegebenen Regeln (z.B. alphabetisch)

wc

Zählt Anzahl der Wörter einer Datei

 

 

 

9                 Shellscripte

 

Wenn Sie viel mit der Shell arbeiten, dann werden sich Situationen häufen, in denen Sie bestimmte Folgen von Befehlen wieder und wieder eingeben müssen. Mit der Zeit kann das sehr frustrierend werden. Zudem gibt es, vor allem in der Systemadministration, Aufgaben, die Sie in regelmäßigen Abständen erledigen müssen. Auch bei diesen Aktionen müssen zumeist immer die gleichen Befehle benutzt werden.

 

Zum Glück bietet uns die Shell eine Möglichkeit solche Vorgänge einmalig festzulegen. Sie können alle Befehle, die Sie Ausführen müssen z.B. mit vi in eine Textdatei schreiben. Diese Textdatei, man sagt dazu auch Shellscript, wird dann von der Shell Schritt für Schritt, wie ein Programm abgearbeitet. Dies ist aber nur die einfachste Form eines Shellscripts, denn die Shell bietet Ihnen eigentlich schon fast die Möglichkeiten einer Programmiersprache. Zum Beispiel bieten die unterschiedlichen Shells alle Kontrollstrukturen (z.B. if) und Schleifenkommandos an. Sie können also aus den simplen Grundbefehlen von UNIX komplexe Programme schreiben. Auch hier spiegelt sich das Baukastenprinzip von UNIX wieder.

 

Allerdings unterscheiden sich die verschiedenen Shells in Bezug auf ihre Scriptsprachen stark, so daß sehr wenige Gemeinsamkeiten bestehen. Die C-Shell heißt z.B. nur deswegen so, weil ihre Scriptsprache sehr stark an die Programmiersprache C angelehnt ist.

 

Deswegen werden wir hier nur auf die absoluten Grundlagen eingehen, die in den meisten Scriptsprachen vorkommen.

Wie gesagt werden Shellscripte in einem Editor erstellt. Sie können die Befehle entweder jeweils in eine neue Zeile schreiben, oder das Semikolon als Trennzeichen verwenden. Um einen Kommentar einzufügen, schreiben Sie das Doppelkreuz (#) an den Anfang einer Zeile.

Der dem Doppelkreuz folgende Text jener Zeile wird dann von der Shell ignoriert.

 

Oft wird in die erste Zeile eines Shellscripts der Pfad der Shell genannt, die das Shell ausführen soll. Eine solche Angabe für die Bourne-Shell (sh) würde dann z.B. lauten:

 

#!/bin/sh

 

Diese Angabe ist aber nicht zwingend notwendig. Sie ist aber empfehlenswert, wenn Sie mit verschedenen Shells arbeiten.

Shellscripte können nur ausgeführt werden, wenn ihr Ausführe- und Leserecht gesetzt sind. Zum Ausführen von Shellscripts gibt es 2 Möglichkeiten:

 

1.      Das Script befindet sich in einem in der Path-Variable (Siehe nächster Abschnitt) eingetragenen Verzeichnis und wird durch Eingabe seines Namens aufgerufen.

2.      Das Script wird folgendermaßen aufgerufen:  sh Scriptname   

 

Die erste Möglichkeit ist die bequemste. Dadurch, das UNIX die Ausführung von Programmen oder Scripts nur in speziellen Verzeichnissen erlaubt, ergibt sich eine gute Kontrolle über die Benutzeraktivitäten und eine saubere Trennung von Daten und Programmen.

Die zweite Möglichkeit ist aber wesentlich einfacher. Sie starten dabei eine weitere Ausgabe der Shell, die dann das Script interpretiert. Allerdings landen Sie dann auch in dieser Shell, deswegen sollten Sie bei Scripten, die Sie auf diese Weise ausführen immer exit als letzten Befehl angeben.

 

9.1                 Shell-Variablen

 

Gerade war von der Path-Variable die Sprache. In ihr werden Verzeichnisse gespeichert, die für den jeweiligen Benutzer Ausführbare Programme oder Scripten enthalten. Shell-Variablen dienen im allgemeinen zur Speicherung von Daten. Sie werden zum Beispiel dafür verwendet die individuelle Benutzerumgebung zu gestalten. Damit können Sie sich die Shell so einrichten, wie Sie Ihnen am besten gefällt.

 

In Scriptprogrammen dienen Shellvariablen oft  zur Aufnahme von Benutzereingaben oder zur Programmsteuerung. Das erzeugen einer neuen Variable ist einfach, Sie müssen lediglich schreiben:

 

$ Variablenname=Wert

z.B.

 

$ hunter=null

 

Der Inhalt einer Variablen kann eine Zahl oder ein Text sein. Die Shell kennt keinen Variablentyp wie höhere Programmiersprachen. Eine Zahl wird also als Text gesehen. Um auf einen Variablenwert zuzugreifen Schreiben Sie ein Dollarzeichen vor dessen Namen. Der Gesamte Ausdruck wird dann bei der Durchführung des Scriptes durch die Shell durch den Variablenwert ersetzt.

 

$ echo $hunter

 

Dieses Beispiel liefert Ihnen als Ausgabe:

 

null

 

Die Shell ersetzt $hunter durch den im vorherigen Beispiel eingesetzten Wert (null) und führt dann das Programm echo aus, dem es den Variablenwert übergibt. Echo ist ein einfaches Programm, das nichts anderes tut, als das, was Ihm als Argument übergeben wird auszugeben. Wenn Sie also 'hallo' als Argument übergeben, wird echo auch 'hallo' ausgeben.

 

$ echo "Hallo dieser Text wird gleich angezeigt."

 

Hallo dieser Text wird gleich angezeigt.

 

 

9.2                 Ein einfaches Scriptchen

 

Zur Verdeutlichung wollen wir nun gemeinsam ein simples Script erstellen.

Rufen Sie zuerst vi wie folgt auf:

 

$ vi meinscript

 

Vi erstellt nun die neue Datei meinscript. Damit Sie den folgenden Text eingeben können drücken Sie 'i', Sie kommen dann in den Eingabemodus.

Gefaltete Ecke: #!/bin/sh
#Ein simples Script zur Verdeutlichung
echo "Hallo!"
echo "Ihre Path-Variable lautet:"
echo $PATH
echo
Lieblingsbetriebsystem=UNIX
echo "Ihr Lieblingsbetriebsystem ist:$Lieblingsbetriebsystem"
echo
echo "Sie befinden Sich im Verzeichnis"
pwd
echo "Mit dem Inhalt:"
ls
exit
 

 

 

 

 


                     

 

 

 

 

 

 

 

 

 

 

 

 

Drücken Sie ESC um den Eingabemodus zu verlassen und wieder zum Befehlsmodus zurückzukehren. Nun geben Sie :x oder :wq ein, damit vi die Datei speichert und sich dann beendet.

 

Setzen Sie nun für sich (user) das Ausführ- und Leserecht indem Sie eingeben:

 

$ chmod u=r-x meinscript

 

 Sie befinden Sich gerade wahrscheinlich nicht in einem Verzeichnis, das in $PATH eingetragen ist, also starten Sie das Script mit:

 

$ sh meinscript

 

10               Kommunikation – ganz große Welt

10.1     Mail

 

Spätestens wenn Ihnen Ihr System nach dem Anmelden 'you have mail' anzeigt, wird Ihnen der Gedanke kommen, daß Sie mit UNIX eMails verschicken können. UNIX ist das traditionelle Betriebsystem des Internets, uns so ist eMail schon sehr früh ein Teil von UNIX gewesen. Da Programm, daß Sie benutzen um eMails zu lesen und schreiben ist mail. Mail ist schon sehr betagt und wirkt heute sehr umständlich. Deswegen gibt es auch neuere Versionen, z.B. Mail oder mailx. Trotzdem: mail ist das traditionelle Programm.

 

Nehmen wir an Sie hätten sich gerade eingeloggt und das System hätte Ihnen mit 'you have mail' angezeigt, daß Sie Nachrichten erhalten haben.  Dann geben Sie mail ein, worauf Ihnen mail eine Liste der neuen eMails zeigt. Der Hilfsprompt von mail ist das Fragezeichen, uns mail erwartet von Ihnen das Sie angeben, was mit den Nachrichten zu tun ist.

Mögliche Aktionen sind:

 

Aktion

Auswirkung

t [Nummer]

Anzeigen von Nachricht der Nummer

d

Löschen der Nachricht (delete)

+

Nächste Nachricht lesen

-

Letzte Nachricht lesen

?

Aufrufen der Hilfefunktion

q

Verlassen von mail (quit)

 

Probieren Sie auf jeden Fall die Hilfefunktion aus. Hier erhalten Sie weitere Kommandos.

Wenn Sie eine Nachricht verfassen wollen, dann müssen Sie eingeben:

 

$ mail username@host.domain

 

Natürlich müssen Sie die obige Adresse durch die richtige eMail-Adresse ersetzen. Befindet sich der Empfänger auf Ihrem System, können Sie auch nur dessen Benutzernamen angeben.

Nachdem Sie das Beispiel auf diese Weise eingegeben haben fragt Sie mail nach dem Betreff der Nachricht (subject). Anschließend können Sie den Text der Nachricht eingeben. Mail bedient sich hierbei dem Programm cat, so daß Sie am Ende der Nachricht wieder ^D eingeben müssen. Danach fragt Sie mail noch wem eine Kopie der Nachricht geschickt werden soll (cc).

Bequem ist diese Art der Verfassung einer Nachricht nicht, zudem ist Sie vor allem bei längeren eMails fehlerträchtig. Verfassen Sie also längere eMails lieber mit vi und übergeben Sie sie mail wie folgt:

 

$  mail username@host.dom < letter.txt

 

Wobei letter.txt die vorher mit vi geschriebene Datei ist. Wenn Sie eine Nachricht gleich an mehrere schicken wollen können Sie folgendes eingeben:

 

$: mail user1 user2 user3 ...

 

Hier müssen Sie statt user naturlich die Adressen ihrer Empfänger eintragen.

Nachrichten, die mail nicht zustellen kann landen übrigens in der Datei dead.letter, die sich in Ihrem Heimatverzeichnis befindet.

         

 

10.2                             Write

 

Write ermöglicht es Ihnen mit Benutzern Ihres UNIX-Rechner, die gleichzeitig am System arbeiten, kurze Nachrichten auszutauschen. Sie können mit dem Befehl who herausfinden, wer sich gerade am System befindet.

Um jemanden eine Nachricht zu schreiben geben Sie write gefolgt von dem Benutzername der Empfängers ein. Danach können Sie eine Nachricht schreiben, die dann auf dessen Bildschirm erscheint.

 

$ write user

 

Auch hier müssen Sie die Nachricht mit ^D abschließen. Wenn der Empfänger ebenfalls write ausführt, bevor Sie ^D eingeben, können Sie sich quasi unterhalten. Allerdings teilen Sie sich die Ausgabe, und dementsprechend mischen sich auch die Zeichen. Besser ist deshalb für Unterhaltungen  das programm talk.

 

Sie können übrigens auch verhindern, daß Sie mit Nachrichten überschüttet werden. Man benutzt dazu das Programm mesg:

 

$ mesg [y/n]

 

Mit y erlauben Sie Nachrichten, mit n verbieten Sie sie.