image: working-with-files.webp

Da­tei­en und Verzeichnisse

In diesem Kapitel lernst du, wie du mit Da­tei­en und Ver­zeich­nis­sen im Ter­mi­nal arbeiten kannst. Wir werden einige der wich­tig­sten Befehle ken­nen­ler­nen, die wir verwenden können, um Da­tei­en und Verzeichnisse zu erstellen, zu löschen, zu kopieren, zu verschieben und zu bearbeiten. Wir werden auch lernen, wie wir den Inhalt von Da­tei­en anzeigen und analysieren können.

Stelle zuerst sicher, dass du keinen Ordner geöffnet hast. Um sicherzugehen, drücke einfach den Shortcut für »Ordner schließen«: StrgK und dann F. Dein Work­space sollte jetzt ungefähr so aussehen:

Schließe die linken Seitenleiste, indem du StrgB drückst, um mehr Platz zu haben. Öffne als nächstes das Ter­mi­nal, indem du den Shortcut StrgJ drückst. Dein Work­space sollte jetzt ungefähr so aussehen:

Du kannst das Ter­mi­nal auch maximieren, indem du auf den Pfeil in der rechten oberen Ecke des Ter­mi­nals klickst. Die linke Seitenleiste kannst du jederzeit mit StrgB ein- und ausblenden.

Alle Befehle im Ter­mi­nal einzugeben anstatt durch Mausklick, wird auch »Arbeiten auf der Kom­man­do­zei­le« genannt. Im Ter­mi­nal siehst du nun die Eingabeaufforderung, auch Prompt genannt, der dir u.a. anzeigt, in welchem Verzeichnis du dich befindest. Der Prompt sieht in etwa so aus:

abc@7a93efd91905:~$

Lass dich von dem Prompt nicht verwirren. Der Teil abc vor dem @ ist dein Benutzername, der Teil 7a93efd91905 nach dem @ ist der Name deines Com­puters, und der Teil nach dem : ist das aktuelle Verzeichnis. In diesem Fall ist das aktuelle Verzeichnis ~, welches die Abkürzung für dein Home-Verzeichnis ist. Das $ am Ende des Prompts zeigt an, dass du als normaler Benutzer angemeldet bist. Wenn du als Administrator angemeldet wärst, würde das $ durch ein # ersetzt.

Gib folgenden Befehl ein und drücke die Eingabetaste:

echo "Hello, World!"

Wenn du die Ausgabe Hello, World! siehst, hast du alles richtig gemacht. Herzlichen Glückwunsch!

Jetzt können wir anfangen, mit Da­tei­en und Ver­zeich­nis­sen zu arbeiten.

1. Beispieldateien herunterladen

Gib folgenden Befehl ein, um eine Datei aus dem Internet herunterzuladen, die ein paar Beispieldateien enthält:

wget https://github.com/specht/workspace-files/raw/main/working-with-files.tar.gz

Die Ausgabe sollte in etwa so aussehen:

Lass dich nicht davon stören, dass die Ausgabe so umfangreich ist. Der Grund dafür ist, dass der Webserver die Anfrage auf eine andere URL umleitet (»302 Found«) und wget dieser Umleitung folgt. Die eigentliche Datei wird dann heruntergeladen (»200 OK«) und die Ausgabe von wget zeigt dir den Fortschritt an.

Das Programm wget können wir dazu verwenden, um Da­tei­en aus dem Internet herunterzuladen. Die Datei wird standardmäßig im aktuellen Verzeichnis gespeichert. Schau nach, ob die Datei angekommen ist, indem du den Befehl ls (kurz für »list«) eingibst:

Viele Befehle auf der Kom­man­do­zei­le haben Optionen, die stets hinter dem Befehlsnamen mit einem - beginnen. Probiere hier den Befehl ls -l (für »long«), um dir mehr Details anzeigen zu lassen:

Du siehst nun u.a., wie groß die Datei ist. Nutze den Befehl ls -lh (für »long human-readable«), um die Größe in einer besser lesbaren Form zu sehen:

Die Datei ist also fast 10 MB groß. Die Endung .tar.gz in unserem Beispiel zeigt an, dass es sich um ein komprimiertes Archiv handelt. Wir können es mit dem Befehl tar entpacken:

tar xvf working-with-files.tar.gz

