Datenverwaltung auf der Shell

Aus LinuxUser 02/2007

Datenverwaltung auf der Shell

In bester Ordnung

Räumen Sie gründlich auf und sortieren Sie Ihre Daten neu: Mit den richtigen Befehlen schaffen Sie bei der Verwaltung von Dateien und Verzeichnissen rasch Ordnung.

Was grafische Dateimanager wie Konqueror und Nautilus mit Hilfe von Mausklicks und komfortablen Features wie Drag & Drop erledigen, erreichen Sie auf der Shell mit verschiedenen Kommandos. Dieser Artikel stellt die Befehle mkdir, rmdir, cd, touch, cp, mv sowie rm vor und zeigt, wie Sie Ihre Daten äußerst effizient auf der Konsole verwalten.

Verzeichnisse anlegen und löschen

Mit dem Befehl mkdir (“make directory”, erstelle Verzeichnis) legen Sie neue Ordner an. Das Kommando

mkdir ordner1

erstellt das Verzeichnis ordner1 im aktuellen Verzeichnis. Die Zugriffsrechte [1] des neuen Verzeichnisses regelt die Umask (sihe Kasten “Umask”). Soll es andere Rechte erhalten, verändern Sie diese über den Schalter -m. Geben Sie die Berechtigungen dazu über eine entsprechende Oktalzahl an (Listing 1).

Listing 1
$ mkdir ordner1
$ mkdir -m 777 ordner2
$ ls -l
drwxr-xr-x  2 huhn huhn 4096 2006-12-28 14:07 ordner1/
drwxrwxrwx  2 huhn huhn 4096 2006-12-28 14:08 ordner2/

Umask

Die Umask beeinflusst die Zugriffsrechte, mit denen das Filesystem neue Dateien und Verzeichnisse versieht. Geben Sie am Prompt einfach nur umask ein, um den aktuellen Wert dieser Variablen auszugeben. Sie sehen eine vierstellige Oktalzahl, die definiert, welche Rechte entzogen werden.

Steht hier beispielsweise 0022, bedeutet das für Textdateien, die standardmäßig im Modus 666 (Lese- und Schreibrecht für jeden) erzeugt werden, dass sie 644 (666 minus 022), also -rw-r--r-- erhalten. Bei Verzeichnissen lautet die Rechtevorgabe 777 (alle Rechte für jeden); sie erhalten daher bei einer Umask von 0022 die Rechte 755 (drwxr-xr-x).

Über das Kommando umask verändern Sie darüber hinaus die Maske selbst. Um die Einstellungen dauerhaft zu machen, schreiben Sie das Kommando in die Bash-Konfigurationsdatei .bashrc in Ihrem Home-Verzeichnis.

Das Kommando versteht auch relative und absolute Pfadangaben [2]. Um beispielsweise einen Ordner unterhalb des Verzeichnisses musik anzulegen, müssen Sie sich nicht dort aufhalten, sondern geben den Pfad gleich mit an:

mkdir musik/Metallica

Existiert das übergeordnete Verzeichnis nicht, dann beschwert sich mkdir:

mkdir: kann Verzeichnis "musik/Metallica" nicht anlegen: Datei oder Verzeichnis nicht gefunden

Setzen Sie in diesem Fall die Option -p ein, die auf Wunsch auch ganze Ordnerhierarchien anlegt. Anstatt die Befehlskette:

mkdir musik
mkdir musik/Metallica
mkdir musik/Metallica/Load

einzugeben, reicht zusammen mit diesem Parameter ein einziges Kommando:

mkdir -p musik/Metallica/Load

Der Befehl zum Löschen von Verzeichnissen heißt entsprechend rmdir (“remove directory”, entferne Verzeichnis). Bei noch nicht vllig geleerten Ordnern verweigert rmdir die Zusammenarbeit:

$ rmdir ordner1
rmdir: "ordner1/": Das Verzeichnis ist nicht leer

Räumen Sie in diesem Fall entweder den Ordner zuerst leer, oder greifen Sie direkt zum Befehl rm (siehe Abschnitt “Tabula Rasa”), der eine Option zum Erzwingen von Löscharbeiten mitbringt. Den Parameter -p kennt rmdir ebenfalls. Vorausgesetzt, dass alle Ordner leer sind, fegt das Kommando

rmdir -p musik/Metallica/Load

alle drei Verzeichnisse in einem Rutsch von der Platte.

Der richtige Touch

Das Kommando touch wird häufig dazu verwendet, neue leere Dateien anzulegen. Der Aufruf

touch poak

legt im aktuellen Verzeichnis eine leere Datei namens poak an, sofern diese noch nicht existiert. Auch dieser Befehl wertet die Umask aus, um die Zugriffsrechte automatisch zu setzen.

