Das Kommando “ls” listet Ihre Daten auf der Kommandozeile auf und verrät dabei auch allerhand über die Dateieigenschaften. Ob mit oder ohne Farbe – mit diesem Befehl behalten Sie den Überblick über Ihre Daten.
Zu Befehl
Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder Gnome regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, in denen es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.
Kaum ein Kommando hat so viele Optionen und Parameter wie ls – die Manpage liest sich fast wie ein Bestseller. Welche Inhalte ls anzeigen soll und wie es die Ausgabe dabei formatiert, bestimmen Sie selbst mit zahlreichen Optionen. Wir stellen einige davon vor und zeigen, wie Sie sich mit List und Tücke auf die Suche nach den Daten begeben.
Was steckt drin?
Tippen Sie einfach nur ls am Prompt, sehen Sie den Inhalt des aktuellen Verzeichnisses; alternativ geben Sie einen relativen oder absoluten Pfad an, um den Inhalt eines anderen Ordners zu betrachten:
ls /etc
oder
ls ../../etc
Erscheint die Ausgabe bunt oder mit zusätzlichen Informationen (Sternchen an ausführbaren Dateien und Schrägstriche an Verzeichnissen), arbeiten Sie wahrscheinlich mit einem so genannten Alias von ls: Viele moderne Distributionen definieren eine solche Abkürzung standardmäßig für ihre Benutzer und übergeben dem Programm dabei direkt Aufrufparameter. Um herauszufinden, ob ls auf Ihrem System ein Alias ist, tippen Sie beispielsweise:
$ alias ls alias ls='/bin/ls $LS_OPTIONS'
Das Alias bewirkt, dass die Shell bei Eingabe von ls das Programm mit vollem Pfadnamen (/bin/ls) und dem Argument $LS_OPTIONS aufruft. Was in der Variable steckt, erfahren Sie ebenfalls auf der Kommandozeile:
$ echo $LS_OPTIONS -N --color=tty -T 0
Um ein Alias für eine einzige Shell-Sitzung außer Kraft zu setzen und das ursprüngliche Feeling des ls-Befehls zu erleben, tippen Sie
unalias ls
Soll dieses Verhalten dauerhaft werden, schreiben Sie den unalias-Befehl entweder in die Konfigurationsdatei der Shell (.bashrc) oder definieren dort ein eigenes Alias für ls (siehe Abschnitt Anpassungsfähig) und überschreiben damit die systemweite Voreinstellung.
Ansichtssache
Standardmäßig erscheinen beim einfachen ls-Aufruf nicht die versteckten Dateien und Verzeichnisse, also die, deren Namen mit einem Punkt beginnen. Wer sie sehen will, setzt als zusätzliche Option -a (für “all”) ein:
$ ls -a ./ ../ .bash_history .bash_logout .bashrc
In dieser Liste tauchen auch das aktuelle und das übergeordnete Verzeichnis (gekennzeichnet durch einen Punkt bzw. zwei Punkte) auf. Um deren Anzeige zu unterbinden und dennoch die versteckten Inhalte einzusehen, verwenden Sie statt der Option -a einfach den Parameter -A.
Richtig informativ
Das ls-Kommando wirft mit Informationen geradezu um sich, wenn Sie den Parameter -l einsetzen (Kasten 1). Ganz rechts sehen Sie den Dateinamen – bei symbolischen Links (wie hier im Beispiel blubb.ps) zeigt ein Pfeil an, auf welche Originaldatei der Link verweist. Links davon finden Sie Datum und Uhrzeit der letzten Veränderung (bzw. eine Jahreszahl, wenn das länger zurückliegt). Weiter links stehen die Dateigröße in Bytes, der Besitzer und die Gruppe.
Wer keine Lust hat, Bytes in eine andere Größenordnung umzurechnen, hängt als weiteren Parameter einfach -h an – ls rundet dann auf die nächstliegende Einheit auf oder ab (Kasten 1, unten).
Kasten 1: Ausführliche Verzeichnis-Listings
$ ls -l insgesamt 11844 drwxrwxr-x 2 huhn users 4096 2005-07-20 10:25 bla lrwxrwxrwx 1 huhn users 10 2005-07-20 10:49 blubb.ps -> ../post.ps -rw-r--r-- 1 huhn users 12101636 2005-07-20 10:48 huhn.mpg -rwxr-xr-x 1 huhn users 1325 2005-07-20 10:49 script.sh
$ ls -lh insgesamt 12M drwxrwxr-x 2 huhn users 4,0K 2005-07-20 10:25 bla lrwxrwxrwx 1 huhn users 10 2005-07-20 10:49 blubb.ps -> ../post.ps -rw-r--r-- 1 huhn users 12M 2005-07-20 10:48 huhn.mpg -rwxr-xr-x 1 huhn users 1,3K 2005-07-20 10:49 script.sh
Die zweite Spalte von links verrät bei Verzeichnissen die Anzahl der Verzeichniseinträge in eben diesem (inklusive . und ..), bei Dateien die Anzahl der Hardlinks. Ganz links schließlich stehen zehn Zeichen, die den Dateityp und die Zugriffsrechte angeben. Für den Dateityp sind die folgenden Bezeichnungen verfügbar:
-eine normale Dateidein Verzeichnis (englisch “directory”)lsymbolischer Linkb/cGerätedatei (“block” oder “character device”)
Der Größe nach
Der Befehl ls bringt Optionen mit, welche Ihre Dateien der Größe nach sortieren. Eine geordnete Liste, in der die größte Datei zuerst genannt wird, geben Sie mit der Option -S aus. Um die Größe (wieder in Bytes) vor den jeweiligen Dateinamen zu setzen, kombinieren Sie den Parameter mit -s:
$ ls -sS 11836 huhn.mpg 4 bla 4 script.sh 0 blubb.ps
Auch hier können Sie mit der Option -h dafür sorgen, dass ls die Größe in besser lesbaren Einheiten präsentiert:
$ ls -sSh 12M huhn.mpg 4,0K bla 4,0K script.sh 0 blubb.ps
Natürlich gibt es auch eine Möglichkeit, die Ausgabe umzudrehen: Der Parameter -r sorgt dafür, dass die kleinste Datei zuerst auftaucht:
$ ls -sShr 0 blubb.ps 4,0K script.sh 4,0K bla 12M huhn.mpg
Alter vor Schönheit?
Auf Wunsch sortiert ls auch nach Datum und Uhrzeit der letzten Änderung. Standardmäßig taucht die “jüngste” Datei dabei zuerst in der Liste auf:
$ ls -t script.sh blubb.ps huhn.mpg bla
Auch hier dreht -r als zusätzliche Option die Reihenfolge um und gibt die älteste Datei zuerst aus. Da eine solche Liste nicht besonders übersichtlich ist, wenn gleich mehrere Dateinamen in einer Zeile stehe, weisen Sie ls mit der Option -1 an, nur einen Eintrag pro Spalte anzuzeigen:
$ ls -tr1 bla huhn.mpg blubb.ps script.sh
Wie viele Details?
Wer die sehr ausführliche Darstellung zu detailreich findet, aber trotzdem auf die Angabe der Dateitypen nicht verzichten möchte, setzt den Parameter -F ein:
$ ls -F bla/ blubb.ps@ blubb.ps~ huhn.mpg script.sh*
Verzeichnisse kennzeichnet ls in dieser Ausgabe mit einem abschließenden Schrägstrich; hinter smybolischen Links befindet sich ein Klammeraffe, und hinter ausführbaren Dateien taucht ein Sternchen auf.
Ebenso können Sie ls anweisen, etwas weniger anzuzeigen: Sicherungskopien, die eine Tilde am Ende des Dateinamens tragen, klammern Sie aus, indem Sie den Parameter -B einsetzen. Sollten die Backups hingegen eine Dateiendung, wie z. B. .bak tragen, weisen Sie ls mit dem Parameter -I und einem entsprechenden Muster an, diese Dateien zu ignorieren:
ls -I *.bak
Das Kommando bringt auch eine Option mit, die verhindert, dass Inhalte von Unterverzeichnissen angezeigt werden, wenn Sie z. B. mit Shell-Wildcards arbeiten. Lassen Sie sich beispielsweise mit dem Befehl
ls /etc/cron*
Dateien im Ordner /etc, die mit cron beginnen, anzeigen, tauchen z. B. auch Inhalte des Unterverzeichnisses /etc/cron.daily auf. Die Bash interpretiert in diesem Fall das Sternchen und übergibt dem ls-Befehl u. a. das Verzeichnis /etc/cron.daily als Argument, so dass dessen Inhalt aufgelistet wird. Mit dem Parameter -d schalten Sie das ab und sehen dann im Fall eines Unterverzeichnisses dessen eigenen Eintrag (und nicht den Inhalt):
$ ls -d /etc/cron* /etc/cron.d /etc/cron.monthly /etc/cron.daily /etc/crontab /etc/cron.hourly /etc/cron.weekly
Farbenzauber
Wenn Sie über den Parameter -F den Dateityp durch ein Symbol kenntlich machen, zeigt sich die ls-Ausgabe schon recht übersichtlich. Noch einfacher erkennen Sie, was sich im Ordner befindet, wenn Sie mit der Option --color Farbe ins Spiel bringen und so den verschiedenen Dateitypen eine bestimmte Einfärbung zuordnen.
Als zusätzliche Angabe versteht der Parameter die Definitionen --color=always, --color=none oder --color=auto. Die letzte Variante ist die Standardeinstellung und sorgt dafür, dass ls nur bei der direkten Ausgabe in ein Terminal Farben präsentiert. Leiten Sie die Ausgabe hingegen an ein anderes Programm oder in eine Datei um, verzichtet ls auf das “Make-up” und kehrt zur Schwarz-Weiß-Darstellung zurück. Im Gegensatz dazu zeigt always immer und none niemals Farben an.
In welchen Schminkkasten ls dabei greift, d. h. welche Farben ls für welchen Dateityp verwendet, finden Sie heraus, indem Sie die Variable LS-COLORS betrachten:
$ echo $LS_COLORS no=00:fi=00:di=01;34:ln=00;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:…
Da die Steuer-Codes für die Farben schlecht verständlich sind, schauen Sie mit dem Befehl
dircolors -p | less
nach, wie diese definiert sind. (Damit die recht lange Anzeige nicht aus dem Fenster herausscrollt, leiten Sie die Ausgabe über das Pipe-Zeichen an den Pager less weiter und betrachten sie seitenweise.) Hier finden Sie beispielsweise die Information, dass Verzeichnisse jeweils fett (bold) und in Blau (blue) ausgegeben werden:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed # 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white DIR 01;34 # directory
Anpassungsfähig
Wer selbst Farben für den ls-Befehl definieren möchte, setzt die schon erwähnte Variable LS_COLORS in der eigenen Bash-Konfigurationsdatei neu. Markieren Sie dazu die Ausgabe des Kommandos echo $LS_COLORS mit der linken Maustaste und fügen Sie den Inhalt der Zwischenablage über die mittlere Maustaste in die Datei .bashrc ein. Davor setzen Sie den Aufruf export LS_COLORS=; schließen Sie die Steuer-Codes außerdem in Hochkommas ein. In der Datei steht nun eine Zeile der Art
export LS_COLORS="no=00:fi=00:di=…"
Ausgehend von den Farb-Codes, die Sie über dircolors -p | less erfahren haben, passen Sie nun die Einfärbung an. Gefällt Ihnen die rote Farbe für Debian-Pakete (Dateiendung .deb) nicht, ersetzen Sie die Ziffer 31 durch etwas Eigenes, z. B. 35 für Magenta:
*.deb=00;35:
Lesen Sie die Bash-Konfigurationsdatei anschließend mit dem Kommando
source ~/.bashrc
neu ein, erstrahlen Debian-Pakete beim nächsten Aufruf von ls --color in Magenta.
Wie schon erwähnt, setzen die meisten Distributionen ein Alias für ls, das bestimmte Optionen des Befehls standardmäßig aufruft. In der Datei .bashrc können Sie selbst die für Sie wichtigsten Parameter definieren. Soll ls beispielsweise immer auf den Dateityp mit einem Symbol (-F) und mit Farben (--color) hinweisen, tragen Sie
alias ls='ls -F --color'
ein. Ebenso kann es sinnvoll sein, ein weiteres Alias für die lange und ausführliche Anzeige inklusiver versteckter Verzeichnisse und Dateien zu beschreiben, z. B.:
alias ll='ls -laF --color'
Vergessen Sie nach den jeweiligen Änderungen der Konfigurationsdatei nicht, diese neu einzulesen (source ~/.bashrc). Wer sich nicht sämtliche ls-Optionen merken kann, definiert so für die am häufigsten gebrauchten Befehle einfach neue Abkürzungen – das ist nicht nur für Tippfaule gut.