Die Optionen xvf stehen für extract, verbose und file. Das bedeutet, dass wir das Archiv entpacken (x für »extract«), den Fortschritt anzeigen (v für »verbose«) und als nächste Option den Da­tei­na­men angeben (f für »file«). Wenn du den Befehl ausführst, solltest du eine Meldung sehen, die dir anzeigt, welche Da­tei­en entpackt wur­den:

Gib noch einmal ls -l ein, um zu sehen, was sich nun in deinem Verzeichnis befindet:

Du solltest jetzt zusätzlich zur heruntergelandenen Archivdatei ein Verzeichnis namens working-with-files sehen. Du erkennst an dem d am Anfang der Zeile, dass es sich um ein Verzeichnis handelt.

Um dein Ter­mi­nal aufzuräumen, kannst du den Befehl clear verwenden oder einfach die Tastenkombination StrgL drücken.

2. Überblick verschaffen

In diesem Abschnitt lernst du die Befehle pwd, cd, ls und file kennen.

Gib den Befehl pwd ein und drücke die Eingabetaste:

Der Befehl pwd steht für »print working directory« und zeigt dir das aktuelle Verzeichnis an, in dem du dich gerade befindest. Das aktuelle Verzeichnis wird auch im Prompt angezeigt – da im Work­space das Verzeichnis /workspace dein Home-Verzeichnis ist, wird es im Prompt mit ~ abgekürzt.

Wechsle nun in das entpackte Verzeichnis, indem du cd working-with-files eingibst und die Eingabetaste drückst. Du solltest nun im Verzeichnis working-with-files sein, was du leicht am Prompt erkennen kannst.

Wechsle wieder in das übergeordnete Verzeichnis, indem du cd .. eingibst und die Eingabetaste drückst. Du solltest nun wieder im Home-Verzeichnis sein.

Die Tab-Ergänzung verwenden

Ein nützliches Feature des Ter­mi­nals ist die Tab-Ergänzung. Wenn du anfängst, einen Befehl oder einen Da­tei­na­men einzugeben, kannst du die Tab-Taste drücken, um den Befehl oder den Da­tei­na­men automatisch zu vervollständigen. Wenn es mehrere Möglichkeiten gibt, kannst du die Tab-Taste zweimal drücken, um eine Liste der verfügbaren Optionen zu sehen.

Wechsle wieder in das Verzeichnis, aber gib diesmal nur cd w ein und drücke die Tab-Taste. Das Ter­mi­nal vervollständigt den Befehl automatisch, weil es nur eine mögliche Option für einen Verzeichniswechsel gibt, die mit w beginnt.

Lass dir anschließend die Inhalte des Verzeichnisses mit ls -l anzeigen:

Es gibt noch eine versteckte Datei in diesem Verzeichnis, die du dir mit dem Befehl ls -la (für »long all«) anzeigen lassen kannst. Versteckte Da­tei­en beginnen unter Linux mit einem Punkt.

Gib nun den Befehl file * ein und drücke die Eingabetaste. Der Stern * ist ein Platzhalter, der für alle Da­tei­en im aktuellen Verzeichnis steht. Der Befehl file zeigt den Dateityp einer Datei an und mit file * können wir also den Dateityp aller Da­tei­en im aktuellen Verzeichnis anzeigen.

Oft ist der Dateityp einer Datei schon anhand der Da­tei­endung zu erkennen. Das Programm file kann jedoch auch den Dateityp von Da­tei­en ohne Da­tei­endung bestimmen und gibt einige zusätzliche Informationen aus.

Wir sehen die folgenden Da­tei­en:

alice.txt eine normale Textdatei
jay.webm eine Videodatei im WebM-Format
music-releases.tar.bz2 ein komprimiertes Archiv im Bzip2-Format
stallman.jpg eine Bilddatei im JPEG-Format mit sehr vielen Metadaten
zork.zip ein komprimiertes Archiv im ZIP-Format

In den folgenden Abschnitten wirst du weitere Befehle ken­nen­ler­nen und anhand dieser Da­tei­en ausprobieren können.

3. Da­tei­en anzeigen

In diesem Abschnitt lernst du die Befehle cat, less und hd kennen.

Gib cat alice.txt ein und drücke die Eingabetaste. Der Befehl cat steht für »concatenate« und zeigt den Inhalt einer Datei an. Die Datei alice.txt enthält den Text des Buches »Alice im Wunderland« von Lewis Carroll. Der Text stammt von Project Gutenberg und da der ganze Text im Ter­mi­nal an dir vorbei rauscht, siehst du auch nur die letzten Zeilen, die auf die Quelle des Textes hinweisen:

Um den Text Seite für Seite zu lesen und die Möglichkeit zum scrollen zu bekommen, kannst du den Befehl less verwenden. Gib less alice.txt ein und drücke die Eingabetaste. Der Befehl less zeigt den Inhalt einer Datei an und er­mög­licht es dir, durch den Text zu scrollen. Du kannst die Pfeiltasten oder Bild↑Bild↓ sowie Pos1 und Ende verwenden, um durch den Text zu navigieren. Drücke die Taste Q (für »quit«), um less zu beenden.

Hast du daran gedacht, die Tab-Taste zu verwenden, um den Da­tei­na­men zu vervollständigen?

Wenn wir less mit den anderen Da­tei­en, die keinen Textdateien sind, verwenden, sehen wir, dass less nicht für alle Dateitypen geeignet ist. Gib less jay.webm ein und drücke die Eingabetaste. Du siehst eine Warnung, dass jay.webm keine Textdatei ist und deshalb vermutlich nicht korrekt angezeigt werden kann:

Wenn du hier mit y bestätigst, wird der Inhalt der Datei trotzdem angezeigt, aber es wird nicht lesbar sein:

Drücke die Taste Q, um less zu beenden.

Mit less stallman.jpg siehst du, dass less bei Bildern zumindest ein paar Metadaten anzeigen kann:

Wenn du less auf die Archivdateien anwendest, be­kommst du eine Vorschau der Da­tei­en, die sich im Archiv befinden:

Um die einzelnen, tatsächlichen Bytes zu sehen, die in einer Datei gespeichert sind, kannst du den Befehl hd verwenden. Gib hd alice.txt | less ein und drücke die Eingabetaste. Der Befehl hd steht für »hexdump« und zeigt den Inhalt einer Datei in hexadezimaler Dar­stell­ung an. Du siehst die Bytes, die in der Datei gespeichert sind, und kannst so den Inhalt der Datei auf Byte-Ebene analysieren. Du kannst nun durch die Ausgabe von hd navigieren. Drücke die Taste Q, um das Programm zu beenden.

Mit dem Zeichen | kann man mehrere Befehle in einer »Pipeline« miteinander verknüpfen. Die Ausgabe des ersten Befehls wird als Eingabe des zweiten Befehls ver­wen­det. So können wir z. B. die Ausgabe von hd an die Eingabe von less weiterleiten, um die Ausgabe von hd seitenweise zu betrachten. Auf diese Weise lassen sich viele Befehle miteinander kombinieren.

Im Hexdump siehst du immer 16 Bytes in einer Zeile. Die erste Spalte zeigt den Offset in der Datei an (hexadezimal), die zweite Spalte zeigt die hexadezimalen Werte der 16 Bytes an und die dritte Spalte zeigt die ASCII-Zeichen an, die den hexadezimalen Werten entsprechen. Wenn ein Byte nicht druckbar ist, wird ein Punkt angezeigt.

In der folgenden Tabelle siehst du, welche Werte welchem ASCII-Zeichen entsprechen:

Ignoriere die rechte Hälfte der Tabelle – die Werte von 128 bis 255 sind nicht standardisiert und können je nach Zeichensatz unterschiedlich sein (abgebildet ist eine ASCII-Tabelle für MS-DOS von 1990). Die linke Hälfte (0 bis 127) ist jedoch standardisiert und wird von allen modernen Systemen un­ter­stützt, wo­bei die Zeichen von 0 bis 31 sowie 127 nicht druckbar sind.

Wenn du dir den Hexdump genau anschaust, findest du z. B. Leerzeichen (20) und Zeilenumbrüche (0d 0a), auch CRLF genannt. Hieran erkennst du, dass es sich um eine Win­dows-Textdatei handelt. Linux-Textdateien verwenden nur ein LF (0a) als Zeilenumbruch (trotzdem kann Linux mit beiden Arten von Textdateien umgehen).

Du kannst die Da­tei­en natürlich auch in Visual Studio Code öffnen, indem du die linke Seitenleiste mit StrgB einblendest und dann auf »Open Folder« klickst (oder einfach die Abkürzung StrgK+O verwendest). Wähle das Verzeichnis working-with-files aus und klicke auf »OK«.

