Dateien und Verzeichnisse mit Kommandozeilen-Tools verwalten

Red Hat Enterprise LinuxRed Hat Enterprise LinuxBeginner
Jetzt üben

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

Einführung

In diesem Lab erhalten Sie praktische Erfahrung in der Verwaltung von Dateien und Verzeichnissen mit wichtigen Befehlszeilen-Tools in einer RHEL-Umgebung. Sie lernen, Ihren aktuellen Standort zu erkunden und Inhalte mit pwd und ls aufzulisten, durch Verzeichnisse zu navigieren und Dateien mit cd und touch zu erstellen sowie Dateien und Verzeichnisse effektiv mit mkdir, cp, mv und rm zu organisieren.

Darüber hinaus erfahren Sie, wie Sie mit ln (sowohl Hard- als auch Symbolic Links) Verknüpfungen zwischen Dateien erstellen und Dateien effizient mit Shell-Erweiterungen auswählen können. Dies vermittelt Ihnen grundlegende Fähigkeiten für die Dateiverwaltung über die Befehlszeile.

Erkunden Sie Ihren aktuellen Standort und Listen Sie Inhalte mit pwd und ls auf

In diesem Schritt lernen Sie, wie Sie Ihren aktuellen Standort innerhalb des Dateisystems erkunden und dessen Inhalte mit den Befehlen pwd und ls auflisten. Das Verständnis Ihres aktuellen Arbeitsverzeichnisses und die Fähigkeit, dessen Inhalte anzuzeigen, sind grundlegende Fähigkeiten für die Navigation und Verwaltung von Dateien über die Befehlszeile.

Zuerst wollen wir mit dem Befehl pwd Ihr aktuelles Arbeitsverzeichnis ermitteln. pwd steht für "print working directory" (Arbeitsverzeichnis ausgeben) und zeigt den vollständigen Pfadnamen Ihres aktuellen Standorts im Dateisystem an.

pwd

Sie sollten eine Ausgabe ähnlich dieser sehen, die Ihr aktuelles Verzeichnis anzeigt:

/home/labex

Als Nächstes verwenden Sie den Befehl ls, um den Inhalt Ihres aktuellen Verzeichnisses aufzulisten. ls steht für "list" (Liste) und listet die Verzeichnisinhalte für das angegebene Verzeichnis oder, wenn kein Verzeichnis angegeben ist, für das aktuelle Arbeitsverzeichnis auf.

ls

Sie sollten eine Ausgabe sehen, die den Inhalt Ihres Home-Verzeichnisses anzeigt:

project

Der Befehl ls hat mehrere nützliche Optionen, um weitere Informationen über Dateien und Verzeichnisse anzuzeigen.

  1. Die Option -l (Long Listing Format) liefert detaillierte Informationen über jede Datei und jedes Verzeichnis, einschließlich Berechtigungen, Anzahl der Hard Links, Eigentümer, Gruppe, Größe und letzter Änderungszeitpunkt.

    ls -l

    Sie sollten eine Ausgabe ähnlich dieser sehen:

    total 0
    drwxr-xr-x 2 labex labex 6 Aug 27  2024 project
  2. Die Option -a (all files) listet alle Dateien auf, einschließlich versteckter Dateien. In Linux werden Dateinamen, die mit einem Punkt (.) beginnen, als versteckt betrachtet. Außerdem bezieht sich . auf das aktuelle Verzeichnis und .. auf das übergeordnete Verzeichnis.

    ls -a

    Sie sollten eine Ausgabe ähnlich dieser sehen, einschließlich versteckter Konfigurationsdateien:

    .  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  .tmux.conf  project
  3. Die Kombination von -l und -a als -la ergibt eine lange Auflistung aller Dateien, einschließlich der versteckten.

    ls -la

    Dies zeigt detaillierte Informationen für alle Dateien und Verzeichnisse, einschließlich der versteckten:

    total 20
    drwx------ 1 labex labex  72 Jun  4 03:12 .
    drwxr-xr-x 1 root  root   19 Aug 27  2024 ..
    -rw------- 1 labex labex  31 Jun  4 03:13 .bash_history
    -rw-r--r-- 1 labex labex  18 Feb 15  2024 .bash_logout
    -rw-r--r-- 1 labex labex 141 Feb 15  2024 .bash_profile
    -rw-r--r-- 1 labex labex 877 Jun  4 03:12 .bashrc
    -rw-r--r-- 1 labex labex  68 Aug 27  2024 .tmux.conf
    drwxr-xr-x 2 labex labex   6 Aug 27  2024 project
  4. Die Option -R (rekursiv) listet die Inhalte aller Unterverzeichnisse rekursiv auf. Um dies zu demonstrieren, erstellen wir zuerst ein Unterverzeichnis.

    mkdir mydir

    Verwenden Sie nun ls -R, um die rekursive Auflistung zu sehen.

    ls -R

    Sie sollten sowohl die Verzeichnisse mydir als auch project aufgelistet sehen, gefolgt von deren Inhalten:

    .:
    mydir  project
    
    ./mydir:
    
    ./project:

    Zum Schluss entfernen wir das Verzeichnis mydir, um die Umgebung für die nächsten Schritte zu bereinigen.

    rmdir mydir

    Dieser Befehl funktioniert nur für leere Verzeichnisse. Sie werden in einem späteren Schritt mehr über rmdir und rm erfahren.

