Was steht in einer Konfigurationsdatei? Welche Meldungen wurden zuletzt in ein Protokoll geschrieben? Und welches Verzeichnis belegt besonders viel Speicher? Unter Linux gibt es dafür spezialisierte Werkzeuge: `cat`, `less` und `more` zeigen Textinhalte, `head` und `tail` liefern Ausschnitte. Mit `od` untersuchst du die enthaltenen Bytes. `ls` zeigt Verzeichniseinträge und Dateieigenschaften, während `du` die Speicherbelegung ermittelt. Kleine Textdateien mit `cat` anzeigen ------------------------------------- Mit `cat` gibst du den Inhalt einer Datei direkt im Terminal aus: ``` cat notizen.txt ``` Das eignet sich für kurze Texte und überschaubare Konfigurationen. Bei langen Dateien läuft die Ausgabe dagegen schnell über mehrere Bildschirmseiten. `cat` hält dabei nicht zum Lesen an. ### Mehrere Dateien anzeigen ``` cat teil1.txt teil2.txt ``` Die Inhalte werden in der angegebenen Reihenfolge hintereinander ausgegeben. `cat` steht für „concatenate“, also zusammenfügen beziehungsweise verketten. ### Zeilennummern einblenden ``` cat -n notizen.txt ``` Die Nummern erscheinen nur in der Ausgabe. Die Datei wird nicht verändert. Mit `-b` werden nur nicht leere Zeilen nummeriert: ``` cat -b notizen.txt ``` Für die schnelle Kontrolle kleiner Textdateien ist `cat` damit ein einfaches Werkzeug. Längere Dateien mit `less` lesen -------------------------------- Wenn du in einer Datei blättern oder suchen möchtest, ist `less` meist praktischer: ``` less notizen.txt ``` Die Datei wird in einer interaktiven Ansicht geöffnet. Du kannst vorwärts und rückwärts navigieren, ohne den gesamten Inhalt auf einmal im Terminal auszugeben. ### Die wichtigsten Tasten | Taste | Aktion | |---|---| | Enter | Eine Zeile weiter | | Leertaste | Eine Bildschirmseite vorwärts | | `b` | Eine Bildschirmseite zurück | | `g` | Zum Anfang springen | | `G` | Zum Ende springen | | `/Suchbegriff` und Enter | Vorwärts suchen | | `n` | Zum nächsten Suchtreffer | | `N` | Suche in Gegenrichtung wiederholen | | `q` | `less` beenden | Groß- und Kleinschreibung spielen bei den Tasten eine Rolle: `g` und `G` führen beispielsweise unterschiedliche Aktionen aus. ### Zeilennummern und lange Zeilen Mit `-N` blendest du Zeilennummern ein: ``` less -N konfiguration.conf ``` Mit `-S` verhinderst du den automatischen Umbruch langer Zeilen: ``` less -S breite-tabelle.txt ``` Du kannst dann mit den Pfeiltasten nach rechts und links scrollen. Das ist beispielsweise bei breiten Tabellen oder langen Protokollzeilen hilfreich. Seitenweise lesen mit `more` ---------------------------- Auch `more` zeigt Text Bildschirmseite für Bildschirmseite: ``` more notizen.txt ``` Die wichtigsten Tasten: - Leertaste: Eine Seite weiter. - Enter: Eine Zeile weiter. - `/Suchbegriff` und Enter: Suchen. - `q`: Beenden. `more` bietet weniger Funktionen als `less`. Die verbreitete util-linux-Variante kann beim Lesen einer regulären Datei mit `b` auch zurückblättern; bei Eingaben aus einer Pipe funktioniert das nicht. Für komfortables Lesen und Navigieren ist `less` deshalb gewöhnlich die vielseitigere Wahl. Den Dateianfang mit `head` ansehen ---------------------------------- Oft möchtest du nicht die ganze Datei lesen, sondern nur wissen, wie sie beginnt. Dafür verwendest du `head`: ``` head daten.csv ``` Standardmäßig erscheinen die ersten zehn Zeilen. Mit `-n` bestimmst du die Anzahl: ``` head -n 5 daten.csv ``` Das ist beispielsweise nützlich, um die Kopfzeile und einige Datensätze einer Tabelle zu prüfen. Du kannst auch mehrere Dateien angeben: ``` head -n 5 datei1.txt datei2.txt ``` Die Ausgabe erhält dann Überschriften, damit die Ausschnitte den jeweiligen Dateien zugeordnet werden können. Das Dateiende mit `tail` ansehen -------------------------------- `tail` arbeitet vom Ende einer Datei aus: ``` tail anwendung.log ``` Standardmäßig zeigt es die letzten zehn Zeilen. Für einen größeren Ausschnitt: ``` tail -n 30 anwendung.log ``` Das ist besonders bei Protokollen interessant, weil neue Einträge häufig am Dateiende hinzukommen. ### Neue Einträge live verfolgen ``` tail -f anwendung.log ``` Nach dem letzten Ausschnitt wartet `tail` auf weitere Daten und zeigt angehängte Inhalte an. Mit `Strg+C` beendest du die laufende Beobachtung. Die Datei wird dadurch nicht verändert. ### Wenn Protokolldateien ersetzt werden: `tail -F` Bei einer Logrotation kann eine Protokolldatei umbenannt und durch eine neue Datei gleichen Namens ersetzt werden. Dafür ist diese Variante hilfreich: ``` tail -F anwendung.log ``` `tail -F` folgt dem Dateinamen und versucht weiter, die Datei zu öffnen, wenn sie vorübergehend nicht erreichbar ist. Ein einfaches `tail -f` folgt standardmäßig dagegen dem geöffneten Dateideskriptor und kann dadurch bei der alten Datei bleiben. Verzeichnisinhalte mit `ls` ansehen ----------------------------------- Ein Verzeichnis untersuchst du normalerweise nicht mit `cat`, sondern mit `ls`: ``` ls ``` Oder mit einer ausdrücklichen Pfadangabe: ``` ls ~/Dokumente ``` Die Ausgabe zeigt die enthaltenen Namen. Versteckte Einträge mit einem Punkt am Anfang werden standardmäßig ausgelassen. ### Eigenschaften und Größen anzeigen ``` ls -lh ``` Die lange Ausgabe enthält unter anderem Dateityp, Rechte, Eigentümer, Gruppe, Größe und Änderungszeit. Mit `-h` werden Größen in leichter lesbaren Einheiten dargestellt. Auch versteckte Einträge anzeigen: ``` ls -lah ``` Ein einzelnes Verzeichnis selbst prüfen, ohne dessen Inhalt aufzulisten: ``` ls -ldh ~/Dokumente ``` Die Option `-d` ist hier entscheidend. ### Nach Dateigröße sortieren ``` ls -lhS ``` Die größten Einträge erscheinen zuerst. Wichtig: Bei Verzeichnissen ist die angezeigte Größe nicht die Summe aller darin enthaltenen Dateien. Wenn du wissen möchtest, wie viel Speicher ein ganzer Verzeichnisbaum belegt, benötigst du `du`. Inhalte und Eigenschaften von Links prüfen ------------------------------------------ Bei Links sind zwei Fragen zu unterscheiden: 1. Welcher Link beziehungsweise Dateiname liegt vor? 2. Welchen Inhalt erreiche ich darüber? ### Symbolischen Link ansehen ``` ls -l notizen-link ``` Ein symbolischer Link wird beispielsweise so dargestellt: ``` notizen-link -> notizen.txt ``` Für den gespeicherten Zielpfad kannst du zusätzlich verwenden: ``` readlink notizen-link ``` Die lange Ausgabe von `ls` beschreibt hier den Link selbst. Mit `-L` kannst du stattdessen die Eigenschaften des Ziels anzeigen lassen: ``` ls -lL notizen-link ``` Das funktioniert nur, wenn das Ziel erreichbar ist. ### Den Inhalt über einen Link lesen ``` cat notizen-link less notizen-link head notizen-link ``` Beim gewöhnlichen Öffnen eines symbolischen Links wird dessen Ziel gelesen. Zeigt er auf eine Textdatei, siehst du also deren Inhalt – nicht den gespeicherten Linkpfad. Ist das Ziel nicht vorhanden oder nicht zugänglich, schlägt der Zugriff fehl. ### Harte Links erkennen ``` ls -li original.txt weiterer-name.txt ``` Harte Links auf dieselbe Datei besitzen innerhalb desselben Dateisystems dieselbe Inode-Nummer. Über beide Namen erreichst du denselben Dateiinhalt. Speicherbelegung mit `du` ermitteln ----------------------------------- `du` steht für „disk usage“ und ermittelt die Speicherbelegung von Dateien und Verzeichnisbäumen. Für eine zusammengefasste, gut lesbare Ausgabe: ``` du -sh ~/Dokumente ``` Dabei bedeutet: - `-s`: Nur die Gesamtsumme für das angegebene Argument ausgeben. - `-h`: Größen in lesbaren Einheiten darstellen.[[gnu](https://www.gnu.org/software/coreutils/manual/html_node/du-invocation.html)] ### Mehrere Verzeichnisse vergleichen ``` du -sh ~/Dokumente ~/Bilder ~/Projekte ``` So erhältst du für jeden angegebenen Pfad eine eigene Summe. ### Eine Ebene genauer hinsehen ``` du -h --max-depth=1 ~/Projekte ``` `du` zeigt damit die Summen der unmittelbar enthaltenen Unterverzeichnisse und die Gesamtsumme des Startverzeichnisses. Tiefer liegende Inhalte werden weiterhin mitgerechnet, nur nicht einzeln ausgegeben. Versteckte Unterverzeichnisse werden ebenfalls berücksichtigt. ### Große Bereiche zuerst anzeigen ``` du -h --max-depth=1 ~/Projekte | sort -hr ``` `sort -h` sortiert Größenangaben mit Einheiten, `-r` kehrt die Reihenfolge um. Die Gesamtsumme des Startverzeichnisses steht dabei gewöhnlich ebenfalls weit oben. Bei fehlenden Leserechten kann `du` Teile des Verzeichnisbaums nicht vollständig untersuchen. Achte deshalb auf Fehlermeldungen, bevor du die Ausgabe als vollständige Übersicht interpretierst. Warum zeigen `ls` und `du` unterschiedliche Größen? --------------------------------------------------- Beide Werkzeuge beantworten unterschiedliche Fragen: | Werkzeug | Typische Aussage | |---|---| | `ls -l datei` | Wie groß ist der logische Dateiinhalt in Bytes? | | `du datei` | Wie viel Speicher wird der Datei vom Dateisystem zugerechnet? | | `du -sh verzeichnis` | Wie viel Speicher belegt der untersuchte Verzeichnisbaum insgesamt? | Eine winzige Textdatei kann wegen der Speicherzuweisung des Dateisystems mehr Platz belegen als ihr Inhalt lang ist. Umgekehrt können sogenannte Sparse-Dateien große logische Bereiche enthalten, für die keine entsprechenden Datenblöcke belegt sind. Wenn du bei `du` die logischen Größen statt der belegten Blöcke betrachten möchtest: ``` du -sh --apparent-size ~/Projekte ``` Das ist eine andere Messgröße, nicht einfach eine „genauere“ Variante der gewöhnlichen Speicherbelegung. ### Wie behandelt `du` Links? Standardmäßig folgt `du` symbolischen Links nicht. Mit `-L` kannst du deren Ziele einbeziehen: ``` du -shL verzeichnis-link ``` Dadurch können auch Daten außerhalb des ursprünglich betrachteten Verzeichnisses berücksichtigt werden. Harte Links auf dieselbe Datei zählt `du` innerhalb eines Aufrufs standardmäßig nur einmal. Das verhindert, dass dieselben Daten allein wegen mehrerer Namen mehrfach in die Summe eingehen. Welcher Befehl passt zu welcher Frage? -------------------------------------- | Frage | Befehl | |---|---| | Was steht in einer kurzen Textdatei? | `cat datei.txt` | | Wie lese ich eine längere Datei bequem? | `less datei.txt` | | Wie blättere ich mit einem einfachen Pager? | `more datei.txt` | | Wie beginnt die Datei? | `head datei.txt` | | Wie endet die Datei? | `tail datei.txt` | | Was wird gerade angehängt? | `tail -f datei.log` | | Welche Einträge liegen im Verzeichnis? | `ls -lah verzeichnis/` | | Wie groß ist der Dateiinhalt? | `ls -lh datei` | | Wie viel Speicher belegt ein Verzeichnisbaum? | `du -sh verzeichnis/` | Die Werkzeuge ergänzen sich: Dateiinhalte lesen, Verzeichniseinträge betrachten und Speicherbelegung messen sind unterschiedliche Aufgaben. Fazit: Erst die passende Frage stellen -------------------------------------- Für kurze Texte reicht `cat`, für längeres Lesen bietet sich `less` an. `head` und `tail` begrenzen die Ausgabe auf relevante Ausschnitte. Mit `ls` prüfst du Namen und Eigenschaften; mit `du` untersuchst du die Speicherbelegung ganzer Strukturen. Besonders wichtig sind zwei Unterscheidungen: Ein Link ist nicht dasselbe wie sein Ziel, und die logische Dateigröße ist nicht automatisch die tatsächlich belegte Speichermenge.