Existiert das File schon, ändert touch den Timestamp der Datei und setzt die Zugriffs- und die Änderungszeit der Datei auf die aktuelle Zeit. Das ergibt vor allem im Zusammenspiel mit make Sinn: Wie Sie aus der vorletzten Zu-Befehl-Folge [3] wissen, arbeitet dieses Kommando nur, wenn sich eine oder mehrere Quelldateien geändert haben. Um Make zur Mitarbeit zu “überreden”, auch wenn sich an den Sourcen nichts geändert hat, modifizieren Sie mit touch einfach den Timestamp der Quelldateien, etwa touch *.tex.

Geschickt navigiert

Mit dem Befehl cd (“change directory”, wechsle Verzeichnis) wandern Sie durch die Ordner hindurch. Geben Sie zum Ortswechsel entweder einen absoluten oder relativen Pfad an:

cd /var/log
cd ../../var/log

Das Kommando bringt einige praktische Abkürzungen mit: Geben Sie einfach nur cd ohne weitere Angaben ein, landen Sie in Ihrem Home-Verzeichnis. Wo das Zuhause des Benutzers ist, erfährt cd über die UmgebungsvariableHOME:

$ echo $HOME
/home/huhn

Weiterhin merkt sich die Bash über die Umgebungsvariable OLDPWD, in welchem Ordner Sie zuletzt waren. Über cd $OLDPWD gelangen Sie an diesen zurück. Mit dem erneuten Aufruf von cd $OLDPWD springen Sie wieder an den vorherigen Aufenthaltsort – die Shell merkt sich nur diese zwei Verzeichnisse, so dass Sie mit wiederholter Eingabe vor und zurück springen. Noch mehr Tipparbeit ersparen Sie sich, wenn Sie $OLDPWD durch das Minuszeichen ersetzen (Abbildung 1).

Abbildung 1: Mit     <code srcset=

cd – springen Sie an den letzten Aufenthaltsort und wieder zurück.” width=”300″ height=”126″ /> Abbildung 1: Mit cd - springen Sie an den letzten Aufenthaltsort und wieder zurück.

Dateien und Verzeichnisse kopieren

Das Programm cp (“copy”, kopieren) dupliziert Dateien. Geben Sie dazu eine Quelle und ein Ziel an:

cp datei1 datei2

Die dabei entstehende Kopie erhält standardmäßig einen aktuellen Zeitstempel und gehört dem kopierenden Benutzer; die Zugriffsrechte regelt auch hier Umask. Sollen hingegen möglichst viele Eigenschaften der Originaldatei übernommen werden, setzen Sie die Option -p ein, um Berechtigungen und Timestamp der Quelle zu erhalten.

Sie können als Ziel auch ein Verzeichnis benennen. Während sich problemlos mehrere Dateien in ein Verzeichnis kopieren lassen, weigert sich das Programm, Verzeichnisse selbst zu duplizieren:

$ cp ordner1 ordner2
cp: Verzeichnis "ordner1" ausgelassen

Damit das klappt, weisen Sie cp über den Schalter -r an, rekursiv zu arbeiten. Der Kopierkünstler kann aber noch mehr: Weisen Sie den Befehl an, statt einer “normalen” Datei einen Symlink zu duplizieren, kopiert cp diejenige Datei, auf die der Link zeigt. Um stattdessen einen neuen Link zu erzeugen, setzen Sie die Option -d ein.

Vorsicht ist geboten, wenn Sie als Ziel eine gleichnamige Datei angegeben: cp überschreibt diese einfach. Eine Sicherheitsabfrage bauen Sie über die Option -i ein:

$ cp -i datei1 ordner/datei1
cp: "ordner/datei1" überschreiben?

Alternativ bringen Sie cp dazu, mit -b ein Backup anzulegen:

cp -b datei1 ordner/datei1

Die Sicherungskopie trägt eine Tilde (“~”) an den Dateinamen angehängt.

Let’s move!

Das Programm mv (“move”, bewegen) verschiebt Dateien oder gibt ihnen einen neuen Namen. Auch diesem Kommando geben Sie eine Quelle und ein Ziel mit auf den Weg. Als Quelle bennen Sie eine Datei oder ein Verzeichnis und als Ziel entweder ein Verzeichnis oder einen Datei- bzw. Verzeichnisnamen. Um eine vorhandene Datei datei1 aus dem aktuellen Verzeichnis beispielsweise in den vorhandenen Ordner verzeichnis1 zu verschieben, tippen Sie:

mv datei1 verzeichnis1

Existiert der Zielordner nicht, erhält die Datei hingegen einen neuen Namen und heißt nun verzeichnis1 – zum Umbenennen geben Sie also einfach einen neuen Bezeichner an.