Command line ls output example

In diesem Schritt lernen Sie, wie Sie Ihr aktuelles Arbeitsverzeichnis mit dem Befehl cd ändern und leere Dateien mit dem Befehl touch erstellen. Diese Befehle sind unerlässlich, um Ihre Dateien zu organisieren und effizient durch das Dateisystem zu navigieren.

Zuerst wollen wir Ihren aktuellen Standort überprüfen und in das Verzeichnis project navigieren, das in Schritt 1 gezeigt wurde.

pwd

Sie sollten /home/labex als Ausgabe sehen (Ihr Home-Verzeichnis).

Navigieren wir nun mit dem Befehl cd in das Verzeichnis project:

cd project

Überprüfen Sie Ihren neuen Standort:

pwd

Sie sollten jetzt /home/labex/project als Ausgabe sehen.

Erstellen wir nun ein neues Verzeichnis namens documents in Ihrem aktuellen project-Verzeichnis. Sie verwenden den Befehl mkdir, auf den Sie im vorherigen Schritt kurz gestoßen sind.

mkdir documents

Überprüfen Sie, ob das Verzeichnis documents erstellt wurde:

ls

Sie sollten documents in der Ausgabe sehen.

Als Nächstes verwenden Sie den Befehl cd, um das aktuelle Arbeitsverzeichnis Ihrer Shell in das neu erstellte Verzeichnis documents zu ändern.

cd documents

Nachdem Sie das Verzeichnis gewechselt haben, ist es gute Praxis, Ihren neuen Standort mit pwd zu bestätigen:

pwd

Die Ausgabe sollte jetzt /home/labex/project/documents sein.

Der Befehl cd bietet mehrere praktische Optionen für die Navigation:

  1. cd -: Dieser Befehl wechselt in das vorherige Verzeichnis, in dem Sie sich befanden. Probieren wir es aus.

    cd -

    Sie sollten wieder in /home/labex/project sein. Überprüfen Sie mit pwd:

    pwd

    Verwenden Sie nun erneut cd -, um zu /home/labex/project/documents zurückzukehren:

    cd -

    Und überprüfen Sie mit pwd:

    pwd
  2. cd ..: Dieser Befehl verwendet das versteckte Verzeichnis .. (zwei Punkte), um eine Ebene nach oben in das übergeordnete Verzeichnis zu wechseln, ohne den genauen Namen des übergeordneten Verzeichnisses kennen zu müssen.

    cd ..

    Sie sollten sich jetzt in /home/labex/project befinden. Überprüfen Sie mit pwd:

    pwd

    Sie können .. verketten, um mehrere Ebenen nach oben zu wechseln. Zum Beispiel, um von /home/labex/project nach /home/labex zu gelangen:

    cd ../

    Überprüfen Sie Ihren Standort:

    pwd

    Sie sollten sich in /home/labex befinden.

  3. cd (ohne Argumente): Dieser Befehl bringt Sie immer zurück in Ihr Home-Verzeichnis, das für den Benutzer labex /home/labex ist.

    cd

    Überprüfen Sie Ihren Standort:

    pwd

    Sie sollten sich in /home/labex befinden.

Navigieren wir nun zurück in Ihr Verzeichnis ~/project/documents, um einige Dateien zu erstellen.

cd ~/project/documents

Überprüfen Sie Ihren Standort:

pwd

Die Ausgabe sollte /home/labex/project/documents sein.

Sie verwenden jetzt den Befehl touch. Der Befehl touch aktualisiert den Zeitstempel einer Datei auf das aktuelle Datum und die aktuelle Uhrzeit, ohne sie anderweitig zu verändern. Dieser Befehl ist auch sehr nützlich, um leere Dateien zu erstellen.

Erstellen wir zwei leere Dateien namens report.txt und notes.txt im Verzeichnis ~/project/documents.