Links siehst du jetzt die Da­tei­en und kannst sie (bis auf die Archivdateien) öffnen, um ihren Inhalt zu sehen.

Schließe anschließend wieder alle Da­tei­en und öffne das Ter­mi­nal, um mit den nächsten Befehlen fortzufahren.

Schließe die linke Seitenleiste und maximiere dein Ter­mi­nal, um mehr Platz zu haben.

Nachdem wir uns nun einen Überblick verschafft und uns die Da­tei­en angeschaut haben, werden wir im nächsten Abschnitt sehen, wie wir Da­tei­en erstellen und bearbeiten können.

4. Da­tei­en erstellen und bearbeiten

In diesem Abschnitt lernst du die Befehle touch, nano, vim und emacs kennen.

Gib den Befehl touch hello.txt ein und drücke die Eingabetaste. Der Befehl touch erstellt eine leere Datei mit dem angegebenen Namen. Gib ls -l ein, um zu sehen, dass die Datei hello.txt erstellt wur­de:

Da die Datei keinen Inhalt hat, beträgt ihre Größe erwartungsgemäß 0 Byte. Wenn du nach einer oder mehreren Minuten noch einmal touch hello.txt eingibst, siehst du, dass sich danach der Zeitstempel der Datei geändert hat:

Der Befehl touch wird oft ver­wen­det, um den Zeitstempel einer Datei zu aktualisieren, ohne den Inhalt zu verändern. Wenn die Datei nicht existiert, wird sie erstellt.

Um einen vorherigen Befehl zu suchen, kannst du die Pfeiltasten und verwenden und anschließend die Eingabetaste drücken, um den Befehl erneut auszuführen. So vermeidest du wiederholte Eingaben.

Es gibt verschiedene Text-Editoren für Linux, mit denen du Da­tei­en im Ter­mi­nal bearbeiten kannst. Die gebräuchlichsten Editoren sind nano, vim und emacs. nano ist der einfachste Editor und wird oft für Anfänger empfohlen. vim und emacs sind mächtige Editoren, die viele Funk­tio­nen bieten, aber auch eine steile Lernkurve haben. Wir werden uns alle drei Editoren kurz ansehen.

Da­tei­en bearbeiten mit nano

Gib den Befehl nano hello-nano.txt ein, um eine neue Datei zu öffnen. Du kannst nun Text eingeben und relativ intuitiv im Text navigieren. Wenn du fertig bist, speichere deinen Text mit StrgO (für »write out«) und bestätige mit der Eingabetaste. Beende nano mit StrgX (für »exit«).

Da­tei­en bearbeiten mit vim

Gib den Befehl vim hello-vim.txt ein, um eine neue Datei zu öffnen. vim hat verschiedene Modi, die du mit der Taste Esc wechseln kannst. Im Befehlsmodus kannst du Befehle eingeben, um Text zu bearbeiten. Im Einfügemodus kannst du Text eingeben. Um in den Einfügemodus zu wechseln, drücke i (für »insert«). Um den Eingabemodus zu verlassen und zum Befehlsmodus zurückzukehren, drücke Esc. Um vim zu beenden, wechsle in den Befehlsmodus und gib :q ein. Wenn du deine Änderungen speichern möchtest, gib :w ein. Wenn du vim beenden und deine Änderungen speichern möchtest, gib :wq ein.

Für die oben stehende Eingabe musst du also folgende Tasten drücken:

  1. i (für »insert«)
  2. »Hello from vim« eingeben
  3. Esc (um in den Befehlsmodus zu wechseln)
  4. :, w und Enter, um die Datei zu speichern
  5. :, q und Enter, um vim zu beenden

Falls du mehr über vim lernen und den Umgang mit diesem Editor trainieren möchtest, kannst du den Befehl vimtutor im Ter­mi­nal eingeben, um ein inter­ak­ti­ves Tutorial zu starten, für das du ca. 30 Minuten einplanen solltest:

vimtutor lässt sich, genau wie vim selbst, mit :, q und Enter beenden.

Da­tei­en bearbeiten mit emacs

Gib den Befehl emacs hello-emacs.txt ein, um eine neue Datei zu öffnen. Im Gegensatz zu vim kannst du hier einfach anfangen, Text einzugeben. Wenn du fertig bist, speichere deine Änderungen mit StrgX und dann StrgS (für »save«). Um emacs zu beenden, drücke StrgX und dann StrgC.