Ebenso wie cp bringt mv die beiden Optionen -i und -b mit, die Ihre Daten entweder durch eine Sicherheitsabfrage oder Backups vor dem unbeabsichtigten Löschen bei unvorsichtigen Aufräumarbeiten bewahren.

Tabula Rasa

Überlicherweise führt der Befehl rm datei ohne Umschweife zum Löschen der angegebenen Datei: rm (“remove”, löschen) fackelt nicht lange und entfernt Dinge, ohne nachzufragen. Einzige Ausnahme: Wenn es sich um eine als “read only” gekennzeichnete Datei handelt, holt rm eine Bestätigung ein (siehe Listing 2).

Listing 2
$ ls -l
-r--r--r--  1 huhn huhn    0 2006-12-28 16:44 datei
…
$ rm datei
rm: reguläre Datei (schreibgeschützt) "datei" entfernen?

Als Vorsichtsmaßnahme ist dieses allerdings nicht empfehlenswert; setzen Sie dazu besser die Option -i ein, die das Kommando (ebenso wie cp und mv) in den interaktiven Modus versetzt:

$ rm -i datei
rm: reguläre Datei "datei" entfernen?

Liegen viele schreibgeschützte Dateien in einem Ordner und haben Sie keine Lust, den Löschvorgang für jedes File einzeln zu bestätigen, teilen Sie rm das über den Schalter -f (“force”, erzwingen) mit.

Noch gründlicher laufen die Löscharbeiten, wenn Sie die Option -r einsetzen: rm entfernt nun auch Unterverzeichnisse samt Inhalt, rekursiv bis in den letzten Winkel. Was rmdir also ins Straucheln bringt, wenn der oder die Ordner nicht leer sind, schafft ein einfaches rm -r aus der Welt. Wer sich dafür interessiert, was dabei hinter den Kulissen abläuft und an welcher Stelle rm gerade fegt, setzt zusätzlich den Parameter -v ein (Abbildung 2).

Abbildung 2: Tabula Rasa bis in den letzten Winkel –     <code srcset=

rm -r räumt auf.” width=”300″ height=”185″ /> Abbildung 2: Tabula Rasa bis in den letzten Winkel – rm -r räumt auf.

Dateien, die mit einem Sonderzeichen beginnen, wie etwa dem Minus, bereiten Probleme: rm verweigert (genau wie andere Kommandos) die Zusammenarbeit. Das liegt daran, dass die Shell das erste Zeichen nach dem Minus als Parameter interpretiert und daher nicht ans Ziel kommt. Mit einem kleinen Trick entfernen Sie solche Problemfälle: Geben Sie rm ./-datei ein, um -datei zu löschen und nicht als Befehlsoptionen zu interpretieren. Alternativ schreiben Sie zwei Bindestriche vor die Datei (rm -- -datei) und sorgen so dafür, dass alles nach diesen zwei Bindestrichen nicht mehr als Parameter, sondern als Argument (also Gegenstand der Operation) aufgefasst wird.

Glossar

Timestamp

Unix-Dateisysteme verwalten für eine Datei verschiedene Datumseinträge, wie beispielsweise die Zeit des letzten Zugriffs oder der letzten Änderung. Gerade für Backups oder Sicherungskopien ist es wichtig, den Zeitstempel der Originalzeit (etwa den der letzten Modifikation) zu behalten, bevor man vielleicht ein falsches File weiter bearbeitet.

Umgebungsvariable

Die Shell stellt dem Benutzer einen Speicher bereit, um bestimmte Informationen aufzubewahren und Programmen zugänglich zu machen. Diese Umgebungsvariablen (“environment variables”) bestehen jeweils aus dem Namen und dem zugeordneten Wert.

Symlink

(Symbolischer Link) Ein Verweis auf eine andere Datei, der von Anwendungsprogrammen wie eben diese Datei behandelt wird. Löscht man die Datei, auf die ein Symlink verweist, zeigt der Link ins Leere. Symlinks sind das Ergebnis des Kommandos ln -s.

Infos

[1] Zugriffsrechte: Heike Jurzik, “Gleiches Recht für alle?”, LinuxUser 07/2004, S. 69, http://www.linux-user.de/ausgabe/2004/07/069-zubefehl/

[2] Pfade und Navigation im Dateisystem: Heike Jurzik, “Auf dem rechten Pfad”, LinuxUser 08/2003, S. 80, http://www.linux-user.de/ausgabe/2003/08/080-zubefehl/

[3] Make: Heike Jurzik, “Gekonnt delegiert”, LinuxUser 12/2006, S. 93, http://www.linux-user.de/ausgabe/2006/12/093-zubefehl-make/

LinuxUser 02/2007 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben