Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
Shell-Programmierung von Jürgen Wolf
Einführung, Praxis, Referenz
Buch: Shell-Programmierung

Shell-Programmierung
782 S., mit CD, 44,90 Euro
Rheinwerk Computing
ISBN 3-89842-683-1
gp Kapitel 1 Einführung
  gp 1.1 Voraussetzungen an den Leser
    gp 1.1.1 Zielgruppe
    gp 1.1.2 Notation
  gp 1.2 Was ist eine Shell?
  gp 1.3 Hauptanwendungsgebiet
    gp 1.3.1 Was ist ein Shellscript?
    gp 1.3.2 Vergleich mit anderen Sprachen
  gp 1.4 Kommando, Programm oder Shellscript?
    gp 1.4.1 Shell-eigene Kommandos (Builtin-Kommando)
    gp 1.4.2 Aliase in der Shell
    gp 1.4.3 Funktionen in der Shell
    gp 1.4.4 Shellscripts (Shell-Prozeduren)
    gp 1.4.5 Programme (binär)
  gp 1.5 Die Shell-Vielfalt
    gp 1.5.1 ksh (Korn-Shell)
    gp 1.5.2 Bash (Bourne-Again-Shell)
    gp 1.5.3 zsh (Z-Shell)
    gp 1.5.4 ash (A-Shell)
    gp 1.5.5 rbash, rzsh (Restricted Shell)
    gp 1.5.6 tcsh (TC-Shell)
    gp 1.5.7 Welche Shell-Variante wird in diesem Buch verwendet?
    gp 1.5.8 rsh und ssh
  gp 1.6 Betriebssysteme
  gp 1.7 Crashkurs: einfacher Umgang mit der Kommandozeile
    gp 1.7.1 Grundlegende Befehle
    gp 1.7.2 Der Umgang mit Dateien
    gp 1.7.3 Der Umgang mit Verzeichnissen
    gp 1.7.4 Datei- und Verzeichnisnamen
    gp 1.7.5 Gerätenamen
    gp 1.7.6 Dateiattribute
  gp 1.8 Shellscripts schreiben und ausführen
    gp 1.8.1 Der Editor
    gp 1.8.2 Der Name des Shellscripts
    gp 1.8.3 Ausführen
    gp 1.8.4 Hintergrundprozess starten
    gp 1.8.5 Ausführende Shell festlegen
    gp 1.8.6 Kommentare
    gp 1.8.7 Stil
    gp 1.8.8 Ein Shellscript beenden
    gp 1.8.9 Testen und Debuggen von Shellscripts
    gp 1.8.10 Shellscript, das ein Shellscript erstellt und ausführt
  gp 1.9 Vom Shellscript zum Prozess
    gp 1.9.1 Ist das Shellscript ein Prozess?
    gp 1.9.2 Echte Login-Shell?
  gp 1.10 Datenstrom
    gp 1.10.1 Ausgabe umleiten
    gp 1.10.2 Standardfehlerausgabe umleiten
    gp 1.10.3 Eingabe umleiten
    gp 1.10.4 Pipes
    gp 1.10.5 Ein T-Stück mit tee
    gp 1.10.6 Ersatzmuster (Wildcards)
    gp 1.10.7 Brace Extension (Bash und Korn-Shell only)
    gp 1.10.8 Muster-Alternativen (Bash und Korn-Shell only)
    gp 1.10.9 Tilde-Expansion (Bash und Korn-Shell only)
  gp 1.11 Empfehlung


Rheinwerk Computing

1.7 Crashkurs: einfacher Umgang mit der Kommandozeildowntop

Wahrscheinlich wird der ein oder andere im Umgang mit der Kommandozeile der Shell schon geübt sein. Trotzdem will ich hier einen kleinen »Crashkurs« zur Verwendung der Kommandozeile einer Shell geben – natürlich auf das Nötigste beschränkt. Viele dieser Kommandos werden im Laufe der Kapitel immer wieder zu Demonstrationszwecken verwendet. Noch mehr Kommandos und eventuell auch mehr zu den möglichen (wichtigsten) Optionen finden Sie in der »Linux-UNIX-Kommandoreferenz« am Ende des Buchs. Ich beschränke mich im Crashkurs nur auf die grundlegenden Befehle und das Arbeiten mit Dateien und Verzeichnissen.