touch report.txt notes.txt

Überprüfen Sie mit ls -l, ob die Dateien erstellt wurden:

ls -l

Sie sollten eine Ausgabe ähnlich dieser sehen, die die neu erstellten Dateien zeigt:

total 0
-rw-rw-r--. 1 labex labex 0 Mar  7 HH:MM report.txt
-rw-rw-r--. 1 labex labex 0 Mar  7 HH:MM notes.txt

Zum Schluss erstellen wir ein neues Verzeichnis namens drafts in ~/project/documents und erstellen dann eine Datei darin.

mkdir drafts
cd drafts
touch draft_v1.txt

Überprüfen Sie die Dateierstellung:

ls -l

Sie sollten draft_v1.txt aufgelistet sehen.

Navigieren Sie nun mit einem einzigen cd-Befehl zurück in Ihr Verzeichnis ~/project.

cd ~/project

Überprüfen Sie Ihren Standort:

pwd

Die Ausgabe sollte /home/labex/project sein.

Dateien und Verzeichnisse mit mkdir, cp, mv und rm organisieren

In diesem Schritt lernen Sie, wie Sie Ihre Dateien und Verzeichnisse effektiv mit den Befehlen mkdir (make directory), cp (copy), mv (move/rename) und rm (remove) organisieren. Diese Befehle sind entscheidend für die Aufrechterhaltung eines sauberen und strukturierten Dateisystems.

Stellen Sie zunächst sicher, dass Sie sich in Ihrem Verzeichnis ~/project befinden.

cd ~/project

Überprüfen Sie Ihren aktuellen Standort:

pwd

Die Ausgabe sollte /home/labex/project sein.

mkdir: Verzeichnisse erstellen

Sie haben mkdir bereits verwendet, um ein einzelnes Verzeichnis zu erstellen. Lassen Sie uns nun erweiterte mkdir-Optionen erkunden.

Sie können mehrere Verzeichnisse gleichzeitig erstellen, indem Sie sie als Argumente auflisten:

mkdir reports presentations

Überprüfen Sie ihre Erstellung:

ls

Sie sollten documents, presentations und reports aufgelistet sehen.

Die Option -p (parents) des Befehls mkdir ist sehr nützlich, um fehlende übergeordnete Verzeichnisse für das angeforderte Ziel zu erstellen. Dies verhindert Fehler, wenn Sie versuchen, ein Unterverzeichnis innerhalb eines nicht vorhandenen übergeordneten Verzeichnisses zu erstellen.

Erstellen wir eine verschachtelte Verzeichnisstruktur: projects/alpha/docs.

mkdir -p projects/alpha/docs

Verwenden Sie nun ls -R, um die neu erstellte verschachtelte Struktur zu sehen:

ls -R projects

Sie sollten Folgendes sehen:

projects:
alpha

projects/alpha:
docs

projects/alpha/docs:

cp: Dateien und Verzeichnisse kopieren

Der Befehl cp kopiert Dateien und Verzeichnisse. Beim Kopieren einer Datei wird eine Duplikat entweder im aktuellen Verzeichnis oder in einem anderen angegebenen Verzeichnis erstellt.

Kopieren wir report.txt von documents in das Verzeichnis reports.

cp documents/report.txt reports/

Überprüfen Sie die Kopie, indem Sie den Inhalt des Verzeichnisses reports auflisten:

ls reports

Sie sollten report.txt im Verzeichnis reports sehen.

Wenn eine Datei mit demselben Namen im Zielverzeichnis existiert, überschreibt cp sie standardmäßig.

Um ein Verzeichnis und seinen Inhalt zu kopieren, müssen Sie die Option -r (rekursiv) verwenden. Standardmäßig ignoriert cp Verzeichnisse, wenn -r nicht angegeben ist.

Kopieren wir das gesamte Verzeichnis documents nach projects/alpha/.

cp -r documents projects/alpha/

Überprüfen Sie die rekursive Kopie:

ls -R projects/alpha/documents

Sie sollten den Inhalt des Verzeichnisses documents (einschließlich notes.txt, drafts und drafts/draft_v1.txt) jetzt im Inneren von projects/alpha/documents dupliziert sehen.

projects/alpha/documents:
drafts  notes.txt  report.txt

projects/alpha/documents/drafts:
draft_v1.txt

mv: Dateien und Verzeichnisse verschieben und umbenennen

Der Befehl mv verschiebt Dateien von einem Ort zu einem anderen. Er kann auch verwendet werden, um Dateien oder Verzeichnisse umzubenennen. Wenn Sie sich den absoluten Pfad zu einer Datei als ihren vollständigen Namen vorstellen, dann ist das Verschieben einer Datei effektiv dasselbe wie das Umbenennen einer Datei. Der Inhalt der verschobenen Dateien bleibt unverändert.

