Dateien und Verzeichnisse in Linux verwalten

CompTIABeginner
Jetzt üben

Einführung

In diesem Lab erlernen Sie die grundlegenden Fertigkeiten zur Verwaltung von Dateien und Verzeichnissen in einer Linux-Kommandozeilenumgebung. Sie sammeln praktische Erfahrungen beim Erstellen und Löschen komplexer Verzeichnisstrukturen mit mkdir und rm sowie beim Kopieren und Verschieben von Dateien und Verzeichnissen mit cp und mv.

Darüber hinaus bietet dieses Lab eine detaillierte Untersuchung von Dateiverknüpfungen (Links). Sie werden sowohl symbolische (Softlinks) als auch harte Links mit dem Befehl ln erstellen, das zugrunde liegende Konzept der Inodes analysieren und beobachten, wie sich die verschiedenen Link-Typen verhalten, wenn die Quelldatei geändert wird. Dies vermittelt Ihnen ein tieferes Verständnis dafür, wie das Linux-Dateisystem Daten organisiert und referenziert.

Verzeichnisstrukturen erstellen und löschen mit mkdir, rmdir und rm

In diesem Schritt lernen Sie, wie Sie Verzeichnisse erstellen und entfernen. Das Organisieren von Dateien in einer hierarchischen Struktur aus Verzeichnissen ist eine grundlegende Aufgabe unter Linux. Wir verwenden den Befehl mkdir zum Erstellen von Verzeichnissen, rmdir zum Löschen leerer Verzeichnisse und rm zum Entfernen von Verzeichnissen samt deren gesamtem Inhalt. Alle Befehle werden in Ihrem Standardverzeichnis ~/project ausgeführt.

Zuerst erstellen wir ein einfaches Verzeichnis. Der Befehl mkdir steht für „make directory“ (Verzeichnis erstellen).

Führen Sie in Ihrem Terminal den folgenden Befehl aus, um ein Verzeichnis namens cars zu erstellen:

mkdir cars

Um zu überprüfen, ob das Verzeichnis erstellt wurde, können Sie den Befehl ls -ld verwenden. Die Option -l liefert ein langes Listenformat, und die Option -d listet den Verzeichniseintrag selbst auf, nicht dessen Inhalt.

ls -ld cars

Sie sollten eine Ausgabe ähnlich der folgenden sehen, die die Erstellung des Verzeichnisses cars bestätigt. Das d am Anfang der Berechtigungszeichenfolge zeigt an, dass es sich um ein Verzeichnis (Directory) handelt.

drwxr-xr-x 2 labex labex 4096 May 20 10:30 cars

Nun löschen wir dieses Verzeichnis wieder. Der Befehl rmdir wird verwendet, um leere Verzeichnisse zu entfernen.

rmdir cars

Überprüfen Sie die Löschung, indem Sie den Befehl ls -ld erneut ausführen.

ls -ld cars

Diesmal erhalten Sie eine Fehlermeldung, da das Verzeichnis nicht mehr existiert. Dies bestätigt, dass rmdir erfolgreich war.

ls: cannot access 'cars': No such file or directory

Der Befehl rmdir funktioniert nur bei leeren Verzeichnissen. Was aber, wenn wir eine Struktur aus verschachtelten Verzeichnissen haben? Versuchen wir, die Verzeichnisstruktur pastry/pies/cakes zu erstellen. Um übergeordnete Verzeichnisse bei Bedarf automatisch mitzuerstellen, müssen wir die Option -p (parents) mit mkdir verwenden.

Führen Sie den folgenden Befehl aus:

mkdir -p pastry/pies/cakes

Um die gesamte soeben erstellte Verzeichnisstruktur anzuzeigen, verwenden Sie den Befehl ls mit den Optionen -l (langes Format) und -R (rekursiv).

ls -lR pastry

Die Ausgabe zeigt das Verzeichnis pastry und seine Unterverzeichnisse pies und cakes.

pastry:
total 4
drwxr-xr-x 3 labex labex 4096 May 20 10:35 pies

pastry/pies:
total 4
drwxr-xr-x 2 labex labex 4096 May 20 10:35 cakes

pastry/pies/cakes:
total 0

Versuchen wir nun, das Verzeichnis pastry mit rmdir zu löschen.

rmdir pastry