Rheinwerk Computing

1.7.1 Grundlegende Befehle  downtop

Um überhaupt einen Befehl auszuführen, muss nach dessen Eingabe die (ENTER)-Taste gedrückt werden. Danach wird das Linux-UNIX-System veranlassen, dass der Befehl das ausführt, was er eben tun soll.

Wer ist eingeloggt und wer bin ich – who und whoami

Wollen Sie wissen, wer alles auf dem System eingeloggt ist, dann kann der Befehl who (engl. wer) verwendet werden.

you@host > who
rot      tty2         Jan 30 14:14
tot      :0           Jan 30 15:02 (console)
you      tty1         Jan 30 11:14

Hier sind die User »rot«, »tot« und »you« eingeloggt. Neben der Benutzererkennung werden hierbei auch die Nummern der »tty« angezeigt. »tty1« und »tty2« sind beides echte Terminals ohne grafische Oberfläche. Hingegen scheint der User »tot« mit einer grafischen Oberfläche verbunden zu sein. Des Weiteren finden Sie hier das Datum und die Uhrzeit des Logins.

Wollen Sie wissen, wer davon Sie sind, dann können Sie das mit whoami (engl. wer bin ich) abfragen (vielleicht sind Sie ja irgendwie an Root-Rechte gekommen).

you@host > whoami
you
you@host > su
Password: ********
# whoami
root

Die Ausgabe von Zeichen – echo

Den Befehl echo werden Sie noch öfters einsetzen. Mit echo können Sie alles ausgeben, was hinter dem Befehl in der Eingabezeile folgt. Hört sich zunächst recht trivial an, aber in der Praxis (bspw. bei der Ausgabe von Shellscripts, der Ausgabe von Shell-Variablen oder zu Debugging-Zwecke etc.) ist dieser Befehl unverzichtbar.

you@host > echo Hallo
Hallo
you@host > echo Mehrere Worte ausgeben
Mehrere Worte ausgeben
you@host > echo
you@host > echo Mehrere Leerzeichen       werden        ignoriert
Mehrere Leerzeichen werden ignoriert
you@host > echo $SHELL
/bin/bash

Sicherlich ist Ihnen dabei auch aufgefallen, dass echo mehrere Leerzeichen zwischen den einzelnen Wörtern ignoriert. Das liegt daran, dass bei Linux/UNIX die Leerzeichen lediglich dazu dienen, mehrere Worte voneinander zu trennen – weil eben nur die Worte von Bedeutung sind. Werden mehr Leerzeichen oder Tabulatoren (siehe IFS) als Teil eines Befehls oder einer Befehlskette verwendet, werden diese grundsätzlich ignoriert. Wollen Sie dennoch mit echo mehrere Leerzeichen ausgeben, so können Sie den Text auch zwischen doppelte Anführungsstriche stellen:

you@host > echo "jetzt geht es auch mit mehreren     Leerzeichen"
jetzt geht es auch mit mehreren     Leerzeichen

Rheinwerk Computing

1.7.2 Der Umgang mit Dateien  downtop

Der Umgang mit Dateien wird dank einfacher Möglichkeiten unter Linux/UNIX zum Kinderspiel. Hier finden Sie die wichtigsten Befehle, die im Verlauf des Kapitels zum Einsatz kommen.

Datei(en) auflisten – ls

Der Befehl ls (Abkürzung für list = auflisten) ist wohl der am häufigsten benutzte Befehl in einer Shell überhaupt. Damit können Sie die Dateien auflisten, die sich in einem Verzeichnis befinden.

you@host > ls
bin      Documents  GNUstep  new_dir            public_html
Desktop  Dokumente  Mail     OpenOffice.org1.1  Shellbuch

Sicherlich fällt Ihnen hierbei auf, dass ls neben gewöhnlichen Dateien auch Inhaltsverzeichnisse und Spezialdateien (Gerätedateien) mit ausgibt. Darauf möchte ich ein paar Seiten später näher eingehen.