Benennen wir notes.txt im Verzeichnis documents in meeting_notes.txt um.

mv documents/notes.txt documents/meeting_notes.txt

Überprüfen Sie die Umbenennung:

ls documents

Sie sollten jetzt meeting_notes.txt anstelle von notes.txt sehen.

Verschieben wir nun report.txt aus dem Verzeichnis reports nach documents/drafts.

mv reports/report.txt documents/drafts/

Überprüfen Sie die Verschiebung:

ls reports

Das Verzeichnis reports sollte jetzt leer sein.

ls documents/drafts

Sie sollten draft_v1.txt und report.txt im Verzeichnis documents/drafts sehen.

Die Option -v für mv zeigt eine detaillierte Ausgabe der Befehlsoperationen an, was zur Bestätigung hilfreich sein kann.

mv -v documents/meeting_notes.txt documents/final_notes.txt

Sie sehen eine Ausgabe wie:

renamed 'documents/meeting_notes.txt' -> 'documents/final_notes.txt'

rm: Dateien und Verzeichnisse entfernen

Der Befehl rm entfernt Dateien. Seien Sie vorsichtig mit rm, da gelöschte Dateien in der Regel nicht über die Befehlszeile wiederhergestellt werden können.

Erstellen wir eine temporäre Datei, um rm zu üben.

touch temp_file.txt

Entfernen Sie nun temp_file.txt:

rm temp_file.txt

Überprüfen Sie die Entfernung:

ls

temp_file.txt sollte nicht mehr aufgelistet sein.

Standardmäßig entfernt rm keine Verzeichnisse. Wenn Sie versuchen, ein nicht leeres Verzeichnis ohne die richtige Option zu entfernen, erhalten Sie einen Fehler.

rm presentations

Sie sehen einen Fehler:

rm: cannot remove 'presentations': Is a directory

Um Verzeichnisse und deren Inhalt zu entfernen, müssen Sie die Option -r (rekursiv) verwenden. Der Befehl rm -r durchläuft zuerst jedes Unterverzeichnis und entfernt einzeln dessen Dateien, bevor er jedes Verzeichnis entfernt.

Entfernen wir das Verzeichnis presentations und seinen Inhalt (derzeit leer, aber -r ist immer noch für Verzeichnisse erforderlich).

rm -r presentations

Überprüfen Sie die Entfernung:

ls

presentations sollte nicht mehr aufgelistet sein.

Die Option -i für rm fordert interaktiv eine Bestätigung an, bevor jede Datei gelöscht wird. Dies ist eine gute Sicherheitsmaßnahme.

Erstellen wir ein paar weitere temporäre Dateien und entfernen Sie sie dann interaktiv.

touch file1.txt file2.txt
rm -i file1.txt file2.txt

Sie werden für jede Datei aufgefordert:

rm: remove regular empty file 'file1.txt'? y
rm: remove regular empty file 'file2.txt'? y

Geben Sie y ein und drücken Sie die Eingabetaste für jede Eingabeaufforderung, um die Löschung zu bestätigen.

Die Option -f (force) erzwingt die Entfernung ohne Aufforderung zur Bestätigung durch den Benutzer. Wenn Sie sowohl -i als auch -f angeben, hat -f Vorrang. Verwenden Sie -f mit äußerster Vorsicht.

Zum Schluss bereinigen wir das Verzeichnis projects.

rm -r projects

Überprüfen Sie, ob projects gelöscht wurde:

ls

rmdir: Leere Verzeichnisse entfernen

Sie können auch den Befehl rmdir verwenden, um leere Verzeichnisse zu entfernen. Er schlägt fehl, wenn das Verzeichnis nicht leer ist.

Erstellen wir ein leeres Verzeichnis und entfernen es mit rmdir.

mkdir empty_dir
rmdir empty_dir

Überprüfen Sie die Entfernung:

ls

empty_dir sollte nicht mehr aufgelistet sein.

Wenn Sie versuchen, ein nicht leeres Verzeichnis mit rmdir zu entfernen, schlägt dies fehl:

mkdir test_dir
touch test_dir/test_file.txt
rmdir test_dir

Sie sehen einen Fehler:

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

Denken Sie daran, rm -r für nicht leere Verzeichnisse zu verwenden.

rm -r test_dir