5. Da­tei­en analysieren, durchsuchen und filtern

In diesem Abschnitt lernst du die Befehle wc, grep, sort, uniq, head und tail kennen.

Gib den Befehl wc alice.txt ein und drücke die Eingabetaste. Der Befehl wc steht für »word count« und zeigt dir die Anzahl der Zeilen, Wörter und Bytes in einer Datei an:

Die Datei alice.txt enthält also 3.756 Zeilen, 29.564 Wörter und 174.355 Bytes. Oft wird wc dazu ver­wen­det, um die Anzahl der Zeilen in einer Datei zu zählen. Wenn du nur die Anzahl der Zeilen wissen möchtest, kannst du den Befehl wc -l alice.txt (-l für »lines«) verwenden:

Verwende grep, um nach einem bestimmten Muster in einer Datei zu suchen. Gib grep everybody alice.txt ein und drücke die Eingabetaste. Der Befehl grep sucht nach dem Muster »everybody« in der Datei alice.txt und zeigt die Zeilen an, in denen das Muster gefunden wur­de:

Mit der Option -i können wir grep anweisen, die Groß- und Kleinschreibung zu ignorieren. Gib grep -i everybody alice.txt ein und drücke die Eingabetaste:

Wir haben nun ein paar weitere Stellen gefunden. Wenn du die Zeilennummer sehen möchtest, in denen das Muster gefunden wur­de, kannst du die Option -n verwenden:

grep ist ein sehr mächtiges Programm mit einer Vielzahl von Optionen. Du kannst z. B. reguläre Ausdrücke verwenden, um nach komplexeren Mustern zu suchen. Gib man grep ein, um die manpage von grep zu lesen und mehr über die verschiedenen Optionen zu erfahren.

Wir wollen nun alle Wörter aus der Datei alice.txt extrahieren. Gib dazu den folgenden Befehl ein:

grep -o -E "[A-Za-z]+" alice.txt

Der reguläre Ausdruck [A-Za-z]+ sucht nach Wörtern, die aus Groß- und Kleinbuchstaben bestehen. Du siehst, wie der gesamte Text Wort für Wort ausgegeben wird:

Um eine lange Ausgabe seitenweise zu betrachten, kannst du an jeden Befehl einfach | less anhängen.

Nutze sort, um die Ausgabe zu sortieren:

grep -o -E "[A-Za-z]+" alice.txt | sort

Jetzt sind die Wörter alphabetisch sortiert:

Um Duplikate zu entfernen, können wir uniq verwenden:

grep -o -E "[A-Za-z]+" alice.txt | sort | uniq

Dadurch wur­den aufeinanderfolgende Duplikate entfernt und wir sehen nun eine alphabetisch sortierte Liste aller Wörter, die im Text vorkommen:

Allerdings gibt es hinsichtlich der Groß- und Kleinschreibung noch Duplikate (»you«, »You«, »YOU«). Um auch diese zu entfernen, können wir die Option -i von uniq verwenden (für »ignore case«):

grep -o -E "[A-Za-z]+" alice.txt | sort | uniq -i

Nun ist unsere Liste fertig:

Wir können nun die Anzahl der Wörter in der Liste zählen:

grep -o -E "[A-Za-z]+" alice.txt | sort | uniq -i | wc -l

Die Ausgabe zeigt, dass es 3.002 verschiedene Wörter in der Datei alice.txt gibt.

Wir können unser Ergebnis auch in einer Datei speichern, indem wir die Ausgabe der gesamten Pipeline in eine Datei umleiten:

grep -o -E "[A-Za-z]+" alice.txt | sort | uniq -i > words.txt

Es gibt noch zwei weitere Befehle, die nützlich sind, wenn man nur den Anfang oder das Ende einer Datei oder einer Ausgabe sehen möchte. Nutze head, um die ersten 10 Zeilen einer Datei oder einer Ausgabe zu sehen:

head words.txt

Analog dazu kannst du tail verwenden, um die letzten 10 Zeilen einer Datei oder einer Ausgabe zu sehen:

tail words.txt