Abbildung 2: Auch der Konqueror zeigt auf Wunsch ausführliche Informationen an – nur deutlich langsamer als “ls”.
Glossar
-
Pfad
-
Dateien und Verzeichnisse liegen hierarchisch in einer Baumstruktur und lassen sich absolut oder relativ ansprechen. Als absolut bezeichnet man dabei den Weg, der vom Wurzelverzeichnis (“/”) ausgehend alle “zu betretenden” Verzeichnisse nennt, also z. B. “/home/huhn/linux-user/inhalt.txt”. Ein relativer Pfad beginnt immer im aktuellen Verzeichnis. Das übergeordnete Verzeichnis spricht man dabei über zwei Punkte (“..”) an.
-
Hardlink
-
Sind zwei Dateien als Hardlinks miteinander “verbunden”, dann zeigen ihre Einträge in den jeweiligen Verzeichnissen auf den gleichen Inode. Zwei hart verlinkte Dateien sind also tatsächlich eine einzige Datei, die an zwei Stellen im Inhaltsverzeichnis auftaucht.
-
Gerätedatei
-
Geräte werden unter Linux als Dateien im Verzeichnis “/dev” repräsentiert. Dabei wird zeichenweise auf so genannte zeichenorientierte Geräte (“character devices”, z. B. “/dev/tty0” als erste virtuelle Konsole) zugegriffen, “block devices” (z. B. “/dev/hda” als erste IDE-Festplatte) liest und schreibt man blockweise.