Warum ist dieser Befehl fehlgeschlagen? Das Terminal zeigt eine Fehlermeldung an:

rmdir: failed to remove 'pastry': Directory not empty

Dies liegt daran, dass rmdir nur leere Verzeichnisse löschen kann und pastry das Unterverzeichnis pies enthält.

Um ein Verzeichnis und seinen gesamten Inhalt (einschließlich Unterverzeichnisse und Dateien) zu löschen, müssen Sie den Befehl rm mit der Option -r (rekursiv) verwenden. Seien Sie mit diesem Befehl sehr vorsichtig, da er Daten dauerhaft löschen kann.

rm -r pastry

Dieser Befehl erzeugt bei Erfolg keine Ausgabe. Sie können überprüfen, ob das Verzeichnis pastry vollständig entfernt wurde, indem Sie erneut ls -ld pastry ausführen, was zu einem Fehler „No such file or directory“ führen sollte.

ls -ld pastry

In diesem Schritt erstellen Sie eine Datei mit dem Texteditor vi und legen anschließend einen symbolischen Link darauf an. Ein symbolischer Link, auch Symlink oder Softlink genannt, ist ein spezieller Dateityp, der auf eine andere Datei oder ein anderes Verzeichnis verweist. Er ähnelt einer Verknüpfung in anderen Betriebssystemen.

Zuerst erstellen wir eine einfache Textdatei namens filea mit vi. vi ist ein leistungsstarker, bildschirmorientierter Texteditor. Er hat zwei Hauptmodi: den Befehlsmodus (Command mode) und den Einfügemodus (Insert mode). Sie starten im Befehlsmodus, in dem Tastendrücke als Befehle interpretiert werden. Um Text einzugeben, müssen Sie in den Einfügemodus wechseln.

  1. Starten Sie in Ihrem Terminal (das sich im Pfad ~/project befinden sollte) vi, um die Datei filea zu erstellen:
vi filea
  1. Ihr Terminal zeigt nun die Benutzeroberfläche des vi-Editors an. Um mit dem Tippen zu beginnen, müssen Sie in den Einfügemodus wechseln. Drücken Sie dazu einmal die Taste i. Möglicherweise sehen Sie am unteren Bildschirmrand -- INSERT --.
  2. Geben Sie nun den folgenden Text ein:
This is filea.
  1. Um die Datei zu speichern und vi zu verlassen, müssen Sie zuerst durch Drücken der Esc-Taste in den Befehlsmodus zurückkehren. Geben Sie dann ZZ ein (halten Sie die Umschalttaste gedrückt und drücken Sie zweimal Z). Dieser Befehl speichert die Datei und schließt den Editor.

Nun, da Sie zurück an der Eingabeaufforderung sind, lassen Sie uns überprüfen, ob die Datei erstellt wurde und den richtigen Inhalt hat.

Listen Sie zuerst die Datei auf:

ls filea

Die Ausgabe sollte einfach der Dateiname sein:

filea

Geben Sie als Nächstes den Inhalt mit dem Befehl cat aus:

cat filea

Die Ausgabe sollte dem von Ihnen eingegebenen Text entsprechen:

This is filea.

Erstellen wir nun einen symbolischen Link. Wir erstellen einen Link namens fileb, der auf unsere Originaldatei filea verweist. Der Befehl lautet ln -s <Quelldatei> <Ziel_Link>.

ln -s filea fileb

Um das Ergebnis zu prüfen, verwenden wir den Befehl ls -il. Die Option -i zeigt die Inode-Nummer an, eine eindeutige Kennung für eine Datei oder ein Verzeichnis im Dateisystem.

ls -il file[ab]

Untersuchen Sie die Ausgabe sorgfältig.

131075 -rw-r--r-- 1 labex labex 14 May 20 10:40 filea
131076 lrwxrwxrwx 1 labex labex  5 May 20 10:41 fileb -> filea

Beachten Sie einige wichtige Punkte:

  • Dateityp: Die Berechtigungszeichenfolge für filea beginnt mit einem -, was auf eine reguläre Datei hinweist. Die Zeichenfolge für fileb beginnt mit einem l, was einen symbolischen Link (Link) anzeigt.
  • Link-Zeiger: Die Ausgabe zeigt deutlich fileb -> filea.
  • Inode-Nummern: Schauen Sie in die erste Spalte. Die Inode-Nummern für filea und fileb sind unterschiedlich. Warum? Weil ein symbolischer Link eine separate Datei ist, die lediglich den Pfad zur Zieldatei speichert. Er ist nicht die Datei selbst und erhält daher eine eigene, eindeutige Inode.

