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
Dateien und symbolische Links erstellen mit vi und ln -s
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.
- Starten Sie in Ihrem Terminal (das sich im Pfad
~/projectbefinden sollte)vi, um die Dateifileazu erstellen:
vi filea
- 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 Tastei. Möglicherweise sehen Sie am unteren Bildschirmrand-- INSERT --. - Geben Sie nun den folgenden Text ein:
This is filea.
- Um die Datei zu speichern und
vizu verlassen, müssen Sie zuerst durch Drücken derEsc-Taste in den Befehlsmodus zurückkehren. Geben Sie dannZZein (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
fileabeginnt mit einem-, was auf eine reguläre Datei hinweist. Die Zeichenfolge fürfilebbeginnt mit eineml, 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
fileaundfilebsind 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.
Harte Links erstellen und analysieren mit ln und Inodes
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
fileaundfilecdie 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 Linkfilebhat seine eigene, eindeutige Inode. - Link-Zähler (Spalte 2): Betrachten Sie die Zahl bei
fileaundfilec. Sie steht nun auf2. Diese Zahl ist der Hardlink-Zähler (Link Count). Er hält fest, wie viele Namen (harte Links) auf diese eine Inode verweisen. Als Siefilecerstellten, erhöhte sich der Link-Zähler für diese Inode von 1 auf 2. - Dateityp (Spalte 1 der Berechtigungen): Beachten Sie, dass
filecals reguläre Datei aufgeführt ist (die Berechtigungen beginnen mit-), genau wiefilea. Es ist kein spezieller Link-Typ wiefileb(der mitlbeginnt).
Link-Verhalten nach Modifikation der Quelldatei beobachten
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 Namenfilea, aber dieser Name korrespondiert nicht mehr mit einer existierenden Datei. In vielen Terminals wird der Dateinamefilebrot markiert, um diesen fehlerhaften Zustand anzuzeigen. Wenn Sie versuchen,cat filebauszuführen, erhalten Sie eine Fehlermeldung. - Harter Link
filec: Die Dateifilecist 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 vonfileanur 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.
- Starten Sie
vi:vi filea - Drücken Sie
i, um in den Einfügemodus zu gelangen. - Geben Sie den neuen Inhalt ein:
This is the new filea. - Drücken Sie
Esc, um in den Befehlsmodus zurückzukehren, und geben Sie dannZZzum 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 Dateifileaexistiert, aber beachten Sie, dass ihre Inode-Nummer (z. B.131080) anders ist als die Inode vonfilec(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 namensfilea. - Harter Link
filec:filecist 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.
- Erstellen Sie zunächst eine einfache Datei mit dem Befehl
touch.toucherstellt eine leere Datei, falls diese noch nicht existiert.
touch source_file
- 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
- Kopieren Sie nun
source_filein eine neue Datei namenscopied_file.
cp source_file copied_file
- 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.
- Benennen wir
source_fileinrenamed_fileum.
mv source_file renamed_file
- Ü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
- Verschieben wir nun diese Datei. Erstellen Sie dazu zuerst ein Zielverzeichnis.
mkdir move_destination
- Verschieben Sie
renamed_filein das Verzeichnismove_destination.
mv renamed_file move_destination/
- Ü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).
- Versuchen wir,
copied_fileüber die Datei in unserem Verzeichnismove_destinationzu kopieren.
cp -i copied_file move_destination/renamed_file
- 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.



