# Ls (Unix)

ls ist ein durch POSIX und die Single UNIX Specification definierter Befehl auf der Kommandozeile, der in Unix- und unixoiden Systemen implementiert ist, um den Inhalt eines Verzeichnisses anzeigen zu lassen. Es ist eines der am häufigsten benutzen Unix-Kommandos. ls steht für „list“.

## Geschichte

Ein ls-Dienstprogramm erschien in der ursprünglichen Version von AT&T UNIX. Der Name leitet sich vom ähnlichen Befehl list bzw. ls in Multics ab.
Heute gibt es verschiedene Versionen von ls. Unter anderem gibt es die Version von OpenSolaris, der Free Software Foundation als Teil der GNU Coreutils und die der BSD-Varianten, wie FreeBSD, OpenBSD, NetBSD und Apples Darwin. Alle genannten sind freie Software und Open Source.

## Grundfunktion

Unix und unixoide Betriebssysteme kennen das Konzept des Arbeitsverzeichnisses, was nichts anderes bedeutet als die aktuelle eigene Position in der Hierarchie der ineinander verschachtelten Verzeichnisse. Ruft man nun ls ohne Parameter auf, zeigt es den Inhalt des Arbeitsverzeichnisses an. Gibt man zusätzlich beliebige Dateien und/oder Verzeichnisse ohne weitere Parameter an, werden all diese Dateien und die Inhalte dieser Ordner aufgelistet werden. Zumeist werden dabei lediglich die Dateinamen ohne weitere Details (mehrspaltig) aufgelistet. Das konkrete Verhalten ist voreingestellt und variiert in einzelnen Systemen. Ein Administrator kann die Vorgabe systemweit ändern, einfache Benutzer nur für sich selbst.
Um weitere Details in den aufgelisteten Einträgen der Liste ausgeben zu lassen, können Optionen genutzt werden. Eine Auswahl an Optionen:
* -l verwendet ein langes Listenformat; zeigt die Unix-Dateiart (ob reguläre Datei [-], Verzeichnis [d], symbolischen Verknüpfung [l], benannte Pipe [p], Block-orientierte [b] oder Zeichen-orientierte [c] Gerätedatei), Dateiname und Anzahl harter Links, Dateirechte, Eigentümer (Benutzerkonto), Benutzergruppe, Datenmenge („Größe“, „Gewicht“) und Änderungsdatum;
* -F hängt ein Zeichen an den Dateinamen an, um diese zu charakterisieren; beispielsweise * für ein Programm und / für ein Verzeichnis. An reguläre Dateien wird kein Zeichen angehängt;
* -R zeigt rekursiv auch den Inhalt von Unterordnern mit an;
* -a ignorieren keine Datei; andernfalls werden Dateien deren Name mit ».« (Punkt) beginnt ignoriert (versteckte Dateien);
* -d zeigt Angaben über ein Verzeichnis selbst anstelle dessen Inhalt, auch bei einer symbolischen Verknüpfung auf ein Verzeichnis;
* -t sortiert die Liste nach dem Datum.
Das Dateiformat kann dieses Programm nicht ausgeben, siehe file.

## Farbige Ausgabe

In einigen Systemen kann eine farbliche Ausgabe mithilfe einer Option aktiviert werden:
* --color bei der GNU-Implementierung; zum Bestimmen der Farbe wird die Unix-Dateiart, die -Dateirechte und die Dateinamenserweiterung berücksichtigt.
* -G bei FreeBSD und macOS; hier wird die Dateinamenserweiterung nicht berücksichtigt.
Auf vielen Systemen muss man die Option für Farbhervorhebung nicht angeben, weil sie mit einem Aliases in der Konfiguration der Kommandozeile bereits automatisch vorausgewählt ist.
Weitere Beispiele für beliebte Aliase sind ll für ls -l und l für ls, um Tipparbeit bei diesen häufig genutzten Befehlsvarianten zu sparen. In Kombination mit der Option -l wird oft die Option -h angegeben, um die Dateigrößen human readable anzuzeigen – damit ist gemeint, dass die Dateigrößen gerundet und mit SI-Präfix angezeigt werden, also beispielsweise 4,2M anstelle von 4351902.

## Aufrufbeispiel

Die Ausgabe (stdout) enthält folgende Informationen: Benutzerrechte, Anzahl der harten Links, Besitzer, Gruppe, Größe der Datei in Byte, Dateiname.
Alle Dateiinformationen sind in Inodes hinterlegt. Um diese anzuzeigen, wird der Parameter -i benötigt. Dabei wird der Unterschied zwischen Hardlinks und Softlinks deutlich.