Im Kapitel ,,Grundlegende Unix Konzepte`` haben Sie gesehen, wie Sie eine Shell aufrufen. Auf diesen Seiten sehen Sie, wie sie funktioniert.
Die wahre Macht der Shell liegt in der Anzahl der vorhandenen Programme. Es gibt Tausende, und jedes dient einem bestimmten Zweck. Sie werden hier natürlich nur einige wenige in Aktion erleben können. Eine der Haupstärken von Unix ist es, diese Programme kombinieren zu können, wie Sie später noch sehen werden.
Dateimanipulation meint hier das Kopieren, Verschieben und Löschen von Dateien. Später geht es dann um die Änderung ihrer Attribute (Besitzer, Berechtigungen).
mkdir (MaKe DIRectory, engl. für ,,erstelle Verzeichnis``) erstellt neue Verzeichnisse. Die Syntax ist einfach:
mkdir [Optionen] Verzeichnis [Verzeichnis ...] |
Nur eine option ist wirklich erwähnenswert: die option -p. Ist sie gesetzt, erstellt mkdir noch nicht existierende Elternverzeichnisse gleich mit. Ansonsten gibt mkdir eine Fehlermeldung aus, wenn Sie versuchen, ein Verzeichnis mit nicht existierenden Überverzeichnissen zu erstellen. Beispiele:
mkdir bla: erstellt ein Verzeichnis bla im aktuellen Verzeichnis;
mkdir -p images/div docs: erstellt ein Verzeichnis div im Verzeichnis images. Sollte images noch nicht existieren, wird es erstellt. Außerdem wird ein Verzeichnis docs im aktuellen Verzeichnis erstellt.
Eigentlich ist das Kommando touch nicht zur Erstellung neuer Dateien gedacht, sondern um die Zeitstempel existierender Dateien zu aktualisieren.[1] Wie dem auch sei, eines seiner Seiteneffekte ist es, Dateien zu erstellen. Die Syntax ist:
touch [Optionen] Datei [Datei ...] |
Dieses Kommando:
touch datei1 images/datei2 |
wird also eine Datei namens datei1 im aktuellen Verzeichnis und eine Datei namens datei2 im Verzeichnis images erstellen.
Das Kommando rm (ReMove engl. für ,,entfernen``) stellt das Unix-Pendant zu den DOS-Kommandos del und deltree dar. Es kann aber natürlich noch mehr :-). Syntax:
rm [Optionen] <Datei|Verzeichnis> [<Datei|Verzeichnis> ...] |
Optionen sind u.a.:
-r, oder -R: Rekursives Löschen. Diese option ist zwingend, wenn ein Verzeichnis gelöscht werden soll, sei es nun leer oder nicht. Leere Verzeichnisse können auch mit dem Befehl rmdir gelöscht werden.
-i: Interaktiver Modus. Das heißt vor jedem Löschen werden Sie gefragt, ob Sie die eintsprechende Datei wirklich löschen wollen.
-f: Das Gegenteil zu -i. Erzwingt das Löschen von Dateien oder Verzeichnissen, selbst wenn der Benutzer keine Schreibberechtigung für die Datei hat.[2]
![]() | Es ist sehr empfehlenswert, für die Kommandos rm, cp und mv ein interaktives alias zu erstellen. |
Einige Beispiele:
rm -i images/*.jpg datei1: Löscht alle Dateien mit der Endung .jpg im Verzeichnis images, sowie die Datei datei1 aus dem aktuellen Verzeichnis. Vor dem Löschen wird für jede Datei eine Bestätigung verlangt, die Sie mit j geben, oder mit n verweigern können.
rm -Rf images/misc/ datei*: Löscht ohne Rückfrage das gesamte Verzeichnis misc samt Unterverzeichnissen, sowie alle Dateien im aktuellen Verzeichnis, deren Name mit datei anfängt.
![]() | Eine Datei, die mit rm gelöscht wurde, ist unwiederbringlich verloren. Nun ja, es gibt unter Umständen Möglichkeiten zur Wiederherstellung, doch diese sind so kompliziert, dass Sie besser die Umständlichkeit der -i option in Kauf nehmen sollten... |
Die Syntax von mv (MoVe engl. für ,,bewegen``) ist wie folgt:
mv [Optionen] <Datei|Verzeichnis> [<Datei|Verzeichnis> ...] Ziel |
Einige Optionen:
-f: Erzwingt das Verschieben einer Datei. Keine Warnung beim Überschreiben einer anderen, gleichnamigen Datei im Zielverzeichnis.
-i: Das Gegenteil: fragt den Benutzer vor dem Überschreiben einer Datei.
-v: Ausführlicher Modus, berichtet alle Änderungen.
Einige Beispiele:
mv -i /tmp/pics/*.png .: Kopiert alle Dateien mit der Endung .png aus dem Verzeichnis /tmp/pics in das aktuelle Verzeichnis. Fragt vor Überschreiben.
mv bla blub: Benennt Datei bla zu blub um.
mv -vf file* images/ trash/: Verschiebt – ohne Nachfrage – alle mit file beginnenden Dateien aus dem aktuellen Verzeichnis sowie das Verzeichnis images/ in das Verzeichnis trash/, zeigt jede Operation an.
cp (CoPy, engl. für ,,kopieren``) entspricht der gesammelten Funktionalität der DOS-Befehle copy, xcopy und anderer. Seine Syntax sieht so aus:
cp [Optionen] <Datei|Verzeichnis> [<Datei|Verzeichnis> ...] Ziel |
Es hat eine ganze Reihe von Optionen. Dies sind die gebräuchlichsten:
-R: Rekursives Kopieren. Zwingend bei Verzeichnissen, auch wenn sie leer sind.
-i: Rückfrage vor Überschreiben.
-f :Das Gegenteil von -i. Überschreiben ohne Rückfrage.
-v: Ausführlicher Modus, listet alle Aktionen auf.
Einige Beispiele:
cp -i /tmp/images/* images/: Kopiert alle Dateien aus dem Verzeichnis /tmp/images in das Verzeichnis images/ im aktuellen Verzeichnis. Bevor existierende Dateien überschieben werden, müssen Sie bestätigen, dass das Ihre Absicht war.
cp -vR docs/ /shared/mp3s/* meinkram/: Kopiert das komplette Verzeichnis docs (und eventuell vorhandene Unterverzeichnisse) sowie alle Dateien aus dem Verzeichnis /shared/mp3s in das Verzeichnis meinkram im aktuellen Verzeichnis. Jeder Vorgang wird angezeigt.
cp bla blub: Legt im aktuellen Verzeichnis eine Kopie der Datei bla unter dem Namen blub an.
[1] | Es gibt drei verschiedene Zeitstempel in Unix: das Datum des letzten Zugriffs (atime), d.h. der letzte Lese-/Schreibzugriff; das Datum der letzten Änderung an den Inoden-Attributen (mtime) und schließlich das Datum der letzten Inhaltsänderung (ctime). |
[2] | Der Benutzer muss lediglich schreibberechtigt für das Verzeichnis sein, um daraus Dateien löschen zu können. |