UNIX® Basix
1 UNIX – was ist
das ??? PDF
2 Erster Kontakt
mit dem System:
2.1 Login, logout und das Home-Verzeichnis
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.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.1 So ändern Sie ihr Passwort
6.2 Dateirechte
6.3 Dateirechte verändern
6.4 Besitzer festlegen
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.1 Die 3 Modi
8.2 Andere Tools
9.1 Shell-Variablen
9.2 Ein einfaches Scriptchen
10.1 Mail
10.2 Write
2 Erster Kontakt mit dem
System:
2.1
Login, logout und das Home-Verzeichnis
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.1
Die Shell als Kommandointerpreter
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 ...
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!
$ 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:
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.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.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.
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.
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 |
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.
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.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.