In diesem Schritt lernen Sie, wie Sie mit dem Befehl ln Verknüpfungen zwischen Dateien erstellen. Linux-Dateisysteme unterstützen zwei Arten von Verknüpfungen: Hard Links und Symbolic Links (oder Soft Links). Das Verständnis des Unterschieds zwischen ihnen ist entscheidend für ein effektives Dateimanagement.

Stellen Sie zunächst sicher, dass Sie sich in Ihrem Verzeichnis ~/project befinden.

cd ~/project

Überprüfen Sie Ihren aktuellen Standort:

pwd

Die Ausgabe sollte /home/labex/project sein.

Erstellen wir eine neue Datei namens original_file.txt mit etwas Inhalt, um damit zu arbeiten.

echo "This is the content of the original file." > original_file.txt

Überprüfen Sie den Dateiinhalt:

cat original_file.txt

Ein Hard Link ist im Wesentlichen ein anderer Name für eine bestehende Datei. Er verweist direkt auf dieselben Daten (Inode) auf dem Speichergerät wie die Originaldatei. Nach der Erstellung eines Hard Links können Sie den Unterschied zwischen dem neuen Hard Link und dem ursprünglichen Namen der Datei nicht erkennen; sie sind gleichermaßen gültige Möglichkeiten, auf dieselben Daten zuzugreifen.

Sie können feststellen, ob eine Datei mehrere Hard Links hat, indem Sie den Befehl ls -l verwenden. Die zweite Spalte in der Ausgabe von ls -l zeigt die Anzahl der Hard Links zur Datei an.

Ursprünglich hat original_file.txt einen Hard Link (sich selbst):

ls -l original_file.txt

Sie sollten eine Ausgabe ähnlich dieser sehen, wobei die Zahl 1 einen Hard Link anzeigt:

-rw-rw-r--. 1 labex labex 35 Mar  7 HH:MM original_file.txt

Erstellen wir nun mit dem Befehl ln einen Hard Link zu original_file.txt mit dem Namen hard_link.txt.

ln original_file.txt hard_link.txt

Überprüfen Sie die Anzahl der Hard Links für beide Dateien:

ls -l original_file.txt hard_link.txt

Sie sollten jetzt die Anzahl der Hard Links als 2 für beide Dateien sehen, was darauf hindeutet, dass sie auf dieselben Daten verweisen:

-rw-rw-r--. 2 labex labex 35 Mar  7 HH:MM hard_link.txt
-rw-rw-r--. 2 labex labex 35 Mar  7 HH:MM original_file.txt

Um zu bestätigen, dass sie auf dieselben Daten verweisen, können Sie die Option ls -i verwenden, um die Inode-Nummer jeder Datei aufzulisten. Wenn sich die Dateien im selben Dateisystem befinden und ihre Inode-Nummern gleich sind, dann sind die Dateien Hard Links, die auf denselben Dateiinhalt verweisen.

ls -i original_file.txt hard_link.txt

Die Inode-Nummern sollten identisch sein:

1234567 original_file.txt  1234567 hard_link.txt

Wenn Sie den Inhalt einer Datei ändern, werden die Änderungen in der anderen widergespiegelt, da es sich um dieselben zugrunde liegenden Daten handelt.

echo "Adding new line." >> hard_link.txt
cat original_file.txt

Sie werden sehen:

This is the content of the original file.
Adding new line.

Selbst wenn die Originaldatei gelöscht wird, können Sie weiterhin auf den Inhalt der Datei zugreifen, vorausgesetzt, dass mindestens ein weiterer Hard Link existiert. Daten werden nur dann vom Speicher gelöscht, wenn der letzte Hard Link gelöscht wird, wodurch der Dateiinhalt von keinem Hard Link mehr referenziert wird.

Entfernen wir original_file.txt:

rm original_file.txt

Versuchen Sie nun, auf hard_link.txt zuzugreifen:

cat hard_link.txt

Sie sehen immer noch den Inhalt:

This is the content of the original file.
Adding new line.

Die Anzahl der Hard Links für hard_link.txt sollte jetzt 1 sein:

ls -l hard_link.txt

Einschränkungen von Hard Links:

  • Sie können Hard Links nur mit regulären Dateien verwenden. Sie können den Befehl ln nicht verwenden, um einen Hard Link zu einem Verzeichnis oder einer speziellen Datei zu erstellen.
  • Sie können Hard Links nur verwenden, wenn sich beide Dateien im selben Dateisystem befinden. Sie können den Befehl df verwenden, um die Dateisysteme aufzulisten.