tail wird in Verbindung mit der Option -f (für »follow«) oft ver­wen­det, um eine Datei in Echtzeit zu beobachten. Wenn du z. B. eine Logdatei überwachen möchtest, kannst du tail -f logfile.log verwenden, um die letzten Zeilen der Datei anzuzeigen und neue Zeilen anzuzeigen, sobald sie hinzugefügt werden.

6. Da­tei­en archivieren und extrahieren

In diesem Abschnitt lernst du die Befehle tree, unzip, tar, gzip und bzip2 kennen.

Gib den Befehl tree ein, um eine Baumstruktur des aktuellen Verzeichnisses anzuzeigen.

Im Moment unterscheidet sich Ausgabe von tree noch nicht sehr von der Ausgabe von ls. Das liegt daran, dass wir uns in einem flachen Verzeichnis ohne Unterverzeichnisse befinden. Wenn wir uns in einem tiefer verschachtelten Verzeichnis befinden, wird die Ausgabe von tree nützlicher.

Nutze unzip, um das Archiv zork.zip zu entpacken:

unzip zork.zip

unzip entpackt alle Da­tei­en aus dem Archiv zork.zip in das aktuelle Verzeichnis.

Wenn du nun wieder tree eingibst und nach oben scrollst, siehst du, dass das Verzeichnis zork-master mit einigen Da­tei­en hinzugefügt wur­de:

Wechsle in das Verzeichnis zork-master und gib ls ein, um zu sehen, was sich darin befindet:

cd zork-master
ls

Lass dir den Inhalt der Datei readme.txt anzeigen:

cat readme.txt

Es handelt sich also um ein Spiel. Da es in der Pro­gram­mier­spra­che C geschrieben ist und es ein Makefile gibt, können wir es leicht kompilieren, um ein ausführbares Programm zu erhalten.

make

Ein paar Sekunden und wenige Warnungen später haben wir ein ausführbares Programm namens zork:

Du kannst das Spiel starten, indem du ./zork eingibst:

Anders als unter Win­dows kannst du hier nicht einfach zork eingeben, um das Spiel zu starten, da das aktuelle Verzeichnis nicht im Suchpfad enthalten ist. Du musst also explizit angeben, dass du die Datei zork im aktuellen Verzeichnis (welches mit . bezeichnet wird) ausführen möchtest.

Falls du Zork beenden möchtest, bevor du das Spiel durchgespielt hast, kannst du dies durch die Eingabe von quit erreichen.

Verlasse nun wieder das Verzeichnis zork-master, indem du cd .. eingibst. Wir werden nun das Archiv music-releases.tar.bz2 entpacken:

tar xvf music-releases.tar.bz2

Nach dem Entpacken siehst du, dass ein neues Verzeichnis music-releases hinzugefügt wur­de. Die Ausgabe von tree zeigt dir die Baumstruktur des Verzeichnisses:

Es handelt sich um ein Verzeichnis mit mehreren Unterverzeichnissen, in dem sich Alben und Singles / EPs verschiedener Künstlerinnen und Künstler bzw. Bands, nach Land und Jahr sortiert, befinden.

Wechsle in das Verzeichnis und lass dir den Inhalt anzeigen:

cd music-releases
ls -l

Dir fällt sicherlich auf, dass einige Verzeichnisnamen in Anführungszeichen stehen. Das liegt daran, dass sie Leerzeichen enthalten. Wenn du einen Datei- oder Verzeichnisnamen als Argument an einen Befehl übergibst und der Name Leerzeichen enthält, musst du den Namen in Anführungszeichen setzen, damit der Befehl den Namen als ein Argument er­kennt.

Wechsle in das Verzeichnis Japan/Radwimps (verwende wie immer die Tab-Taste) und lass dir den Inhalt anzeigen:

cd Japan/Radwimps/
ls -l

Eine kurze Information zur Geschichte der Band findest du in der Datei Radwimps.txt, die du dir mit less anzeigen lassen kannst:

less Radwimps.txt

Schau auch in ein paar Alben rein, um ein Gefühl für die Tab-Ergänzung zu bekommen:

less Albums/2016\ -\ 君の名は。.txt

Lass dir nun das Album »Die Bestie in Menschengestalt« der Band »Die Ärzte« anzeigen. Wenn du das geschafft hast, hast du die Navigation im Dateisystem und die Tab-Ergänzung gemeistert!

Gehe nun wieder ins Verzeichnis working-with-files zurück und lass dir die Größe der Datei alice.txt anzeigen:

cd ~/working-with-files
ls -l alice.txt

Die Datei ist 174.355 Bytes groß. Wir können sie komprimieren, um Speicherplatz zu sparen. Dazu verwenden wir gzip:

gzip alice.txt
ls -l alice.txt.gz

gzip hat die Datei alice.txt komprimiert und in die Datei alice.txt.gz umgewandelt. Die Datei ist jetzt nur noch 61.204 Bytes groß und belegt damit nur noch 35% des ur­sprüng­lichen Speicherplatzes:

Um die Datei wieder zu entpacken, verwenden wir gzip -d:

gzip -d alice.txt.gz

Die Option -d steht für »decompress« und entpackt die Datei alice.txt.gz wieder in die Datei alice.txt. Wenn du dir die Größe der Datei alice.txt ansiehst, wirst du feststellen, dass sie wieder 174.355 Bytes groß ist:

Wir können die Datei auch mit bzip2 komprimieren:

bzip2 alice.txt
ls -l alice.txt.bz2

Wie du siehst, hast bzip2 eine noch kleinere Datei erzeugt, die nur 48.925 Bytes groß ist und somit nur noch 28% des ur­sprüng­lichen Speicherplatzes belegt. Um die Datei wieder zu entpacken, verwenden wir bzip2 -d:

bzip2 -d alice.txt.bz2
ls -l alice.txt

Die Datei ist wieder 174.355 Bytes groß.

7. Verzeichnisse analysieren und durchsuchen

In diesem Abschnitt lernst du die Befehle du und find kennen.

Gib den Befehl du -h ein und drücke die Eingabetaste. Der Befehl du steht für »disk usage« und zeigt dir die Größe eines Verzeichnisses an. Die Option -h steht für »human-readable« und zeigt die Größe in einer besser lesbaren Form an:

An der letzten Zeile erkennst du, dass das ganze Verzeichnis mit allen Unterverzeichnissen insgesamt 30 MB groß ist. Falls dich interessiert, wie viel Speicherplatz jedes einzelne Unterverzeichnis belegt, kannst du die Option -d (für »depth«) verwenden, um die Tiefe der Analyse anzugeben. Gib du -h -d 2 ein, um die Größen der Unterverzeichnisse bis zu einer Tiefe von 2 anzuzeigen:

Man sieht hier sehr gut, dass die Unterverzeichnisse United States und United Kingdom am meisten Speicherplatz belegen.

Wir können den Befehl grep, den wir weiter oben schon kennen gelernt haben, auch auf Verzeichnisse anwenden. Wechsle nun wieder ins Verzeichnis music-releases, und verwende den Befehl grep, um alle Da­tei­en zu finden, die das Wort »welcome« enthalten:

cd music-releases
grep -ri welcome .

Dabei stehen die Optionen -r für »recursive« (rekursiv) und -i für »ignore case« (Groß- und Kleinschreibung ignorieren). Der Punkt . steht für das aktuelle Verzeichnis. Es bedeutet also: untersuche alle Da­tei­en im aktuellen Verzeichnis und allen Unterverzeichnissen. Wenn du den Befehl ausführst, siehst du alle Da­tei­en, die das Wort »welcome« enthalten:

8. Da­tei­en und Verzeichnisse kopieren, verschieben und löschen

In diesem Abschnitt lernst du die Befehle mkdir, cp, mv, rmdir und rm kennen.

Gehe nun wieder ins Verzeichnis working-with-files zurück:

cd ~/working-with-files

Nutze den Befehl mkdir, um ein neues Verzeichnis namens sandbox zu erstellen:

mkdir sandbox

Wenn du ein Verzeichnis erstellen möchtest, das selbst ein Unterverzeichnis ist, kannst du die Option -p verwenden, um sicherzustellen, dass alle übergeordneten Verzeichnisse ebenfalls erstellt werden:

mkdir -p sandbox/nested/nothing/to/see/here

Nutze den Befehl cp, um Da­tei­en zu kopieren. Der Befehl benötigt zwei Argumente: die Quelle und das Ziel.

Möglichkeit 1: eine Datei in ein anderes Verzeichnis kopieren

Du kannst eine Datei aus dem aktuellen Verzeichnis in ein anderes Verzeichnis kopieren. Kopiere die Datei jay.webm in das Verzeichnis sandbox:

cp jay.webm sandbox