Lassen Sie uns abschließend prüfen, ob wir den Inhalt über den Link lesen können.

cat fileb

Die Ausgabe ist der Inhalt von filea:

This is filea.

Dies ist das erwartete Verhalten. Wenn Sie eine Operation wie cat auf einen symbolischen Link anwenden, folgt das System automatisch dem Link zur Quelldatei und führt die Operation dort aus.

In diesem Schritt erstellen Sie einen harten Link (Hardlink) und lernen, wie er sich von dem zuvor erstellten symbolischen Link unterscheidet. Im Gegensatz zu einem symbolischen Link, der ein Zeiger auf einen Dateinamen ist, ist ein harter Link ein weiterer Name für die Datei selbst. Beide Namen verweisen direkt auf dieselben Daten auf der Festplatte, die durch eine eindeutige Nummer namens Inode identifiziert werden.

Wir arbeiten weiter mit den Dateien filea und fileb aus dem vorherigen Schritt im Verzeichnis ~/project.

Zuerst erstellen wir einen harten Link namens filec, der auf dieselbe Inode wie filea verweist. Dazu verwenden wir den Befehl ln ohne die Option -s.

ln filea filec

Lassen Sie uns nun den Inhalt aller drei Dateien anzeigen: das Original filea, den symbolischen Link fileb und den neuen harten Link filec.

cat filea
cat fileb
cat filec

Sie werden sehen, dass derselbe Inhalt dreimal ausgegeben wird, was zu erwarten ist.

This is filea.
This is filea.
This is filea.

Der eigentliche Unterschied wird deutlich, wenn wir die Dateieigenschaften inspizieren. Verwenden Sie erneut den Befehl ls -il, um die Inode-Nummern und andere Details für alle drei Dateien anzuzeigen.

ls -il file[a-c]

Die Ausgabe wird in etwa so aussehen. Achten Sie besonders auf die erste und zweite Spalte.

131075 -rw-r--r-- 2 labex labex 14 May 20 10:40 filea
131076 lrwxrwxrwx 1 labex labex  5 May 20 10:41 fileb -> filea
131075 -rw-r--r-- 2 labex labex 14 May 20 10:40 filec

Analysieren wir diese Ausgabe:

  • Inode-Nummern (Spalte 1): Beachten Sie, dass filea und filec die exakt gleiche Inode-Nummer haben (z. B. 131075). Dies ist das definierende Merkmal eines harten Links. Es handelt sich nicht um separate Dateien, sondern um zwei verschiedene Namen, die auf die identischen Dateidaten auf der Festplatte verweisen. Der symbolische Link fileb hat seine eigene, eindeutige Inode.
  • Link-Zähler (Spalte 2): Betrachten Sie die Zahl bei filea und filec. Sie steht nun auf 2. Diese Zahl ist der Hardlink-Zähler (Link Count). Er hält fest, wie viele Namen (harte Links) auf diese eine Inode verweisen. Als Sie filec erstellten, erhöhte sich der Link-Zähler für diese Inode von 1 auf 2.
  • Dateityp (Spalte 1 der Berechtigungen): Beachten Sie, dass filec als reguläre Datei aufgeführt ist (die Berechtigungen beginnen mit -), genau wie filea. Es ist kein spezieller Link-Typ wie fileb (der mit l beginnt).

In diesem Schritt beobachten Sie die entscheidenden Verhaltensunterschiede zwischen symbolischen und harten Links, wenn die ursprüngliche Quelldatei entfernt und anschließend neu erstellt wird. Dies wird Ihr Verständnis für die Funktionsweise der jeweiligen Link-Typen festigen. Wir verwenden weiterhin filea, fileb und filec im Verzeichnis ~/project.

Zuerst löschen wir die Originaldatei filea.

rm filea

Untersuchen wir nun den Status unserer drei Dateien mit dem Befehl ls -l. Sie werden wahrscheinlich eine Fehlermeldung für filea sehen, da sie nicht mehr existiert, was zu erwarten ist.

ls -l file[a-c]

Die Ausgabe ist sehr aufschlussreich:

ls: cannot access 'filea': No such file or directory
lrwxrwxrwx 1 labex labex 5 May 20 10:41 fileb -> filea
-rw-r--r-- 1 labex labex 14 May 20 10:40 filec
  • Symbolischer Link fileb: Der Link ist nun „gebrochen“ (broken link). Er verweist zwar immer noch auf den Namen filea, aber dieser Name korrespondiert nicht mehr mit einer existierenden Datei. In vielen Terminals wird der Dateiname fileb rot markiert, um diesen fehlerhaften Zustand anzuzeigen. Wenn Sie versuchen, cat fileb auszuführen, erhalten Sie eine Fehlermeldung.
  • Harter Link filec: Die Datei filec ist völlig unbeeinflusst. Ihr Link-Zähler (die zweite Spalte) hat sich lediglich von 2 auf 1 verringert, aber die Datei und ihre Daten sind noch intakt. Das liegt daran, dass das Löschen von filea nur einen der Namen entfernt hat, die auf die Inode verweisen; die Daten werden erst gelöscht, wenn der Link-Zähler auf Null sinkt. Sie können dies beweisen, indem Sie den Inhalt anzeigen:
cat filec

Die Ausgabe ist immer noch der ursprüngliche Inhalt:

This is filea.

Lassen Sie uns nun filea neu erstellen, aber mit einem anderen Inhalt. Verwenden Sie vi, um eine neue Datei namens filea zu erstellen.

  1. Starten Sie vi: vi filea
  2. Drücken Sie i, um in den Einfügemodus zu gelangen.
  3. Geben Sie den neuen Inhalt ein: This is the new filea.
  4. Drücken Sie Esc, um in den Befehlsmodus zurückzukehren, und geben Sie dann ZZ zum Speichern und Beenden ein.

Nachdem die neue Datei filea erstellt wurde, inspizieren wir alle drei Dateien erneut mit ls -il.

ls -il file[a-c]

Die Ausgabe zeigt eine neue Situation:

131080 -rw-r--r-- 1 labex labex 20 May 20 11:05 filea
131076 lrwxrwxrwx 1 labex labex  5 May 20 10:41 fileb -> filea
131075 -rw-r--r-- 1 labex labex 14 May 20 10:40 filec
  • Neue filea: Eine neue Datei filea existiert, aber beachten Sie, dass ihre Inode-Nummer (z. B. 131080) anders ist als die Inode von filec (z. B. 131075). Dies ist eine komplett neue Datei, die zufällig denselben Namen wie die alte hat.
  • Symbolischer Link fileb: Der Link ist nicht mehr gebrochen! Er verweist automatisch auf die neue Datei namens filea.
  • Harter Link filec: filec ist unverändert. Er verweist immer noch auf die ursprüngliche Inode und enthält die ursprünglichen Daten.

Prüfen wir abschließend die Inhalte aller drei Dateien, um das Ergebnis zu sehen.

cat filea
cat fileb
cat filec

Die Ausgabe demonstriert deutlich den Unterschied:

This is the new filea.
This is the new filea.
This is filea.

Der symbolische Link fileb folgte dem Namen zur neuen Datei, während der harte Link filec seine Verbindung zu den ursprünglichen Daten beibehielt.

Dateien kopieren und verschieben mit cp und mv

In diesem letzten Schritt lernen Sie die Befehle cp (copy) und mv (move) kennen, die für die Verwaltung von Dateien unerlässlich sind. Der Befehl cp erstellt ein Duplikat einer Datei oder eines Verzeichnisses, während der Befehl mv eine Datei oder ein Verzeichnis entweder umbenennt oder an einen anderen Ort verschiebt.

Beginnen wir damit, die Dateien aus den vorherigen Schritten aufzuräumen, um einen sauberen Arbeitsbereich zu haben. Alle Befehle werden in Ihrem Verzeichnis ~/project ausgeführt.

rm filea fileb filec

Dateien kopieren mit cp

Der Befehl cp erstellt eine neue, unabhängige Kopie einer Datei. Die neue Datei erhält eine eigene Inode.

  1. Erstellen Sie zunächst eine einfache Datei mit dem Befehl touch. touch erstellt eine leere Datei, falls diese noch nicht existiert.
