Dateien und Verzeichnisse unter Linux verwalten

CompTIACompTIABeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einleitung

In diesem Labor lernen Sie die grundlegenden Fähigkeiten zur Verwaltung von Dateien und Verzeichnissen in einer Linux-Kommandozeilenumgebung. Sie werden praktische Erfahrungen mit dem Erstellen und Entfernen komplexer Verzeichnisstrukturen mit mkdir und rm sowie dem Kopieren und Verschieben von Dateien und Verzeichnissen mit cp und mv sammeln.

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

Verzeichnisstrukturen mit mkdir, rmdir und rm erstellen und entfernen

In diesem Schritt lernen Sie, wie Sie Verzeichnisse erstellen und entfernen. Das Organisieren von Dateien in einer hierarchischen Verzeichnisstruktur ist eine grundlegende Aufgabe unter Linux. Wir verwenden den Befehl mkdir zum Erstellen von Verzeichnissen, rmdir zum Entfernen leerer Verzeichnisse und rm zum Entfernen von Verzeichnissen und all deren Inhalten. Alle Befehle werden von Ihrem Standardverzeichnis, ~/project, aus 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 bietet eine lange Listenansicht, und die Option -d listet den Verzeichniseintrag selbst auf, nicht dessen Inhalt.

ls -ld cars

Sie sollten eine Ausgabe ähnlich dieser sehen, die die Erstellung des cars-Verzeichnisses bestätigt. Das d am Anfang der Berechtigungszeichenkette zeigt an, dass es sich um ein Verzeichnis handelt.

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

Nun entfernen wir dieses Verzeichnis. Der Befehl rmdir wird zum Entfernen leerer Verzeichnisse verwendet.

rmdir cars

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

ls -ld cars

Dieses Mal 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 mit leeren Verzeichnissen. Was ist, wenn wir eine verschachtelte Verzeichnisstruktur haben? Versuchen wir, eine Verzeichnisstruktur pastry/pies/cakes zu erstellen. Um übergeordnete Verzeichnisse bei Bedarf zu erstellen, 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 Verzeichnisstruktur, die Sie gerade erstellt haben, 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 entfernen.

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 all seine Inhalte (einschließlich Unterverzeichnisse und Dateien) zu entfernen, 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 ls -ld pastry erneut ausführen, was zu einer Fehlermeldung "No such file or directory" führen sollte.

ls -ld pastry

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

Zuerst erstellen wir eine einfache Textdatei namens filea mit vi. vi ist ein leistungsfähiger, bildschirmorientierter Texteditor. Er hat zwei Hauptmodi: Befehlsmodus (Command mode) und 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 der Eingabe zu beginnen, müssen Sie in den Einfügemodus wechseln. Drücken Sie 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 beenden, müssen Sie zuerst durch Drücken der Taste Esc 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 beendet den Editor.

Nachdem Sie nun wieder an der Eingabeaufforderung sind, überprüfen wir, ob die Datei erstellt wurde und den korrekten Inhalt enthält.

Listen Sie zuerst die Datei auf:

ls filea

Die Ausgabe sollte einfach der Dateiname sein:

filea

Zeigen Sie als Nächstes den Inhalt mit dem Befehl cat an:

cat filea

Die Ausgabe sollte mit dem von Ihnen eingegebenen Text übereinstimmen:

This is filea.

Nun erstellen wir 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 die Ergebnisse zu testen, verwenden Sie 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 Berechtigungszeichenkette für filea beginnt mit einem -, was auf eine reguläre Datei hinweist. Die Zeichenkette für fileb beginnt mit einem l, was auf einen symbolischen Link hinweist.
  • 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 einfach den Pfad zur Zieldatei speichert. Es ist nicht die Datei selbst, daher erhält sie ihre eigene eindeutige Inode.

Schließlich sehen wir, 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 einem symbolischen Link ausführen, folgt das System automatisch dem Link zur Quelldatei und führt die Operation darauf aus.

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

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

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

ln filea filec

Nun zeigen wir den Inhalt aller drei Dateien an: die Originaldatei filea, den symbolischen Link fileb und den neuen Hard Link filec.

cat filea
cat fileb
cat filec

Sie sehen denselben Inhalt dreimal ausgegeben, was erwartet wird.

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

Der eigentliche Unterschied wird deutlich, wenn wir die Dateieigenschaften untersuchen. 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 genau 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 Hard Links. Es handelt sich nicht um separate Dateien; es sind zwei verschiedene Namen, die auf dieselben identischen Dateidaten auf der Festplatte verweisen. Der symbolische Link fileb hat seine eigene eindeutige Inode.
  • Link-Zähler (Spalte 2): Schauen Sie sich die Zahl für filea und filec an. Sie ist jetzt 2. Diese Zahl ist der Hard-Link-Zähler und verfolgt, wie viele Namen (Hard Links) auf diesen einzelnen Inode verweisen. Als Sie filec erstellten, erhöhte sich der Link-Zähler für diesen Inode von 1 auf 2.
  • Dateityp (Spalte 1 der Berechtigungen): Beachten Sie, dass filec als reguläre Datei aufgeführt ist (seine Berechtigungen beginnen mit -), genau wie filea. Es ist kein spezieller Linktyp wie fileb (das mit l beginnt).