Inhalt einer Datei ausgeben – cat

Mit dem Befehl cat (Abkürzung für catenate = verketten, aneinander reihen) können Sie den Inhalt einer Datei ausgeben lassen. Als Argument übergibt man dem Befehl den Namen der Datei, deren Inhalt man lesen möchte.

you@host > cat beispiel.txt
Dieser Text steht in der Textdatei "beispiel.txt"
Beenden kann man diese Eingabe mit Strg+D
you@host > cat >> beispiel.txt
Dieser Text wird ans Ende von "beispiel.txt" geschrieben.
you@host >  cat beispiel.txt
Dieser Text steht in der Textdatei "beispiel.txt"
Beenden kann man diese Eingabe mit Strg+D
Dieser Text wird ans Ende von "beispiel.txt" geschrieben.

Im Beispiel konnten Sie sehen, dass cat für mehr als nur das Ausgeben von Dateien verwendet werden kann. Hier wurde zum Beispiel mit dem Ausgabeumlenkungszeichen >> der von Ihnen darauf folgend eingegebene Text an die Datei beispiel.txt gehängt. Beenden können Sie die Eingabe über die Standardeingabe mit EOF (End Of File), die zugehörige Tastenkombination ist (Strg)+(D). Mehr zur Ein-/Ausgabeumleitung erfahren Sie in Abschnitt 1.10.

Zeilen, Worte und Zeichen zählen – wc

Mit dem Kommando wc (Abkürzung für word count = Wörter zählen) können Sie die Anzahl der Zeilen, Worte und Zeichen einer Datei zählen.

you@host > wc beispiel.txt
  3  22 150 beispiel.txt
you@host > wc -l beispiel.txt
3 beispiel.txt
you@host > wc -w beispiel.txt
22 beispiel.txt
you@host > wc -c beispiel.txt
150 beispiel.txt

Geben Sie – wie im ersten Beispiel – wc nur mit dem Dateinamen als Argument an, werden Ihnen drei Zahlen ausgegeben. Die Bedeutung dieser drei Zahlen ist, der Reihe nach: die Anzahl der Zeilen, die Anzahl der Wörter und die Anzahl von Zeichen. Natürlich können Sie mit einer Angabe der entsprechenden Option auch einzeln die Anzahl von Zeilen (–l = line), Worten (–w = words) und Zeichen (–c = character) einer Datei ermitteln.


Hinweis   Fast jeder Linux-UNIX-Befehl bietet Ihnen solche speziellen Optionen an. Das Format ist generell immer gleich, gefolgt von einem Minuszeichen folgt die gewünschte Option. Wollen Sie bspw. wissen, was Ihnen der ein oder andere Befehl noch so für Optionen bietet, dann hilft häufig ein Aufruf des Befehls gefolgt von der Option --help aus. Mehr Details zu einzelnen Optionen eines Kommandos finden Sie in der Linux-UNIX-Kommandoreferenz (siehe Kapitel 14) und natürlich auf den man-Pages. Die Verwendung der man-Pages wird ebenfalls in der Kommandoreferenz erläutert.


Datei(en) kopieren – cp

Dateien kopieren können Sie mit dem Kommando cp (Abkürzung für copy = kopieren). Als erstes Argument übergeben Sie diesem Befehl den Namen der Datei (Quelldatei), die kopiert werden soll. Das zweite Argument ist dann der Name der Kopie (Zieldatei), die Sie erstellen wollen.

you@host > cp beispiel.txt kopie_beispiel.txt
you@host > ls *.txt
beispiel.txt  kopie_beispiel.txt

Beachten Sie allerdings, wenn Sie hier als zweites Argument (im Beispiel kopie_beispiel.txt) den Namen einer bereits vorhandenen Datei verwenden, dass diese gnadenlos überschrieben wird.

Datei(en) umbenennen oder verschieben – mv