Ein Symbolic Link (auch "Soft Link" oder "Symlink" genannt) ist eine spezielle Art von Datei, die über ihren Pfad auf eine andere Datei oder ein anderes Verzeichnis verweist. Es ist ähnlich wie eine Verknüpfung in Windows. Im Gegensatz zu Hard Links verweisen Symbolic Links nicht direkt auf die Daten; sie verweisen auf den Namen der Zieldatei oder des Zielverzeichnisses.

Erstellen wir eine neue Datei namens target_file.txt für unseren Symbolic Link.

echo "This is the target file for the symbolic link." > target_file.txt

Erstellen Sie nun mit dem Befehl ln -s einen Symbolic Link namens sym_link.txt, der auf target_file.txt verweist.

ln -s target_file.txt sym_link.txt

Überprüfen Sie die Details des Symbolic Links mit ls -l:

ls -l target_file.txt sym_link.txt

Sie werden ein paar Unterschiede feststellen:

  • Das erste Zeichen der Langauflistung für sym_link.txt ist l (Buchstabe l), was darauf hindeutet, dass es sich um einen Symbolic Link handelt.
  • Die Ausgabe zeigt sym_link.txt -> target_file.txt, was explizit zeigt, worauf es verweist.
  • Die Größe des Symbolic Links ist sehr klein (es ist nur die Länge des Zielpfads), nicht die Größe der Zieldatei.
  • Die Anzahl der Hard Links für sym_link.txt ist 1.
-rw-rw-r--. 1 labex labex 45 Mar  7 HH:MM target_file.txt
lrwxrwxrwx. 1 labex labex 14 Mar  7 HH:MM sym_link.txt -> target_file.txt

Sie können über sym_link.txt auf den Inhalt von target_file.txt zugreifen:

cat sym_link.txt

Sie werden sehen:

This is the target file for the symbolic link.

Wesentliche Unterschiede und Verhaltensweisen von Symbolic Links:

  • Dateisystemübergreifende Verknüpfung: Symbolic Links können zwei Dateien in verschiedenen Dateisystemen verknüpfen.

  • Verknüpfung zu Verzeichnissen: Symbolic Links können nicht nur auf eine reguläre Datei, sondern auch auf ein Verzeichnis verweisen. Erstellen wir einen Symbolic Link zu Ihrem Verzeichnis documents.

    ln -s documents doc_shortcut

    Jetzt können Sie cd in doc_shortcut ausführen, als wäre es das Verzeichnis documents selbst:

    cd doc_shortcut

    Überprüfen Sie Ihren Standort. Beachten Sie, dass pwd standardmäßig den Symbolic Link-Pfad anzeigt:

    pwd

    Ausgabe: /home/labex/project/doc_shortcut

    Wenn Sie möchten, dass pwd den tatsächlichen Pfad des Verzeichnisses anzeigt, auf das der Symbolic Link verweist, verwenden Sie die Option -P:

    pwd -P

    Ausgabe: /home/labex/project/documents

    Gehen Sie nun zurück zu ~/project:

    cd ~/project
  • Hängende Symbolic Links: Wenn die ursprüngliche reguläre Datei (das Ziel) gelöscht wird, existiert der Symbolic Link weiterhin, verweist aber auf eine fehlende Datei. Dies wird als "hängender Symbolic Link" bezeichnet.

    Entfernen wir target_file.txt:

    rm target_file.txt

    Überprüfen Sie nun sym_link.txt mit ls -l:

    ls -l sym_link.txt

    Sie werden sehen, dass sym_link.txt weiterhin existiert, aber sein Ziel target_file.txt wird rot oder in einer anderen Farbe angezeigt (abhängig von der Konfiguration Ihres Terminals), um anzuzeigen, dass es defekt ist:

    lrwxrwxrwx. 1 labex labex 14 Mar  7 HH:MM sym_link.txt -> target_file.txt

    Wenn Sie versuchen, cat auf dem hängenden Symbolic Link auszuführen, schlägt dies fehl:

    cat sym_link.txt

    Ausgabe:

    cat: sym_link.txt: No such file or directory

Zum Schluss bereinigen wir die in diesem Schritt erstellten Dateien und Verknüpfungen.

rm hard_link.txt sym_link.txt doc_shortcut
ls

Sie sollten nur die Verzeichnisse documents und reports sehen, die aus den vorherigen Schritten verbleiben.

Dateien effizient mit Shell-Erweiterungen auswählen

In diesem Schritt lernen Sie, wie Sie Dateien und Verzeichnisse effizient mit verschiedenen Shell-Erweiterungsfunktionen auswählen, einschließlich Mustervergleich (Globbing), Tilde-Erweiterung, Klammererweiterung, Variablenerweiterung und Befehlssubstitution. Diese Funktionen ermöglichen es Ihnen, Operationen auf mehreren Dateien mit präzisen Befehlen durchzuführen.

Stellen Sie zunächst sicher, dass Sie sich in Ihrem Verzeichnis ~/project befinden.

cd ~/project

Überprüfen Sie Ihren aktuellen Standort:

pwd

Die Ausgabe sollte /home/labex/project sein.

Um Shell-Erweiterungen zu demonstrieren, erstellen wir eine Reihe von Dateien und Verzeichnissen.

mkdir data
cd data
touch file1.txt file2.log file_a.txt file_b.log report_2023.txt report_2024.log
touch image.jpg document.pdf archive.zip
mkdir dir1 dir2 dir3
cd ..

Listen Sie nun den Inhalt des Verzeichnisses data auf, um die von Ihnen erstellten Dateien zu sehen:

ls data

Sie sollten Folgendes sehen:

archive.zip  dir1  dir2  dir3  document.pdf  file1.txt  file2.log  file_a.txt  file_b.log  image.jpg  report_2023.txt  report_2024.log

Mustervergleich (Globbing)

Mustervergleich, auch bekannt als Globbing, ermöglicht es Ihnen, Dateien basierend auf Mustern unter Verwendung von Sonderzeichen, den sogenannten Metazeichen, auszuwählen.

Metazeichen Entspricht Beispiel
* Beliebige Zeichenfolge mit null oder mehr Zeichen. *.txt entspricht allen Dateien, die mit .txt enden.
? Ein einzelnes Zeichen. file?.txt entspricht file1.txt, fileA.txt usw.
[abc...] Ein beliebiges Zeichen in der eingeschlossenen Klasse. file[12].txt entspricht file1.txt oder file2.txt.
[!abc...] Ein beliebiges Zeichen, das nicht in der eingeschlossenen Klasse enthalten ist. file[!1].txt entspricht fileA.txt, aber nicht file1.txt.
[[:alpha:]] Ein beliebiger alphabetischer Buchstabe. file[[:alpha:]].txt entspricht fileA.txt.
[[:digit:]] Eine beliebige einzelne Ziffer von 0 bis 9. file[[:digit:]].txt entspricht file1.txt.

