So verwenden Sie den ls-Befehl zum Auflisten von Dateien und Verzeichnissen unter Linux

Der vielseitige Linux-Befehl ‚ls‘: Mehr als nur eine einfache Dateiliste

Der Linux-Befehl ls ist ein täglicher Begleiter für viele, oft ohne dass wir seine volle Leistungsfähigkeit ausschöpfen. Dies ist bedauerlich, da ls eine Fülle nützlicher Optionen bietet, die es wert sind, erkundet und in das eigene Befehlszeilenrepertoire aufgenommen zu werden.

Grundlagen des ‚ls‘-Befehls: Dateien und Verzeichnisse auflisten

Für viele Linux-Nutzer ist ls einer der ersten Befehle, mit denen sie in Berührung kommen. Er wird oft intuitiv verwendet, um sich einen Überblick über den Inhalt von Verzeichnissen zu verschaffen oder Dateiberechtigungen zu überprüfen. Jedoch steckt hinter diesem einfachen Befehl weitaus mehr Potenzial, als man auf den ersten Blick vermuten mag.

Die große Anzahl an Optionen kann jedoch abschreckend wirken. Wie findet man die wirklich nützlichen Funktionen unter dieser Vielzahl an Möglichkeiten? Und noch wichtiger, wie behält man diese im Gedächtnis?

Gerade für wiederkehrende, spezielle Anwendungsfälle bieten sich Aliase an. Ein Blick auf die Definition von ls mit dem Befehl type ls zeigt, dass in vielen Distributionen bereits ein Alias verwendet wird:

type ls

Das Ergebnis zeigt, dass standardmäßig der Parameter --color=auto verwendet wird. Dieser sorgt für die farbliche Unterscheidung der Dateitypen in der Ausgabe.

Einfache Dateiauflistungen mit ‚ls‘

Jeder, der schon länger mit dem Linux-Terminal arbeitet, weiß, dass ls standardmäßig die Dateien und Verzeichnisse im aktuellen Verzeichnis auflistet.

ls

Möchte man die Ausgabe in einer einzigen Spalte, also eine Datei pro Zeile, verwenden, wird die Option -1 genutzt:

ls -1

Wir werden den seltsam anmutenden Dateinamen am oberen Ende dieser Liste gleich noch genauer betrachten.

‚ls‘ in verschiedenen Verzeichnissen nutzen

Um die Dateien in einem anderen als dem aktuellen Verzeichnis aufzulisten, wird einfach der Pfad zum gewünschten Verzeichnis als Parameter übergeben. Es ist auch möglich, mehrere Verzeichnisse gleichzeitig anzugeben, welche ls dann nacheinander auflistet. Im folgenden Beispiel werden die Inhalte der Verzeichnisse „Help“ und „gc_help“ angezeigt:

ls Help gc_help

Nachdem ls die Inhalte des ersten Verzeichnisses angezeigt hat, listet es anschließend die des zweiten auf. Dabei wird der Name jedes Verzeichnisses mit ausgegeben.

Filtern mit Dateimustern

Für eine selektive Dateilistenansicht, wird der Mustervergleich genutzt. Das Fragezeichen ? steht dabei für ein beliebiges einzelnes Zeichen, während das Sternchen * für eine beliebige Zeichenkette steht. Um alle Dateien oder Verzeichnisse aufzulisten, deren Namen mit „ip_“ beginnen, kann folgender Befehl verwendet werden:

ls ip_*

Für Dateien mit der Erweiterung „.c“ wird dieses Format verwendet:

ls *.c

ls lässt sich auch in Kombination mit grep und dessen Mustervergleichsfunktionen nutzen. Um beispielsweise alle Dateien mit dem String „_pin_“ im Namen zu finden, wird folgender Befehl verwendet:

ls | grep _pin_

Dies ähnelt der Verwendung von ls mit zwei Platzhaltern:

ls | grep _pin_
ls *_pin_*

Die Ergebnisse sind fast identisch, jedoch gibt es einen Unterschied im Layout. grep erzwingt eine Ausgabe in einem einzelnen Dateinamen-pro-Zeile Format.

Umgang mit nicht druckbaren Zeichen

Es kann vorkommen, dass ein Dateiname nicht druckbare Zeichen enthält. Dies geschieht oft beim Entpacken von Archiven aus dem Internet oder beim Klonen von Git-Repositories, wenn der Ersteller der Datei einen Fehler gemacht hat.

Eine solche Datei ist in unserem Beispiel der seltsame Dateiname aus der ersten Liste:

Betrachtet man diese Datei im Dateibrowser, so werden die nicht druckbaren Zeichen durch ein besonderes Symbol dargestellt, wenn man den Dateinamen umbenennen möchte (z.B. mit „F2“).

Die Option -b (Escape) gibt die tatsächlichen Zeichen im Dateinamen aus. Sie verwendet die Escape-Sequenzen der Programmiersprache C, um Steuerzeichen darzustellen.

ls -b a*

Das mysteriöse Zeichen ist also ein Zeilenumbruch, welcher in C als „n“ dargestellt wird.

Dateien von der Auflistung ausschließen

Um bestimmte Dateien von der Auflistung auszuschließen, wird die Option --hide verwendet. Möchte man zum Beispiel die Sicherungsdateien „.bak“ nicht in der Liste sehen, so verwendet man folgenden Befehl:

ls
ls --hide=*.bak

Die „.bak“-Dateien sind nun in der zweiten Auflistung nicht mehr vorhanden.

Die lange Listenansicht

Die Option -l (lange Auflistung) gibt detaillierte Informationen zu jeder Datei an:

ls -l

Diese Ausgabe enthält viele Informationen, die wir nun im Detail betrachten werden.

Als erstes zeigt ls die Gesamtgröße aller Dateien an, gefolgt von jeder Datei oder jedem Verzeichnis auf einer eigenen Zeile.

Die erste Gruppe von zehn Buchstaben und Bindestrichen steht für den Dateityp, sowie die Berechtigungen des Besitzers, der Gruppe und anderer Benutzer.

Das allererste Zeichen steht für den Dateityp:

- Eine normale Datei
b Eine spezielle Blockdatei
c Eine spezielle Zeichendatei
d Ein Verzeichnis
l Ein symbolischer Link
n Eine Netzwerkdatei
p Eine benannte Pipe
s Eine Socket-Datei

Die nächsten neun Zeichen sind in drei Gruppen aufgeteilt, welche die Lese-, Schreib- und Ausführungsrechte in dieser Reihenfolge darstellen. Ist eine Berechtigung vorhanden, wird sie mit r, w oder x angezeigt, andernfalls mit einem Bindestrich -.

Die erste Dreiergruppe steht für die Berechtigungen des Dateibesitzers, die zweite für die der Gruppenmitglieder und die dritte für alle anderen Benutzer.

Die Ausführungsberechtigung für den Eigentümer kann auch als s dargestellt werden, was für das setuid-Bit steht. Ist dieses gesetzt, so wird die Datei mit den Rechten des Dateibesitzers und nicht mit denen des ausführenden Benutzers ausgeführt.

Auch die Ausführungsberechtigung für die Gruppe kann ein s sein, was das setgid-Bit darstellt. Für eine Datei bedeutet dies, dass sie mit den Rechten der Eigentümergruppe ausgeführt wird. Bei Verzeichnissen erhalten alle neu erstellten Dateien die Gruppenberechtigungen des Verzeichnisses, in dem sie erstellt werden und nicht die des Benutzers.

Die Ausführungsberechtigung für die anderen Benutzer kann durch t dargestellt werden, das Sticky Bit. Dieses wird üblicherweise bei Verzeichnissen verwendet. Ist es gesetzt, so kann unabhängig von den Schreib- und Ausführungsrechten nur der Dateibesitzer, Verzeichnisbesitzer oder der Root-Benutzer Dateien im Verzeichnis umbenennen oder löschen.

Ein gutes Beispiel für die Verwendung des Sticky Bits ist das Verzeichnis „/tmp“, welches von allen Benutzern des Systems beschreibbar ist. Das Sticky Bit sorgt dafür, dass Benutzer und die von ihnen gestarteten Prozesse nur ihre eigenen temporären Dateien umbenennen oder löschen können.

Das Sticky Bit ist im Verzeichnis „/tmp“ aktiv. Mit der Option -d (Verzeichnis) werden die Details des Verzeichnisses ausgegeben. Ohne diese Option würde ls die Dateien innerhalb des Verzeichnisses anzeigen.

ls -l -d /tmp

Die Zahl nach den Berechtigungen ist die Anzahl der Hardlinks zu dieser Datei oder dem Verzeichnis. Bei einer Datei ist dies meistens eins, kann aber durch das Hinzufügen weiterer Hardlinks erhöht werden. Ein Verzeichnis hat in der Regel mindestens zwei Hardlinks. Einer ist der Link zu sich selbst und der andere ist der Eintrag im übergeordneten Verzeichnis.

Darauf folgen der Name des Besitzers und der Gruppe, die Dateigröße und das Datum der letzten Änderung, sowie der Dateiname.

Dateigrößen in lesbarer Form

Die Dateigrößen in Bytes anzugeben ist oft nicht sehr praktisch. Mit der Option -h (human-readable) werden die Dateigrößen in den am besten geeigneten Einheiten (Kilobyte, Megabyte, usw.) angezeigt:

ls -l -h

Versteckte Dateien anzeigen

Versteckte Dateien werden mit der Option -a (all) angezeigt:

ls -l -a

Die Einträge . und .. stehen für das aktuelle bzw. übergeordnete Verzeichnis. Eine Datei namens .base_settings wird hier zum ersten Mal sichtbar.

Ausblenden der Einträge „.“ und „..“

Möchte man die Einträge . und .. nicht in der Ausgabe haben, jedoch versteckte Dateien anzeigen, so verwendet man die Option -A (almost all):

ls -l -A

Die versteckte Datei wird weiterhin aufgelistet, die . und ..-Einträge jedoch nicht.

Rekursives Auflisten von Verzeichnissen

Um auch die Dateien in allen Unterverzeichnissen mit aufzulisten, wird die Option -R (rekursiv) verwendet:

ls -l -R

ls durchläuft so den kompletten Verzeichnisbaum und listet die Dateien in jedem Unterverzeichnis auf.

Anzeige von UID und GID

Um anstelle des Benutzernamens und Gruppennamens die numerische Benutzer-ID (UID) und Gruppen-ID (GID) anzuzeigen, wird die Option -n (numerische UID und GID) verwendet:

ls -n

Sortieren der Ausgabe

Die Ausgabe kann nach Dateierweiterung, Dateigröße oder Änderungszeit sortiert werden. Diese Optionen können unabhängig von der langen Listenansicht genutzt werden, jedoch ist es meist sinnvoll diese Option zu verwenden. Die Sortierung nach Dateigröße ist mit der Option -h (human-readable) am sinnvollsten. Die Option zur Sortierung nach Dateierweiterung hingegen, ist unabhängig vom Format der langen Auflistung hilfreich.

Für eine Sortierung nach Dateierweiterung wird die Option -X (nach Erweiterung sortieren) verwendet:

ls -X -1

Zuerst werden die Verzeichnisse (ohne Erweiterungen) aufgelistet, danach folgen die restlichen Einträge in alphabetischer Reihenfolge nach ihren Erweiterungen.

Für eine Sortierung nach Dateigröße, wird die Option -S (nach Dateigröße sortieren) verwendet:

ls -l -h -S

Die Sortierreihenfolge ist von der größten zur kleinsten Datei.

Um die Liste nach Änderungszeit zu sortieren, wird die Option -t (nach Änderungszeit sortieren) verwendet:

ls -l -t

Die Liste ist nun nach dem Zeitpunkt der letzten Änderung sortiert.

Liegt der Zeitpunkt der letzten Änderung im aktuellen Jahr, so werden Monat, Tag und Uhrzeit angezeigt. Andernfalls werden Monat, Tag und das Jahr angezeigt.

Eine schnelle Möglichkeit, die neuesten oder ältesten Dateien in einem Verzeichnis anzuzeigen, ist die Verwendung von ls in Kombination mit den Befehlen head und tail.

Die neueste Datei oder das neueste Verzeichnis erhält man mit folgendem Befehl:

ls -t | head -1

Die älteste Datei oder das älteste Verzeichnis mit:

ls -t | tail -1

Umkehren der Sortierreihenfolge

Um die Sortierreihenfolge umzukehren, wird die Option -r (reverse) verwendet:

ls -l -h -S -r

Die Liste wird nun von der kleinsten zur größten Datei sortiert.

Weitere nützliche Optionen von ‚ls‘

Die Manpage von ls (dort gibt es noch viele weitere Möglichkeiten) zeigt, dass es noch viele weitere Optionen gibt. Einige von ihnen mögen für eher spezielle Anwendungsfälle gedacht sein, aber es lohnt sich, sie im Hinterkopf zu behalten.

Möchte man die Zeitstempel mit der höchstmöglichen Genauigkeit anzeigen, wird die --full-time Option genutzt:

ls --full-time

Die Inode-Nummer einer Datei erhält man mit der -i Option:

ls -i

Auf einem monochromen Display können Dateitypen leicht verwechselt werden. Um dies zu vermeiden, kann die Klassifizierungsoption verwendet werden. ls hängt dann die folgenden Zeichen an die Listeneinträge an:

/ Ein Verzeichnis
@ Ein Symlink
| Eine benannte Pipe
= Eine Socket-Datei
* Eine ausführbare Datei
ls -F

Es lohnt sich, die Möglichkeiten von ls zu erkunden, da es immer wieder neue, nützliche Optionen zu entdecken gibt.