Zurück

1.103.3

Durchführung eines allgemeinen Datei-Managements


Beschreibung: Prüfungskandidaten sollten in der Lage sein, die grundlegenden Unix Kommandos zum Kopieren und Verschieben von Dateien und Verzeichnissen zu benutzen. Dieses Lernziel beinhaltet das Durchführen fortgeschrittener Dateiverwaltungs-Operationen wie dem rekursiven Kopieren mehrerer Dateien, das rekursive Löschen von Verzeichnissen und das Verschieben von Dateien, deren Namen einem bestimmten Muster entsprechen. Dies beinhaltet das Benutzen einfacher und komplexerer Wildcard-Muster für das Bestimmen von Dateien sowie die Verwendung von find, um Dateien aufgrund von Typ, Größe oder Zeitstempel ausfindig zu machen und Operationen an ihnen durchzuführen.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:


Kommandos zum Umgang mit Dateien

Grundsätzlich stehen uns unter Linux die gleichen Programme zur Verfügung, wie unter jedem anderen textorientierten System. Wir können Dateien kopieren, verschieben (umbenennen) und löschen. Die jeweils notwendigen Kommandos sind cp (copy), mv (move) und rm (remove).

Im Gegensatz zu MSDOS Befehlen haben diese Linux/Unix-Befehle aber eine Eigenschaft, die nennenswert ist; sie können beliebig viele Dateien bearbeiten. Das heißt, es ist möglich mehrere Dateinamen anzugeben, die kopiert, verschoben oder gelöscht werden sollen.

Das bringt zumindestens beim kopieren und verschieben ein Problem mit sich, das so unter DOS nicht entsteht. DOS-Befehle zum kopieren und verschieben erlauben es, das Ziel der Operation wegzulassen. Fehlt das Ziel, so wird das aktuelle Verzeichnis als Ziel angenommen. Das ist bei Unix Befehlen nicht möglich, und zwar eben genau weil diese Befehle mehrere Dateien bearbeiten können. Dürften wir das Ziel weglassen, so wäre der Befehl, sofern ihm mehrere Dateien mitgegeben wurden, nicht in der Lage zu ermitteln, ob der letzte Parameter eine zu kopierende Datei sein soll oder das Zielverzeichnis... Trotzdem ist das leicht zu verschmerzen, heißt das aktuelle Verzeichnis doch einfach . Es reicht also, als letzten Parameter einen Punkt anzugeben, das ist nicht viel Mehraufwand.

Alle drei Befehle sind in der Lage, auch Verzeichnisse zu bearbeiten, cp und rm jedoch nur, wenn ihnen das mittels Kommandozeilenparameter mitgegeben wurde. Näheres dazu siehe unten unter dem Punkt "Rekursive Bearbeitung".

Manchmal ist es einfach nur nötig, eine leere Datei neu anzulegen. Diese Aufgabe kann auf unterschiedliche Weise gelöst werden, hier drei Beispiele:

Alle drei Methoden sind im Ergebnis gleich. In jedem Fall haben wir eine leere, neue Datei der Größe 0 Byte.

Kommandos zum Umgang mit Verzeichnissen

Neue Verzeichnisse werden unter Linux mit dem Befehl mkdir (make directory) erstellt. Mit dem Parameter -p oder --path kann dieser Befehl sogar einen ganzen Verzeichnisbaum mit beliebig vielen Unterverzeichnissen anlegen.

Leere Verzeichnisse können mit dem Befehl rmdir (remove directory) gelöscht werden. Verzeichnisse können so aber nicht gelöscht werden, wenn sie noch Dateien enthalten. Eine leere Verzeichnishierarchie kann wieder mit dem Parameter -p oder --path komplett gelöscht werden.

Das aktuelle Arbeitsverzeichnis kann mit dem Befehl cd gewechselt werden. Dieser Befehl funktioniert wie unter DOS auch, allerdings beharrt er auch beim Wechsel in das Mutterverzeichnis (..) auf ein Leerzeichen zwischen cd und ..

Wird der Befehl cd ohne Parameter eingegeben, so wechselt man in sein Homeverzeichnis.

