Dateien in Red Hat Enterprise Linux verwalten

Red Hat Enterprise LinuxBeginner
Jetzt üben

Einführung

In diesem Lab sammeln Sie praktische Erfahrungen im Umgang mit Dateien und Verzeichnissen mithilfe grundlegender Kommandozeilenwerkzeuge in einer RHEL-Umgebung. Sie lernen, Ihren aktuellen Speicherort zu erkunden und Inhalte mit pwd und ls aufzulisten, 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, wodurch Sie grundlegende Fähigkeiten für die Kommandozeilen-Dateiverwaltung erwerben.

Aktuellen Speicherort erkunden und Inhalte mit pwd und ls auflisten

In diesem Schritt lernen Sie, wie Sie Ihren aktuellen Speicherort im Dateisystem 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 Kommandozeile.

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

pwd

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

/home/labex

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

ls

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

project

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

  1. Die Option -l (lange Listenformat) bietet detaillierte Informationen zu jeder Datei und jedem Verzeichnis, einschließlich Berechtigungen, Anzahl der Hardlinks, Besitzer, Gruppe, Größe und letztes Änderungsdatum.

    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 (alle Dateien) listet alle Dateien auf, einschließlich versteckter Dateien. Unter 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 Liste 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 den Inhalt aller Unterverzeichnisse rekursiv auf. Um dies zu demonstrieren, erstellen wir zunächst ein Unterverzeichnis.

    mkdir mydir
    

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

    ls -R
    

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

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

    Schließlich 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. Mehr über rmdir und rm erfahren Sie in einem späteren Schritt.

Beispiel für die Ausgabe des Kommandozeilenbefehls ls

Verzeichnisse navigieren und Dateien mit cd und touch erstellen

In diesem Schritt lernen Sie, wie Sie Ihr aktuelles Arbeitsverzeichnis mit dem Befehl cd wechseln 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 überprüfen wir Ihren aktuellen Speicherort und navigieren zum Verzeichnis project, das in Schritt 1 angezeigt 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 Speicherort:

pwd

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

Erstellen wir nun ein neues Verzeichnis namens documents in Ihrem aktuellen project-Verzeichnis. Sie verwenden den Befehl mkdir, den Sie im vorherigen Schritt kurz kennengelernt haben.

mkdir documents

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

ls

Sie sollten documents in der Ausgabe aufgelistet 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 Speicherort mit pwd zu bestätigen:

pwd

Die Ausgabe sollte nun /home/labex/project/documents lauten.

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 sich wieder in /home/labex/project befinden. Überprüfen Sie dies mit pwd:

    pwd
    

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

    cd -
    

    Und überprüfen Sie dies 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 nun in /home/labex/project befinden. Überprüfen Sie dies mit pwd:

    pwd
    

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

    cd ../
    

    Überprüfen Sie Ihren Speicherort:

    pwd
    

    Sie sollten sich in /home/labex befinden.

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

    cd
    

    Überprüfen Sie Ihren Speicherort:

    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 Speicherort:

pwd

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

Sie werden nun den Befehl touch verwenden. Der Befehl touch aktualisiert den Zeitstempel einer Datei auf das aktuelle Datum und die aktuelle Uhrzeit, ohne sie anderweitig zu ändern. Dieser Befehl ist auch sehr nützlich zum Erstellen leerer Dateien.

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 anzeigt:

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

Erstellen wir schließlich ein neues Verzeichnis namens drafts innerhalb von ~/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 Speicherort:

pwd

Die Ausgabe sollte /home/labex/project lauten.

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 Pflege 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 Speicherort:

pwd

Die Ausgabe sollte /home/labex/project lauten.

mkdir: Verzeichnisse erstellen

Sie haben mkdir bereits verwendet, um ein einzelnes Verzeichnis zu erstellen. Nun erkunden wir fortgeschrittenere mkdir-Optionen.

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

mkdir reports presentations

Überprüfen Sie deren Erstellung:

ls

Sie sollten documents, presentations und reports aufgelistet sehen.

Die Option -p (parents) des mkdir-Befehls 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 anzuzeigen:

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 aus 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 diese standardmäßig.

Um ein Verzeichnis und dessen Inhalt zu kopieren, müssen Sie die Option -r (recursive) 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) nun dupliziert in projects/alpha/documents 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 Speicherort zu einem anderen. Er kann auch zum Umbenennen von Dateien oder Verzeichnissen verwendet werden. Wenn Sie den absoluten Pfad einer Datei als ihren vollständigen Namen betrachten, ist das Verschieben einer Datei im Wesentlichen 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 nun meeting_notes.txt anstelle von notes.txt sehen.

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

mv reports/report.txt documents/drafts/

Überprüfen Sie das Verschieben:

ls reports

Das Verzeichnis reports sollte nun 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 diese:

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 von der Kommandozeile aus normalerweise nicht 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 werden.

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

rm presentations

Sie sehen eine Fehlermeldung:

rm: cannot remove 'presentations': Is a directory

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

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

rm -r presentations

Überprüfen Sie die Entfernung:

ls

presentations sollte nicht mehr aufgelistet werden.

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

Erstellen wir ein paar weitere temporäre Dateien und entfernen 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 für jede Aufforderung y ein und drücken Sie Enter, um die Löschung zu bestätigen.

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

Bereinigen wir abschließend das Verzeichnis projects.

rm -r projects

Überprüfen Sie, ob projects verschwunden ist:

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 werden.

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 eine Fehlermeldung:

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 Links zwischen Dateien mit dem Befehl ln erstellen. Linux-Dateisysteme unterstützen zwei Arten von Links: Hard-Links und symbolische (oder Soft-) Links. Das Verständnis des Unterschieds zwischen ihnen ist entscheidend für eine effektive Dateiverwaltung.

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

cd ~/project

Überprüfen Sie Ihren aktuellen Speicherort:

pwd

Die Ausgabe sollte /home/labex/project lauten.

Erstellen wir eine neue Datei namens original_file.txt mit etwas Inhalt, mit dem wir arbeiten können.

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 weiterer Name für eine vorhandene Datei. Er verweist direkt auf dasselbe Datenobjekt (Inode) auf dem Speichermedium wie die Originaldatei. Nachdem ein Hard-Link erstellt wurde, können Sie keinen Unterschied zwischen dem neuen Hard-Link und dem ursprünglichen Namen der Datei feststellen; sie sind gleichermaßen gültige Wege, um auf dieselben Daten zuzugreifen.

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

Anfä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 einen Hard-Link zu original_file.txt namens hard_link.txt mit dem Befehl ln.

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 nun die Anzahl der Hard-Links als 2 für beide Dateien sehen, was darauf hinweist, 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 auf demselben Dateisystem befinden und ihre Inode-Nummern gleich sind, dann sind die Dateien Hard-Links, die auf denselben Dateninhalt 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 reflektiert, 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 immer noch auf den Inhalt der Datei zugreifen, vorausgesetzt, es existiert mindestens ein weiterer Hard-Link. Daten werden erst 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 werden immer noch den Inhalt sehen:

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

Die Anzahl der Hard-Links für hard_link.txt sollte nun 1 betragen:

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 auf demselben Dateisystem befinden. Sie können den Befehl df verwenden, um die Dateisysteme aufzulisten.

Ein symbolischer Link (auch "Soft-Link" oder "Symlink" genannt) ist ein spezieller Dateityp, der über seinen Pfad auf eine andere Datei oder ein Verzeichnis verweist. Er ähnelt einer Verknüpfung unter Windows. Im Gegensatz zu Hard-Links verweisen symbolische Links nicht direkt auf die Daten; sie verweisen auf den Namen der Ziel-Datei oder des Ziel-Verzeichnisses.

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

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

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

ln -s target_file.txt sym_link.txt

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

ls -l target_file.txt sym_link.txt

Sie werden einige Unterschiede feststellen:

  • Das erste Zeichen der langen Auflistung für sym_link.txt ist l (Buchstabe l), was anzeigt, dass es sich um einen symbolischen Link handelt.
  • Die Ausgabe zeigt sym_link.txt -> target_file.txt, was explizit zeigt, worauf es verweist.
  • Die Größe des symbolischen 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 auf den Inhalt von target_file.txt über sym_link.txt zugreifen:

cat sym_link.txt

Sie werden sehen:

This is the target file for the symbolic link.

Wichtige Unterschiede und Verhaltensweisen von symbolischen Links:

  • Dateisystemübergreifendes Verknüpfen: Symbolische Links können zwei Dateien auf verschiedenen Dateisystemen verknüpfen.

  • Verknüpfen mit Verzeichnissen: Symbolische Links können auf ein Verzeichnis verweisen, nicht nur auf eine reguläre Datei. Erstellen wir einen symbolischen Link zu Ihrem Verzeichnis documents.

    ln -s documents doc_shortcut
    

    Nun können Sie in doc_shortcut wechseln, als wäre es das Verzeichnis documents selbst:

    cd doc_shortcut
    

    Überprüfen Sie Ihren Speicherort. Beachten Sie, dass pwd standardmäßig den Pfad des symbolischen Links anzeigt:

    pwd
    

    Ausgabe: /home/labex/project/doc_shortcut

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

    pwd -P
    

    Ausgabe: /home/labex/project/documents

    Wechseln Sie nun zurück zu ~/project:

    cd ~/project
    
  • Dangling symbolic links (lose symbolische Links): Wenn die ursprüngliche reguläre Datei (das Ziel) gelöscht wird, existiert der symbolische Link weiterhin, verweist aber auf eine fehlende Datei. Dies wird als "dangling 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 in Rot oder einer anderen Farbe (abhängig von der Konfiguration Ihres Terminals) angezeigt wird, um anzuzeigen, dass es defekt ist:

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

    Wenn Sie versuchen, den dangling symbolischen Link mit cat zu lesen, schlägt dies fehl:

    cat sym_link.txt
    

    Ausgabe:

    cat: sym_link.txt: No such file or directory
    

Räumen wir abschließend die in diesem Schritt erstellten Dateien und Links auf.

rm hard_link.txt sym_link.txt doc_shortcut
ls

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

Dateien effizient mit Shell-Expansionen auswählen

In diesem Schritt lernen Sie, wie Sie Dateien und Verzeichnisse effizient mithilfe verschiedener Shell-Erweiterungsfunktionen (Shell Expansions) auswählen können, darunter Musterabgleich (Globbing), Tilde-Expansion, Brace-Expansion, Variablenerweiterung und Befehlssubstitution. Diese Funktionen ermöglichen es Ihnen, Operationen auf mehreren Dateien mit prägnanten 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-Expansionen 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 erstellten Dateien zu sehen:

ls data

Sie sollten 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

Musterabgleich (Globbing)

Musterabgleich, auch bekannt als Globbing, ermöglicht die Auswahl von Dateien basierend auf Mustern unter Verwendung spezieller Zeichen, sogenannter Metazeichen.

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

Probieren wir einige Beispiele im Verzeichnis data aus.

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

    ls data/*.txt
    

    Ausgabe:

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

    Listen Sie alle Dateien auf, die file im 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 Zeichenklassen: Listen Sie Dateien auf, die mit report_ beginnen und entweder 2023 oder 2024 im Namen haben:

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

    Ausgabe:

    data/report_2023.txt  data/report_2024.log
    
  4. Verwendung von {} für Brace Expansion: Listen Sie Dateien auf, die mit file beginnen und auf .txt oder .log enden:

    ls data/file*.{txt,log}
    

    Ausgabe:

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

Tilde-Expansion ~

Das Tilde-Zeichen (~) wird zum Home-Verzeichnis des aktuellen Benutzers (/home/labex) erweitert. Wenn ihm ein Benutzername folgt, wird es zum Home-Verzeichnis dieses Benutzers erweitert.

echo ~

Ausgabe:

/home/labex
echo ~root

Ausgabe:

/root
echo ~/project/data

Ausgabe:

/home/labex/project/data

Brace Expansion {}

Die Brace Expansion generiert beliebige Zeichenfolgen. Sie ist nützlich, um Listen von Dateien oder Verzeichnissen mit ähnlichen Namen zu erstellen, ohne jeden einzelnen Namen eintippen zu müssen.

  1. Kommagetrennte Liste: Erstellen Sie die Dateien report_jan.txt, report_feb.txt, report_mar.txt:

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

    Listen Sie diese auf:

    ls data/report_*.txt
    

    Ausgabe:

    data/report_2023.txt  data/report_jan.txt  data/report_feb.txt  data/report_mar.txt
    
  2. Zahlen- oder Buchstabenbereich: Erstellen Sie die Dateien doc1.txt, doc2.txt, doc3.txt:

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

    Listen Sie diese 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 diese 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=Wert und greifen auf ihren Wert mit $VARNAME oder ${VARNAME} 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 wird der Inhalt des Verzeichnisses data sein.

Befehlssubstitution (Command Substitution)

Die Befehlssubstitution ermöglicht es Ihnen, die Ausgabe eines Befehls als Teil eines anderen Befehls zu verwenden. Dies geschieht, indem der Befehl in $(command) oder Backticks `command` eingeschlossen wird. 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 wird ähnlich sein 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 data-Verzeichnis."

Die Ausgabe wird ähnlich sein wie:

There are 19 items in the data directory.

Argumente vor Expansion schützen

Manchmal möchten Sie verhindern, dass die Shell bestimmte Zeichen erweitert. Dies können Sie wie folgt erreichen:

  1. Backslash (\): Maskiert 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 jegliche Shell-Expansion 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-Expansionen, erlauben jedoch Variablenerweiterung ($VAR) und Befehlssubstitution ($()).

    MY_DATE=$(date +%Y-%m-%d)
    echo "Heute ist der $MY_DATE."
    

    Ausgabe:

    Heute ist der 2024-03-07.
    

    Vergleich mit einfachen Anführungszeichen:

    echo 'Heute ist $MY_DATE.'
    

    Ausgabe:

    Heute ist $MY_DATE.
    

Zum Schluss räumen wir das Verzeichnis data auf.

rm -r data

Zusammenfassung

In diesem Lab haben Sie grundlegende Befehlszeilenwerkzeuge zur Verwaltung von Dateien und Verzeichnissen in RHEL kennengelernt. Sie haben mit pwd begonnen, um Ihr aktuelles Arbeitsverzeichnis zu identifizieren, und mit 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 haben Sie sich mit cd im Dateisystem bewegt und mit touch neue Dateien erstellt.

Darüber hinaus haben Sie sich mit der Organisation Ihres Dateisystems vertraut gemacht, indem Sie mkdir zum Erstellen von Verzeichnissen, cp zum Kopieren von Dateien und Verzeichnissen, mv zum Verschieben oder Umbenennen und rm zum Löschen verwendet haben. Das Lab behandelte auch die Erstellung von Hard- und symbolischen Links mit ln sowie die effiziente Auswahl von Dateien mithilfe von Shell-Expansionen, wodurch Ihre Fähigkeit zur effektiven Verwaltung von Dateien und Verzeichnissen über die Befehlszeile verbessert wurde.