Eine Datei können Sie mit dem Kommando mv (Abkürzung für move = bewegen) umbenennen oder, sofern als Ziel ein anderes Verzeichnis angegeben wird, verschieben. Die Argumente entsprechen dabei demselben Prinzip wie beim Kommando cp. Das erste Argument ist der Name der Datei, die umbenannt oder verschoben werden soll, und das zweite Argument ist entweder der neue Name der Datei oder – wenn gewünscht – das Verzeichnis, wohin mv die Datei schieben soll.

you@host > ls
beispiel.txt  kopie_beispiel.txt
you@host > mv kopie_beispiel.txt beispiel.bak
you@host > ls
beispiel.bak  beispiel.txt
you@host > mv beispiel.bak /home/tot/ein_ordner
you@host > ls
beispiel.txt
you@host > ls /home/tot/ein_ordner
beispiel.bak

Wie beim cp-Befehl wird mit mv der als zweites Argument angegebene Name bzw. das Ziel überschrieben, sofern ein gleicher Name bereits existiert.

Datei(en) löschen – rm

Wollen Sie eine Datei aus Ihrem System entfernen, hilft Ihnen der Befehl rm (Abkürzung für remove = entfernen). Als Argument von rm geben Sie die Datei an, die Sie löschen wollen. Natürlich dürfen hierbei auch mehrere Dateien auf einmal angegeben werden.

you@host > rm datei.txt
you@host > rm datei1.txt datei2.txt datei3.txt datei4.txt
you@host > rm beispiel.txt /home/tot/ein_ordner/beispiel.bak

Leere Datei erzeugen – touch

Mit diesem Befehl können Sie eine oder mehrere Dateien als Argument mit der Größe 0 anlegen. Sofern eine Datei mit diesem Namen existiert, ändert touch nur das Datum der letzten Änderung – lässt aber den Inhalt der Datei in Ruhe. Ich verwende den Befehl gern zu Demonstrationszwecken im Buch, wenn ich mal schnell mehrere Dateien auf einmal erzeugen will und damit ohne großen Aufwand das ein oder andere Szenario darstellen kann.

you@host > touch datei1.txt
you@host > ls *.txt
datei1.txt
you@host > touch datei2.txt datei3.txt datei4.txt
you@host > ls *.txt
datei1.txt  datei2.txt  datei3.txt  datei4.txt

Rheinwerk Computing

1.7.3 Der Umgang mit Verzeichnissen  downtop

Neben dem Umgang mit Dateien gehören der Umgang und das Verständnis von Verzeichnissen ebenso zu den grundlegenden Arbeiten. Daher hier die wichtigsten Befehle und Begriffe dazu.

Verzeichnishierarchien und Home

In jedem Linux-UNIX-System finden Sie sich nach dem Einloggen (oder beim Starten einer »xterm«) automatisch im Heim-Inhaltsverzeichnis (home) wieder. Geht man bspw. davon aus, dass Ihr Heim-Inhaltsverzeichnis »you« lautet und dass dieses Verzeichnis ein Unterverzeichnis des Verzeichnisses /home ist (was gewöhnlich der Fall ist), dann lautet Ihr Heimverzeichnis /home/you. Die Rede ist von einem Verzeichnisbaum, an dessen Spitze sich immer ein / befindet – das Wurzelinhaltsverzeichnis (Root-Verzeichnis, nicht zu verwechseln mit dem Benutzer root). Hierbei gibt es keine Laufwerksangaben, wie dies Windows-typisch der Fall ist. Das oberste Hauptverzeichnis geben Sie hier immer mit einem / an, welches Sie auch gern mit ls ausgeben lassen können.

you@host > ls /
bin   dev  home  media  opt   root  srv  tmp  var
boot  etc  lib   mnt    proc  sbin  sys  usr  windows

So veranlassen Sie, dass ls den Inhalt vom Wurzelverzeichnis in alphabetischer Reihenfolge (hier von oben nach unten; dann von links nach rechts) ausgibt. Will man an dieser Stelle wissen, wo man sich gerade befindet (das aktuelle Arbeitsverzeichnis, also das Verzeichnis, welches ls ohne sonstige Angaben ausgeben würde), kann man den Befehl pwd (Abkürzung für print working director = gib das Arbeitsverzeichnis aus) verwenden.

you@host > pwd
/home/you

Geben Sie also einen Pfadnamen beginnend mit einem Schrägstrich ( / ) an, wird versucht, eine Datei oder ein Verzeichnis vom Wurzelverzeichnis aus zu erreichen. Man spricht dabei von einer vollständigen oder absoluten Pfadangabe. Die weiteren Verzeichnisse, die Sie zur Datei oder zum Verzeichnis benötigen, werden mit einem / ohne Zwischenraum getrennt.

you@host > cat /home/you/Dokumente/brief.txt

Hier wird die Datei brief.txt, welche sich im Verzeichnis /home/tot/Dokumente befindet, ausgegeben. Befindet sich diese Datei allerdings in Ihrem Heimverzeichnis (in der Annahme, es lautet hier /home/you), dann müssen Sie keine vollständige Pfadangabe vom Wurzelverzeichnis aus vornehmen. Hier würde auch eine relative Pfadangabe genügen. Als »relativ« wird hier der Pfad vom aktuellen Arbeitsverzeichnis aus bezeichnet.

you@host > pwd
/home/you
you@host > cat Dokumente/brief.txt

Was hier angegeben wurde, wird auch als vollständige Dateiangabe bezeichnet, weil hier die Datei brief.txt direkt mitsamt Pfad (relativ zum aktuellen Arbeitsverzeichnis) angesprochen wird. Gibt man hingegen nur /home/you/Dokumente an, dann spricht man von einem (vollständigen) Pfadnamen.

Früher oder später werden Sie in Ihrem Inhaltsverzeichnis auch mal auf die Punkte . und .. stoßen. Die (doppelten) Punkte .. repräsentieren immer das Inhaltsverzeichnis, das eine Ebene höher liegt. Befinden Sie sich also nach dem Einloggen im Verzeichnis /home/you, bezieht sich .. auf das Inhaltsverzeichnis von you. So können Sie bspw. beim Wechseln des Verzeichnisses jederzeit mit Angabe von .. in das nächsthöhere Verzeichnis der Hierarchie wechseln. Selbst das höchste Verzeichnis, die Wurzel /, besitzt solche Einträge, nur dass es sich beim Wurzelverzeichnis um einen Eintrag auf sich selbst handelt – höher geht es eben nicht mehr.

you@host > pwd
/home/you
you@host > ls ..
you
you@host > ls /..
bin   dev  home  media  opt   root  srv  tmp  var
boot  etc  lib   mnt    proc  sbin  sys  usr  windows

Der einfache Punkt hingegen verweist immer auf das aktuelle Inhaltsverzeichnis. So sind bspw. folgende Angaben absolut gleichwertig:

you@host > ls
you@host > ls ./

In Tabelle 1.1 finden Sie eine Zusammenfassung der Begriffe, die in Bezug auf Verzeichnisse wichtig sind.


Tabelle 1.1   Wichtige Begriffe im Zusammenhang mit Verzeichnissen

Begriff Bedeutung
Wurzelverzeichnis / (engl. root) Höchstes Verzeichnis im Verzeichnisbaum
Aktuelles Arbeitsverzeichnis Das Verzeichnis, in dem Sie sich im Augenblick befinden
Vollständige Pfadangabe Ein Pfadname beginnend mit / (Wurzel); alle anderen Verzeichnisse werden ebenfalls mit einem / getrennt.
Relative Pfadangabe Der Pfad ist relativ zum aktuellen Arbeitsverzeichnis; hierbei wird kein voranstehendes / verwendet.
Vollständiger Dateiname Pfadangabe inklusive Angabe zur entsprechenden Datei (bspw. /home/you/Dokumente/brief.txt)
Vollständiger Pfadname Pfadangabe zu einem Verzeichnis, in dem sich die entsprechende Datei befindet (bspw. /home/you/Dokumente)
.. (zwei Punkte) Verweisen auf ein Inhaltsverzeichnis, das sich eine Ebene höher befindet
. (ein Punkt) Verweist auf das aktuelle Inhaltsverzeichnis

Inhaltsverzeichnis wechseln – cd

Das Wechseln von einem Inhaltsverzeichnis können Sie mit dem Befehl cd (Abkürzung für change directory = wechsle Verzeichnis) ausführen. Als Argument übergeben Sie diesem Befehl das Inhaltsverzeichnis, in das Sie wechseln wollen.

you@host > pwd
/home/you
you@host > cd Dokumente
you@host > pwd
/home/you/Dokumente
you@host > ls
Beispiele  FAQ.tmd  Liesmich.tmd
you@host > cd ..
you@host > pwd
/home/you
you@host > cd ../..
you@host > pwd
/
you@host > cd /home/you
you@host > pwd
/home/you
you@host > cd /
you@host > pwd
/
you@host > cd
you@host > pwd
/home/you

Mit den vorherigen Erläuterungen sollte Ihnen dieses Beispiel keine Probleme mehr bereiten. Einzig der Sonderfall sollte erwähnt werden, die Funktion cd. Verwenden Sie cd allein, so gelangen Sie immer in das Heim-Inhaltsverzeichnis zurück, egal wo Sie sich gerade befinden.

Ein Inhaltsverzeichnis erstellen – mkdir

Ein neues Inhaltsverzeichnis können Sie mit dem Befehl mkdir (Abkürzung make directory = erzeuge Verzeichnis) anlegen. Als Argument erwartet dieser Befehl den Namen des neu zu erzeugenden Verzeichnisses. Ohne Angabe eines Pfadnamens als Argument wird das neue Verzeichnis im aktuellen Arbeitsverzeichnis angelegt.

you@host > mkdir Ordner1
you@host > pwd
/home/you
you@host > cd Ordner1
you@host > pwd
/home/you/Ordner1
tyou@host > cd ..
you@host > pwd
/home/you

Ein Verzeichnis löschen – rmdir

Ein Verzeichnis können Sie mit dem Befehl rmdir (Abkürzung für remove directory = lösche Verzeichnis) wieder löschen. Um aber ein Verzeichnis wirklich löschen zu dürfen, muss dieses leer sein. Das heißt, im Verzeichnis darf sich außer den Einträgen . und .. nichts mehr befinden. Die Verwendung von rmdir entspricht der von mkdir, nur dass Sie als Argument das Verzeichnis angeben, das gelöscht werden soll.

you@host > cd Ordner1
you@host > touch testfile.dat
you@host > cd ..
you@host > rmdir Ordner1
rmdir: Ordner1: Das Verzeichnis ist nicht leer

Um also alle Dateien in einem Verzeichnis zu löschen, haben Sie ja bereits das Kommando rm kennen gelernt. Mit einer Datei ist das kein großer Aufwand, doch befinden sich in einem Verzeichnis mehrere Dateien, bietet Ihnen rm die Option –r zum rekursiven Löschen an.

you@host > rm -r Ordner1

Dank dieser Option werden alle gewünschten Verzeichnisse und die darin enthaltenen Dateien gelöscht, inklusive aller darin enthaltenen Unterverzeichnisse.


Rheinwerk Computing

1.7.4 Datei- und Verzeichnisnamen  downtop

Bei der Verwendung von Datei- bzw. Verzeichnisnamen ist Linux/UNIX sehr flexibel. Hierbei ist fast alles erlaubt, dennoch gibt es auch einige Zeichen, die man in einem Dateinamen besser weglässt.

gp  Länge – bei modernen Dateisystemen kann rein theoretisch eine Länge von 256 bis teilweise 1024 Zeichen verwendet werden. Natürlich ist diese Länge immer abhängig vom Dateisystem.
gp  Sonderzeichen – als Sonderzeichen können Sie im Dateinamen . ,_ und % ohne Bedenken einsetzen. Die Verwendung von Leerzeichen und des Schrägstrichs / ist zwar auch erlaubt, aber kann Probleme verursachen – daher sei von einer Verwendung dieser Zeichen im Dateinamen abgeraten. Ebenso sieht dies mit einigen anderen Sonderzeichen wie bspw. # oder * aus. Je nachdem, an welcher Position solche Sonderzeichen verwendet werden, könnten diese von der Shell falsch interpretiert werden.
gp  Dateierweiterung – hier ist alles erlaubt, Sie können die wildesten Erweiterungsorgien feiern. Trotzdem sollten Sie nicht die üblichen Verdächtigen hierzu missbrauchen. Es macht recht wenig Sinn, eine reine Textdatei mit der Endung ».mp3« oder ein binäres Programm mit ».exe« zu versehen ;-).
gp  Nationales – gerade die vielen nationalen Sonderzeichen im Dateinamen, wie hierzulande Umlaute, können beim Wechsel auf andere Systeme erhebliche Probleme bereiten. Deshalb sollte man wenn möglich besser die Finger davon lassen.

Rheinwerk Computing

1.7.5 Gerätenamen  downtop

Bisher haben Sie die Dateitypen der normalen Dateien und der (Datei-)Verzeichnisse kennen gelernt. Es gibt allerdings noch eine dritte Dateiart, die Gerätedateien (auch Spezialdateien genannt). Mit den Gerätedateien (device files) können Programme unter Verwendung des Kernels auf die Hardwarekomponenten im System zugreifen. Natürlich sind das keine Dateien, wie Sie sie eigentlich kennen, aber aus der Sicht der Programme werden diese wie gewöhnliche Dateien behandelt. Man kann daraus lesen, etwas dorthin schreiben oder sie auch für spezielle Zwecke benutzen – eben alles, was Sie mit einer Datei auch machen können (und noch mehr). Gerätedateien bieten Ihnen eine einfache Methode, um auf Systemressourcen wie bspw. den Bildschirm, den Drucker, das Diskettenlaufwerk oder die Soundkarte zuzugreifen, ohne dass Sie wissen müssen, wie dieses Gerät eigentlich funktioniert.

Auf Linux-UNIX-Systemen finden Sie die Gerätedateien fast immer im Verzeichnis /dev. Hier finden Sie zu jedem Gerät einen entsprechenden Eintrag. /dev/ttyS0 steht bspw. für die erste serielle Schnittstelle, /dev/hda1 ist die erste Partition der ersten IDE-Festplatte. Neben echten Geräten in der Gerätedatei gibt es auch so genannte Pseudo-Gerätedateien im /dev-Verzeichnis, wie beispielsweise den bekanntesten Vertreter /dev/null, das häufig als Datengrab verwendet wird (dazu später mehr).

Beim Verwenden von Gerätedateinamen in Ihren Shellscripts sollten Sie allerdings Vorsicht walten lassen und wenn möglich diese Eingabe dem Anwender überlassen (etwa mit einer Konfigurationsdatei). Der Grund ist hierbei, dass viele Linux-UNIX-Systeme unterschiedliche Gerätenamen verwenden.


Hinweis   Natürlich ließe sich hierzu noch viel mehr schreiben – daher sei bei Bedarf mein Buch »Linux-Unix-Programmierung« empfohlen, das Sie auch online auf der Webseite www.pronix.de vorfinden. Hier werden die Gerätedateien in einem extra Kapitel etwas umfangreicher behandelt.



Rheinwerk Computing

1.7.6 Dateiattribute  toptop

Nachdem Sie jetzt wissen, dass Linux/UNIX zwischen mehreren Dateiarten, insgesamt sechs, unterscheidet – nicht erwähnt wurden hierbei die Sockets, Pipes (named Pipes und FIFOs) und die Links (Softlinks bzw. Hardlinks) –, sollten Sie sich auf jeden Fall noch mit den Dateiattributen auseinander setzen. Gerade als angehender oder bereits leibhaftiger Administrator hat man häufig mit unautorisierten Zugriffen auf bestimmte Dateien, Verzeichnisse oder Gerätedateien zu tun. Auch in Ihren Shellscripts werden Sie das eine oder andere Mal die Dateiattribute auswerten müssen und entsprechend darauf reagieren wollen.

Am einfachsten erhalten Sie solche Informationen mit dem Befehl ls und der Option –l (für long). So gelangen Sie an eine recht üppige Zahl von Informationen zu den einzelnen Dateien und Verzeichnissen.

you@host > ls -l
-rw-r--r--  1 you users 9689 2003–12–04 15:53 datei.dat

Hinweis   Beachten Sie, dass die Ausgabe unter verschiedenen Betriebssystemen abweichen kann.


Hier nun zu den einzelnen Bedeutungen der Ausgabe von ls –l, aufgelistet von links nach rechts.

Dateiart (Dateityp)

Ganz links, beim ersten Zeichen (hier befindet sich ein Minuszeichen ) wird die Dateiart angegeben. Folgende Angaben können sich hier befinden (siehe Tabelle 1.2).


Tabelle 1.2   Mögliche Angaben für die Dateiart (Dateityp)

Zeichen Bedeutung (Dateiart)
Normale Datei
d Verzeichnis (d = directory)
p Named Pipe; steht für eine Art Pufferungsdatei, eine Pipe-Datei.
c (c = character oriented) steht für eine zeichenorientierte Gerätedatei.
b (b = block oriented) steht für eine blockorientierte Gerätedatei.
s (s = socket) steht für ein Socket (genauer einen UNIX-Domainsocket).
l Symbolische Links

Zugriffsrechte

Die nächsten neun Zeichen, die Zugriffsrechte, sind in drei Dreiergruppen (rwx) aufgeteilt, von links nach rechts: Eigentümer, Gruppe und allen anderen. In Tabelle 1.3 finden Sie die einzelnen Bedeutungen.


Tabelle 1.3   Zugriffsrechte des Eigentümers, der Gruppe und aller anderen

Darstellung in ls Bedeutung

[r––––––––]

read (user; Leserecht für Eigentümer)

[–w–––––––]

write (user; Schreibrecht für Eigentümer)

[––x––––––]

execute (user; Ausführrecht für Eigentümer)

[rwx––––––]

read, write, execute (user; Lese-, Schreib-, Ausführungsrecht für Eigentümer)

[–––r–––––]

read (group; Leserecht für Gruppe)

[––––w––––]

write (group; Schreibrecht für Gruppe)

[–––––x–––]

execute (group; Ausführungsrecht für Gruppe)

[–––rwx–––]

read, write, execute (group; Lese-, Schreib-, Ausführungsrecht für Gruppe)

[––––––r––]

read (other; Leserecht für alle anderen Benutzer)

[–––––––w–]

write (other; Schreibrecht für alle anderen Benutzer)

[––––––––x]

execute (other; Ausführungsrecht für alle anderen Benutzer)

[––––––rwx]

read, write, execute (other; Lese-, Schreib-, Ausführungsrecht für alle anderen Benutzer)

Sind bspw. die Rechte rw–r––r–– für eine Datei gesetzt, so bedeutet dies, dass der Eigentümer (rw–) der Datei diese sowohl lesen (r) als auch beschreiben (w) darf, nicht aber ausführen (hierzu fehlt ein x). Die Mitglieder in der Gruppe (r––) und alle anderen (r––) hingegen dürfen diese Datei nur lesen.

Der Rest

Als Nächstes finden Sie die Verweise auf die Datei. Damit ist die Anzahl der Links (Referenzen) gemeint, die für diese Datei existieren. In diesem Fall gibt es keine Verweise auf die Datei, da hier die »1« steht. Jetzt kommt der Benutzername des Dateibesitzers (hier »you«), gefolgt vom Namen der Gruppe (hier »users«), welcher vom Eigentümer der Datei festgelegt wird. Die nächsten Werte entsprechen der Länge der Datei in Bytes (hier 9689 Bytes) und dem Datum der letzten Änderung der Datei mitsamt Uhrzeit (2003–12–04 15:53). Am Ende finden Sie den Namen der Datei wieder (hier datei.dat).


Hinweis   Trotz dieser kleinen Einführung konnten viele grundlegende Dinge von Linux/UNIX nicht behandelt werden. Sollten Sie mit diesem Buch tatsächlich Ihre ersten Erfahrungen mit Linux/UNIX sammeln, so wäre die Hinzuziehung zusätzlicher Literatur sinnvoll.




Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
 << zurück
  
  Zum Katalog
Zum Katalog: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-Server






 Linux-Server


Zum Katalog: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Katalog: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Katalog: Linux Handbuch






 Linux Handbuch


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de