Wird der Befehl in der Form

  cd ~username
verwendet, so wechselt man ins Homeverzeichnis des angegebenen Users.

Um sich den Inhalt eines Verzeichnisses anzusehen, gibt es den Befehl ls (list). Er kann auf vielfältige Weise angewandt werden, wichtig sind die folgenden Parameter:

BefehlBedeutung
lsNur die Namen der Dateien und Verzeichnisse werden angegeben
ls -lLanges Listing. Zugriffsrechte, Anzahl der Hardlinks, Eigentümer, Gruppe, Datum, Größe und Namen werden angegeben.
ls -iDie Inode Nummern der Dateien werden mit angegeben.
ls -aAuch die "versteckten" Dateien (deren Namen mit einem Punkt beginnt) werden angezeigt.

Werden ls keine Dateinamen mitgegeben, so zeigt der Befehl den Inhalt des aktuellen Verzeichnisses. Ansonsten wird ls die Dateien eines angegebenen Verzeichnisses oder die Informationen über die angegebenen Dateien zeigen.

Rekursive Bearbeitung

Die genannten Befehle zum Kopieren, Verschieben und Löschen von Dateien sind alle auch in der Lage, ganze Unterverzeichnisäste zu bearbeiten. Dazu muß folgendes erwähnt sein:

Wildcards

Wildcards (oder auch Jokerzeichen) werden unter Linux nicht von den einzelnen Programmen, sondern von der Shell interpretiert. Alle der genannten Programme können ja - wie oben schon erwähnt - mehrere Dateien als Parameter mitbekommen. Die Shell ersetzt die Wildcard Konstruktion durch eine Liste von passenden Dateinamen - der Befehl selbst bekommt also das Wildcard Konstrukt selbst nie zu sehen.

An Wildcards gibt es unter Linux folgende Möglichkeiten:

WildcardBedeutung
*Das Sternchen steht für eine beliebige Folge beliebiger Zeichen, auch die leere Folge. Ein einzelnes Sternchen meint also alle Dateien mit Ausnahme der Dateinamen, die mit einem Punkt beginnen.
Das MSDOS-Konstrukt *.* würde nur alle Dateien ansprechen, die irgendwo (auch am Anfang oder Ende) einen Punkt im Namen vorweisen.
?Das Fragezeichen steht für genau ein beliebiges Zeichen.
[...]Eine Menge von Zeichen in eckigen Klammern steht für genau ein Zeichen aus dieser Menge.
[...-...]Weiterentwicklung des Mengenprinzips. So ist es auch möglich, Bereiche anzugeben, ohne alle Zeichen anzugeben. Beispiel [0-9] oder [a-zA-Z]. Wieder ist genau ein Zeichen aus der Menge gemeint.
[!...]Steht am Anfang der Menge ein Ausrufungszeichen, so wird der Wahrheitswert der Menge umgedreht (NOT) - das Konstrukt steht also für genau ein Zeichen, aber dieses Zeichen darf nicht in der angegebenen Menge stehen.

All diese Konstrukte dürfen beliebig miteinander kombiniert werden, jede einzelne Wildcard darf auch mehrfach vorkommen. So würde etwa die Konstruktion

  [A-Z]*.[0-9][0-9][0-9]_[!A]
jede Datei ansprechen, deren Name mit einem Großbuchstaben ([A-Z]) beginnt. Danach darf irgendwas (*) folgen, beliebig lang. Dann muß ein Punkt kommen, gefolgt von drei Ziffern ([0-9]). Dem folgt ein Unterstrich und dann ein beliebiges Zeichen - nur eben kein A.

Dateien finden mit find

Ein universelles Werkzeug für den Umgang mit Dateien ist das Programm find. Es ermöglicht das Suchen von Dateien anhand aller denkbaren Kriterien wie find ermöglicht es darüber hinaus, beliebige Befehle auf die gefundenen Dateien anzuwenden, sie also zu löschen, kopieren, verschieben oder was auch immer. Im Abschnitt 1.104.8 - Auffinden von Systemdateien und Platzieren von Dateien an den korrekten Ort wird der Befehl genauer besprochen.