touch source_file
  1. Lassen Sie uns nun deren Eigenschaften anzeigen und dabei auf die Inode-Nummer (erste Spalte) achten.
ls -i source_file

Die Ausgabe zeigt eine eindeutige Inode-Nummer für diese Datei.

131081 source_file
  1. Kopieren Sie nun source_file in eine neue Datei namens copied_file.
cp source_file copied_file
  1. Listen Sie nun die Eigenschaften beider Dateien auf.
ls -i source_file copied_file

Sie werden sehen, dass es sich um zwei separate Dateien mit unterschiedlichen Inode-Nummern handelt.

131082 copied_file
131081 source_file

Dateien verschieben und umbenennen mit mv

Der Befehl mv ist vielseitig. Wenn das Ziel ein neuer Dateiname im selben Verzeichnis ist, wird die Datei umbenannt. Wenn das Ziel ein Verzeichnis ist, wird die Datei dorthin verschoben. Beim Umbenennen oder Verschieben einer Datei innerhalb desselben Dateisystems ändert sich die Inode-Nummer nicht; der Befehl aktualisiert lediglich den Namen der Datei oder den Positionszeiger.

  1. Benennen wir source_file in renamed_file um.
mv source_file renamed_file
  1. Überprüfen Sie die Inode der neu benannten Datei.
ls -i renamed_file

Sie werden feststellen, dass die Inode-Nummer (z. B. 131081) dieselbe ist wie bei der ursprünglichen source_file. Die Datei selbst wurde nicht verändert, nur ihr Name.

131081 renamed_file
  1. Verschieben wir nun diese Datei. Erstellen Sie dazu zuerst ein Zielverzeichnis.
mkdir move_destination
  1. Verschieben Sie renamed_file in das Verzeichnis move_destination.
mv renamed_file move_destination/
  1. Überprüfen Sie, ob sich die Datei nun im Verzeichnis befindet, und kontrollieren Sie erneut ihre Inode.
ls -i move_destination/renamed_file

Die Inode-Nummer bleibt gleich, was bestätigt, dass die Datei verschoben und nicht kopiert wurde.

131081 move_destination/renamed_file

Umgang mit Überschreibungen

Standardmäßig ist auf vielen Systemen cp als Alias für cp -i eingerichtet, um zu verhindern, dass Sie versehentlich eine vorhandene Datei überschreiben. Das -i steht für „interactive“ (interaktiv).

  1. Versuchen wir, copied_file über die Datei in unserem Verzeichnis move_destination zu kopieren.
cp -i copied_file move_destination/renamed_file
  1. Aufgrund des -i-Alias werden Sie um Bestätigung gebeten.
cp: overwrite 'move_destination/renamed_file'?

Tippen Sie y und drücken Sie die Eingabetaste, um das Überschreiben zu bestätigen. Wenn Sie abbrechen möchten, würden Sie n tippen.

Zusammenfassung

In diesem Lab haben Sie die grundlegenden Befehle zur Verwaltung von Dateien und Verzeichnissen in einer Linux-Umgebung kennengelernt. Sie haben geübt, Verzeichnisstrukturen mit mkdir zu erstellen (einschließlich der Option -p für übergeordnete Verzeichnisse) und diese mit rmdir (für leere Verzeichnisse) bzw. rm (für nicht leere Verzeichnisse) wieder zu entfernen. Außerdem haben Sie Dateien mit dem Editor vi erstellt und wurden in das Konzept der Dateiverknüpfungen eingeführt.

Der Kern des Labs lag auf dem Erstellen und Analysieren der zwei Link-Typen: symbolische Links (Softlinks) mit ln -s und harte Links mit ln. Sie haben deren wesentliche Unterschiede beobachtet, indem Sie Inodes untersucht und festgestellt haben, wie sich jeder Link verhält, wenn die Quelldatei geändert oder gelöscht wird. Schließlich haben Sie den Befehl cp verwendet, um unabhängige Kopien von Dateien zu erstellen, und den Befehl mv, um Dateien und Verzeichnisse zu verschieben oder umzubenennen, womit Sie einen umfassenden Überblick über die wichtigsten Operationen der Dateiverwaltung erhalten haben.