Die Datei jay.webm wur­de in das Verzeichnis sandbox kopiert:

Möglichkeit 2: eine Datei in das aktuelle Verzeichnis kopieren

Geh in das Verzeichnis sandbox und kopiere die Datei alice.txt hinein:

cd sandbox
cp ../alice.txt .
Der Punkt . steht für das aktuelle Verzeichnis. Wenn du also eine Datei in das aktuelle Verzeichnis kopieren möchtest, kannst du den Punkt als Ziel angeben.

Die Datei alice.txt wur­de ebenfalls in das Verzeichnis sandbox kopiert:

Wenn du versuchst, ein Verzeichnis zu kopieren, erhältst du eine Fehlermeldung:

cp ../zork-master .

Um ein Verzeichnis zu kopieren, musst du die Option -r (für »recursive«) verwenden:

cp -r ../zork-master .

Das Verzeichnis zork-master wur­de in das Verzeichnis sandbox kopiert:

Nutze den Befehl mv, um Da­tei­en und Verzeichnisse zu verschieben. Der Befehl mv benötigt ebenfalls zwei Argumente: die Quelle und das Ziel. Der Unterschied zu cp besteht darin, dass mv die Datei oder das Verzeichnis an den neuen Speicherort verschiebt, während cp eine Kopie erstellt. Verschiebe die Datei jay.webm in das Verzeichnis nested:

mv jay.webm nested

Du siehst nun, dass die Datei jay.webm nicht mehr im Verzeichnis sandbox ist, sondern im Verzeichnis sandbox/nested:

Du kannst mv auch verwenden, um Da­tei­en umzubenennen. Versuche, die Datei alice.txt in alice-in-wonderland.txt umzubenennen:

mv alice.txt alice-in-wonderland.txt

Du siehst nun, dass die Datei alice.txt in alice-in-wonderland.txt umbenannt wur­de:

Nutze den Befehl rmdir, um ein leeres Verzeichnis zu löschen. Der Befehl rmdir löscht nur leere Verzeichnisse. Bevor wir diesen Befehl testen können, legen wir uns ein leeres Verzeichnis namens empty an:

mkdir empty

Nutze rmdir, um das Verzeichnis empty zu löschen:

rmdir empty

Wie du sehen kannst, ist das Verzeichnis empty nicht mehr vorhanden:

Versuche, das Verzeichnis zork-master mit rmdir zu löschen:

rmdir zork-master

Erwartungsgemäß erhältst du eine Fehlermeldung, da das Verzeichnis nicht leer ist:

Du kannst rmdir also dann nutzen, wenn du ein Verzeichnis löschen möchtest, von dem du ausgehst, dass es leer ist. Falls das Verzeichnis doch nicht leer sein sollte, erhältst du eine Fehlermeldung.

Nutze den Befehl rm, um Da­tei­en und Verzeichnisse zu löschen. Der Befehl rm benötigt ein Argument: die Datei oder das Verzeichnis, das gelöscht werden soll.

Achtung: Der Befehl rm löscht Da­tei­en und Verzeichnisse dauerhaft, ohne sie in den Papierkorb zu verschieben. Das Konzept des Papierkorbs gibt es im Ter­mi­nal nicht. Sei also vorsichtig, wenn du rm verwendest, und überlege dir gut, ob du wirklich Da­tei­en oder Verzeichnisse löschen möchtest.

Lösche die Datei alice-in-wonderland.txt:

rm alice-in-wonderland.txt

Die Datei alice-in-wonderland.txt wur­de gelöscht:

Wenn du versuchst, ein Verzeichnis zu löschen, musst du wie bei cp die Option -r (für »recursive«) verwenden:

rm -r zork-master

9. Zusammenfassung

In diesem Kapitel hast du gelernt, wie du im Ter­mi­nal mit Da­tei­en und Ver­zeich­nis­sen arbeiten kannst. Du hast gesehen, wie du Da­tei­en und Verzeichnisse erstellen, bearbeiten, analysieren, durchsuchen, filtern, komprimieren, extrahieren, kopieren, verschieben und löschen kannst. Du hast auch gelernt, wie du Da­tei­en und Verzeichnisse analysieren und durchsuchen kannst. Du hast die wich­tig­sten Befehle kennengelernt, die du benötigst, um effizient mit Da­tei­en und Ver­zeich­nis­sen im Ter­mi­nal zu arbeiten.