Verzeichnisinhalt en detail mit “ls”

Aus LinuxUser 09/2005

Verzeichnisinhalt en detail mit “ls”

Mit List und Tücke

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 Datei
  • d ein Verzeichnis (englisch “directory”)
  • l symbolischer Link
  • b/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.

Abbildung 1: Die Ausgabe von "ls" können Sie auch farbig gestalten.

Abbildung 1: Die Ausgabe von “ls” können Sie auch farbig gestalten.

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".

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.

LinuxUser 09/2005 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben