Galileo Computing < openbook >
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung


'Wie werde ich Unix-Guru' als Buch bestellen
A. Willemer
Wie werde ich UNIX-Guru
I  ANWENDUNG
Know-How für Unix/Linux-User: Einführung, Shell, Befehle, Hilfe, Arbeit mit Dateien, Editoren, Reguläre Ausdrücke, nützliche Tools, Hardware.

II  ADMINISTRATION
Tools, Systemstart, Benutzer verwalten, Hardware konfigurieren, Software installieren, Datensicherung, Tuning, Kernel

III  NETZWERK
Client/Server Systeme, TCP/IP, Routing, IPv6, Internet-Dienste, DHCP, Webserver, Firewalls

IV  DAS X-WINDOW SYSTEM
Die grafische Oberfläche von UNIX einrichten und nutzen

V  PROGRAMMIERUNG VON SHELLSKRIPTEN
Automatisieren von Tasks durch Shell-Skripte.

VI  PERL
Interpreter, Syntax, Variablen, Steuerung, Funktionen, UNIX-Aufrufe, GUIs mit Tk

VII  PROGRAMMIERWERKZEUGE
C-Compiler, Analyse-Tools, CVS, yacc, diff

VIII  UNIX-SYSTEMAUFRUFE
UNIX-Befehle in eigenen Programmen nutzen

IX  LITERATUR
Weiterführende Literatur zu UNIX und LINUX

 
Galileo Computing / <openbook> / "Wie werde ich UNIX-Guru ?"
« Was ist wo? Der UNIX-Verzeichnisbaum Dateieigenschaften »

Suche im Verzeichnisbaum: find

Mit dem Kommando find ist es möglich, einen Verzeichnisbaum rekursivRekursiv heißt »selbstaufrufend« und ist eine besondere Programmiertechnik. Da das Durchlaufen von Bäumen durch rekursive Programme am einfachsten zu realisieren ist, nennt man Bäume »rekursive Strukturen« und das Durchlaufen der kompletten Äste eines Baumes »rekursiv«. Vgl. Wirth, Niklaus: Algorithmen und Datenstrukturen mit Modula-2. 4. Aufl. Stuttgart, Teubner, 1986. S. 174ff. nach Dateien zu durchsuchen und diese auszugeben oder Aktionen auf den gefundenen Dateien auszuführen. find ist also ein sehr mächtiger Befehl. Soll nur eine Datei gesucht werden, reicht die vereinfachte Syntax:

find Pfadname -name Dateimaske -print

Der Pfadname gibt an, ab welcher Stelle die rekursive Suche beginnt. Die Dateimaske beschreibt die gesuchte Datei. Es können die normalen Wildcards verwendet werden, um mehrere Dateien anzusprechen.

Neben der flexiblen Suche ist die interessanteste Fähigkeit von find die Ausführung eines Kommandos auf jeder der gefundenen Dateien. Die zuständige Option heißt -exec. Dahinter wird ein Befehl gesetzt, der mit einem Semikolon abgeschlossen wird. Letzteres muss durch einen Backslash gegen die Interpretation durch die Shell geschützt werden. Die Shell würde das Semikolon als Trennzeichen zwischen zwei Befehlen interpretieren, die nacheinander ausgeführt werden. Vergißt man den Backslash, würde die Shell das Semikolon selbst interpretieren und nicht an find weiterreichen. Der Bezug auf die gefundene Datei wird im Befehl durch ein Paar geschweifter Klammern repräsentiert. Um beispielsweise alle Dateien namens core in den Heimatverzeichnissen zu löschen, lautet der Befehl:

find /home -name core -exec rm {} ;

Der erste Parameter gibt an, wo die Suche beginnen soll. -name fordert, dass ein Dateiname, der unter dem Verzeichnis /home gefunden wird, der Dateimaske entspricht. Nur dann wird die Datei von find weiter bearbeitet. Man kann es auch so ausdrücken, dass die Optionen einen Wahrheitswert zurückliefern müssen, der wahr ist, wenn die weiteren Optionen bearbeitet werden sollen. Die Maske zu -name ist einfach core. Nur Dateien mit dem Namen core werden also weiter bearbeitet. Zwischen der Option -exec und dem ; steht der Befehl, der auf die gefundenen Dateien angewandt wird. Der gefundene Dateiname mit seinem Pfad wird dort eingesetzt, wo sich im Befehl das geschweifte Klammernpaar befindet. Fände find eine Datei namens core im Verzeichnis /home/arnold, würde der folgende Befehl generiert und per -exec ausgeführt:

rm /home/arnold/core

Der Befehl find kennt noch einige Optionen, die teils die Suche nach speziellen Dateien ermöglichen und teils die Ausgabe informativer gestalten. Wie oben schon angedeutet, hängt es vom dem Wahrheitswert, den die Optionen zurückliefert ab, ob die gefundene Datei weiterbearbeitet wird. Hier sind die wichtigsten Optionen zusammengefasst:

  • [-name Dateimaske] ist wahr, wenn die Dateimaske mit dem gefundenen Dateinamen übereinstimmt. Es können reguläre Ausdrücke verwendet werden.

  • [-print] ist immer wahr. Bewirkt, dass das Ergebnis der Suche angezeigt wird. Bei einigen find-Versionen muss -print nicht explizit angegeben werden, wenn keine weitere Option verwendet wird.

  • [-ls] ist immer wahr. Es bewirkt, dass neben dem Pfadnamen noch ein wenig Statistik angezeigt wird. Dies beinhaltet die folgenden Angaben:

    • i-node Nummer der Datei (siehe S. inode)
    • Größe in Kilobytes (1024 Bytes)
    • Protection mode
    • Anzahl der »harten« Links
    • Benutzer
    • Gruppe
    • Größe in Bytes
    • Änderungszeitpunkt

  • [-type Zeichen] Der Dateityp wird erfragt. Das Zeichen kann folgende Werte haben:

    [Dateitypen]C|L Zeichen & Bedeutung
    f & Dateien
    d & Verzeichnisse
    l & symbolische Links
    b c & Peripheriedateien
    p s & Kommunikationsendpunkte (named pipe und socket)

  • [-perm Oktalzahl] Erfragt die Berechtigung, die in oktaler Darstellung angegeben wird. Zur Codierung siehe das Kapitel »Berechtigungen« auf S. rechte. Beispiel:

    find . -perm 0600 -print
    

    Es werden alle Dateien unterhalb des aktuellen Verzeichnisses mit Schreib- und Leserecht für den Benutzer und ansonsten keinen Rechten angezeigt.

    Man kann festlegen, dass mindestens die angegebenen Rechte vorhanden sein müssen. Dazu muss der Zahl ein Minuszeichen vorangehen.

  • [-exec Befehl] Führt einen Befehl aus. Die aktuelle Datei wird durch das geschweifte Klammernpaar { } als Argument gekennzeichnet. Der Befehl hört mit einem Semikolon auf. Damit die Shell es nicht selbst interpretiert, muss es mit einem Backslash versehen werden. Beispiel:

    -exec rm { } ;
    

Man kann die verschiedenen Optionen von find kombinieren. Man könnte beispielsweise nach Dateien suchen, die .rhosts heißen und nicht die Berechtigung 600 haben. Dazu muss man die Aussagen miteinander logisch verknüpfen. Nach den Gesetzen der Logik heißt UND, dass beide Aussagen zutreffen müssen, und ODER, dass mindestens eine der Aussagen zutreffen muss. Derartige Konstruktionen werden vor allem im Bereich der Shellprogrammierung benötigt. Mit Hilfe der folgenden Operatoren sind logische Ausdrücke kombinierbar:

  • [( )] Eine Gruppe von logischen Ausdrücken und Operatoren in Klammern. Klammern sind besondere Zeichen für UNIX und müssen per Backslash gequotet werden.

  • [!] Die Negation eines logischen Ausdrucks. Das Ausrufezeichen (!) repräsentiert den NICHT-Operator.

  • [-a] Die UND-Verknüpfung von logischen Ausdrücken. Werden mehrere logische Ausdrücke hintereinander geschrieben, wird dies implizit als UND interpretiert. Man kann auch explizit den Operator -a verwenden.

  • [-o] Die ODER-Vernüpfung von logischen Ausdrücken wird durch den Operator -o erreicht.

Hier sehen Sie zunächst den Befehl, der das obige Beispiel aufgreift und alle Dateien namens .rhosts in den Heimatverzeichnissen löscht, die nicht die Berechtigung 600 haben:

find /home -name .rhosts -a ! -perm 0600 -exec rm { } ;

Das folgende Beispiel sucht ab dem aktuellen Verzeichnis alle Dateien, die auf .log oder .aux enden:

find .  -name *.log -o -name *.aux

Vor den Sternen muss ein Backslash stehen, damit sie an find durchgereicht und nicht bereits durch die Shell interpretiert werden.



« Was ist wo? | Der UNIX-Verzeichnisbaum | Dateieigenschaften »
 
 Zum Katalog
Zum Katalog
Wie werde ich UNIX-Guru?
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 UNIX/Linux

PHP 4-Workshop

Einstieg in Python

Perl fürs Web

MySQL 4

GNOME 2.0
 Empfehlung

Einstieg in XML
 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
Info

 MyGalileo
Der Service für registrierte Leser:
Zu MyGalileo
Info



Copyright © Galileo Press GmbH 2003
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.
[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de