Probieren wir einige Beispiele innerhalb des Verzeichnisses data aus.

  1. Verwendung von *:
    Listen Sie alle Dateien auf, die mit .txt enden:

    ls data/*.txt

    Ausgabe:

    data/file1.txt  data/file_a.txt  data/report_2023.txt

    Listen Sie alle Dateien auf, die file in ihrem Namen enthalten:

    ls data/*file*

    Ausgabe:

    data/file1.txt  data/file2.log  data/file_a.txt  data/file_b.log
  2. Verwendung von ?:
    Listen Sie Dateien auf, die genau ein Zeichen vor .log haben:

    ls data/file?.log

    Ausgabe:

    data/file2.log
  3. Verwendung von [] für Zeichenmengen:
    Listen Sie Dateien auf, die mit file beginnen und mit .txt oder .log enden:

    ls data/file*.{txt,log}

    Ausgabe:

    data/file1.txt  data/file2.log  data/file_a.txt  data/file_b.log

    Listen Sie Dateien auf, die mit report_ beginnen und entweder 2023 oder 2024 in ihrem Namen haben:

    ls data/report_[2][0][2][34].*

    Ausgabe:

    data/report_2023.txt  data/report_2024.log

Tilde-Erweiterung ~

Das Tilde-Zeichen (~) erweitert sich zum Home-Verzeichnis des aktuellen Benutzers (/home/labex). Wenn es von einem Benutzernamen gefolgt wird, erweitert es sich zu dem Home-Verzeichnis dieses Benutzers.

echo ~

Ausgabe:

/home/labex
echo ~root

Ausgabe:

/root
echo ~/project/data

Ausgabe:

/home/labex/project/data

Klammererweiterung {}

Die Klammererweiterung generiert beliebige Zeichenfolgen. Sie ist nützlich, um Listen von Dateien oder Verzeichnissen mit ähnlichen Namen zu erstellen, ohne jede einzeln eintippen zu müssen.

  1. Durch Komma getrennte Liste:
    Erstellen Sie die Dateien report_jan.txt, report_feb.txt, report_mar.txt:

    touch data/report_{jan,feb,mar}.txt

    Listen Sie sie auf:

    ls data/report_*.txt

    Ausgabe:

    data/report_2023.txt  data/report_jan.txt
    data/report_2024.log  data/report_feb.txt
    data/report_mar.txt
  2. Bereich von Zahlen oder Buchstaben:
    Erstellen Sie die Dateien doc1.txt, doc2.txt, doc3.txt:

    touch data/doc{1..3}.txt

    Listen Sie sie auf:

    ls data/doc*.txt

    Ausgabe:

    data/doc1.txt  data/doc2.txt  data/doc3.txt

    Erstellen Sie die Verzeichnisse chapterA, chapterB, chapterC:

    mkdir data/chapter{A..C}

    Listen Sie sie auf:

    ls data/chapter*

    Ausgabe:

    data/chapterA  data/chapterB  data/chapterC

Variablenerweiterung

Shell-Variablen speichern Werte, die in Befehlen erweitert werden können. Sie definieren eine Variable mit VARNAME=value und greifen mit $VARNAME oder ${VARNAME} auf ihren Wert zu.

MY_DIR=data
echo "Mein Verzeichnis ist: $MY_DIR"

Ausgabe:

Mein Verzeichnis ist: data

Sie können Variablen in Befehlen verwenden:

ls $MY_DIR

Die Ausgabe ist der Inhalt des Verzeichnisses data.

Befehlssubstitution

Mit der Befehlssubstitution können Sie die Ausgabe eines Befehls als Teil eines anderen Befehls verwenden. Dies geschieht, indem Sie den Befehl in $(command) oder Backticks `command` einschließen. Die Syntax $(command) wird im Allgemeinen bevorzugt, da sie verschachtelt werden kann.

Holen wir uns das aktuelle Datum und verwenden es in einem Dateinamen.

touch data/log_$(date +%Y-%m-%d).txt

Listen Sie das Verzeichnis data auf, um die neue Datei zu sehen:

ls data/log_*.txt

Die Ausgabe ist ähnlich wie:

data/log_2024-03-07.txt

Sie können es auch verwenden, um Dateien zu zählen:

echo "Es gibt $(ls data | wc -l) Elemente im Datenverzeichnis."

Die Ausgabe ist ähnlich wie:

Es gibt 19 Elemente im Datenverzeichnis.

Argumente vor der Erweiterung schützen

Manchmal möchten Sie verhindern, dass die Shell bestimmte Zeichen erweitert. Dies können Sie mit Folgendem tun:

  1. Backslash (\): Escapes das nächste einzelne Zeichen.

    echo "Der Wert von \$HOME ist Ihr Home-Verzeichnis."

    Ausgabe:

    Der Wert von $HOME ist Ihr Home-Verzeichnis.
  2. Einfache Anführungszeichen (''): Verhindern alle Shell-Erweiterungen innerhalb der Anführungszeichen.

    echo 'Das aktuelle Datum ist $(date +%Y-%m-%d).'

    Ausgabe:

    Das aktuelle Datum ist $(date +%Y-%m-%d).
  3. Doppelte Anführungszeichen (""): Verhindern die meisten Shell-Erweiterungen, erlauben aber die Variablenerweiterung ($VAR) und die Befehlssubstitution ($()).

    MY_DATE=$(date +%Y-%m-%d)
    echo "Das heutige Datum ist $MY_DATE."

    Ausgabe:

    Das heutige Datum ist 2024-03-07.

    Vergleichen Sie mit einfachen Anführungszeichen:

    echo 'Das heutige Datum ist $MY_DATE.'

    Ausgabe:

    Das heutige Datum ist $MY_DATE.

Zum Schluss bereinigen wir das Verzeichnis data.

rm -r data

Zusammenfassung

In diesem Lab haben Sie grundlegende Kommandozeilen-Tools zur Verwaltung von Dateien und Verzeichnissen in RHEL kennengelernt. Sie begannen mit der Beherrschung von pwd, um Ihr aktuelles Arbeitsverzeichnis zu identifizieren, und ls, um den Verzeichnisinhalt aufzulisten, einschließlich der Verwendung von Optionen wie -l für detaillierte Informationen und -a, um versteckte Dateien anzuzeigen. Anschließend lernten Sie, wie Sie mit cd im Dateisystem navigieren und mit touch neue Dateien erstellen.

Darüber hinaus erlangten Sie Kenntnisse in der Organisation Ihres Dateisystems mithilfe von mkdir zum Erstellen von Verzeichnissen, cp zum Kopieren von Dateien und Verzeichnissen, mv zum Verschieben oder Umbenennen und rm zum Entfernen. Das Lab behandelte auch die Erstellung von Hard Links und Symbolic Links mit ln und wie Sie Dateien effizient mit Shell-Erweiterungen auswählen können, wodurch Ihre Fähigkeit zur effektiven Verwaltung von Dateien und Verzeichnissen über die Kommandozeile verbessert wurde.