In diesem Schritt beobachten Sie die entscheidenden Verhaltensunterschiede zwischen symbolischen Links und Hard Links, wenn die ursprüngliche Quelldatei entfernt und dann neu erstellt wird. Dies wird Ihr Verständnis dafür festigen, wie jede Art von Link funktioniert. Wir werden weiterhin filea, fileb und filec im Verzeichnis ~/project verwenden.

Zuerst entfernen wir die Originaldatei filea.

rm filea

Nun untersuchen wir den Status unserer drei Dateien. Verwenden Sie den Befehl ls -l. Sie werden wahrscheinlich eine Fehlermeldung für filea sehen, da sie nicht mehr existiert, was erwartet wird.

ls -l file[a-c]

Die Ausgabe wird sehr aufschlussreich sein:

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". Er verweist immer noch auf den Namen filea, aber dieser Name entspricht keiner existierenden Datei mehr. In vielen Terminals wird der Dateiname fileb rot gefärbt, um diesen gebrochenen Zustand anzuzeigen. Wenn Sie versuchen, cat fileb auszuführen, erhalten Sie eine Fehlermeldung.
  • Hard Link filec: Die Datei filec ist völlig unberührt. Ihr Link-Zähler (die zweite Spalte) ist einfach von 2 auf 1 gesunken, aber die Datei und ihre Daten sind immer noch intakt. Das liegt daran, dass das Entfernen von filea nur einen der Namen entfernt hat, die auf den Inode verweisen; die Daten werden erst gelöscht, wenn der Link-Zähler auf Null fällt. Sie können dies beweisen, indem Sie seinen Inhalt anzeigen:
cat filec

Die Ausgabe ist immer noch der ursprüngliche Inhalt:

This is filea.

Nun erstellen wir filea neu, aber mit anderem 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 ein, um zu speichern und zu beenden.

Mit der neuen filea an Ort und Stelle 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 völlig 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.
  • Hard Link filec: filec ist unverändert. Er verweist weiterhin auf den ursprünglichen Inode und enthält die ursprünglichen Daten.

Schließlich überprüfen wir den Inhalt aller drei Dateien, um das Ergebnis zu sehen.

cat filea
cat fileb
cat filec

Die Ausgabe zeigt 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 Hard 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 Dateiverwaltung unerlässlich sind. Der Befehl cp erstellt eine Duplikat einer Datei oder eines Verzeichnisses, während der Befehl mv eine Datei/ein Verzeichnis umbenennt oder an einen anderen Ort verschiebt.

Beginnen wir damit, die Dateien aus den vorherigen Schritten zu bereinigen, um einen frischen Arbeitsbereich zu haben. Alle Befehle werden von Ihrem Verzeichnis ~/project aus 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 ihren eigenen Inode.

  1. Erstellen Sie zuerst eine einfache Datei, mit der Sie arbeiten können, mit dem Befehl touch. touch erstellt eine leere Datei, wenn sie nicht existiert.
touch source_file
  1. Betrachten wir nun ihre Eigenschaften und achten dabei auf die Inode-Nummer (die erste Spalte).
ls -i source_file

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

131081 source_file
  1. Kopieren Sie als Nächstes 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, benennt er die Datei um. Wenn das Ziel ein Verzeichnis ist, verschiebt er die Datei dorthin. Beim Umbenennen oder Verschieben einer Datei innerhalb desselben Dateisystems ändert sich die Inode-Nummer nicht; der Befehl aktualisiert lediglich den Namen oder den Zeiger auf den Speicherort der Datei.

  1. Benennen wir source_file in renamed_file um.
mv source_file renamed_file
  1. Überprüfen Sie den 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 geändert, nur ihr Name.

131081 renamed_file
  1. Verschieben wir nun diese Datei. Erstellen Sie 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 überprüfen Sie erneut ihren 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 aliasen viele Systeme cp zu cp -i, um zu verhindern, dass Sie versehentlich eine vorhandene Datei überschreiben. -i steht für "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 zur Bestätigung aufgefordert.
cp: overwrite 'move_destination/renamed_file'?

Geben Sie y ein und drücken Sie Enter, um die Überschreibung zu bestätigen. Wenn Sie abbrechen möchten, würden Sie n eingeben.

Zusammenfassung

In diesem Labor haben Sie die grundlegenden Befehle zur Verwaltung von Dateien und Verzeichnissen in einer Linux-Umgebung kennengelernt. Sie haben das Erstellen von Verzeichnisstrukturen mit mkdir geübt, einschließlich der Option -p für übergeordnete Verzeichnisse, und deren Entfernen mit rmdir für leere Verzeichnisse und rm für nicht leere. Sie haben auch Dateien mit dem vi-Editor erstellt und wurden in das Konzept der Dateiverknüpfung eingeführt.

Der Kern des Labors konzentrierte sich auf die Erstellung und Analyse der beiden Link-Typen: symbolische (weiche) Links mit ln -s und Hard Links mit ln. Sie haben ihre Hauptunterschiede beobachtet, indem Sie Inodes untersucht und festgestellt haben, wie sich jeder Link verhält, wenn die Quelldatei geändert oder gelöscht wird. Abschließend 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, wodurch ein umfassender Überblick über wesentliche Dateiverwaltungsoperationen abgeschlossen wurde.