Kein farbiges ls

Man kennt es von einer alten Slackware-Distribution, das ls war schön bunt, förderte die Übersichtlichkeit. Bei anderen Distributionen tritt plötzlich das Problem auf, daß kein farbiges ls installiert wird. Aus scheinbar unerfindlichen Gründen gibt ls keinen farbigen Output. Gleiches erhält man übrigens auch auf anderen Unix-Systemen.

Das kann unterschiedliche Gründe haben. Bei nicht-Linux Systemen ist der Grund wahrscheinlich, daß zum einen kein GNU ls (mit ls --version herausfinden) installiert ist und daß die Console/das Terminal u.U. keine Farbe unterstützt. Unter Linux ist eine Möglichkeit, daß die Farboption gar nicht installiert wurde. Das läßt sich aber schnell rausfinden: ls --version muß bei 3.x etwas von color faseln oder 4.x anzeigen, sonst ist es eine farblose Version.

Wenn das ls das ungepatchte aus den GNU fileutils ist, dann mußt Du es selbst patchen - kein Problem. Hol Dir dazu noch die Datei color-ls-3.12.0.3.patch.gz von metalab. Anschließend solltest Du aber noch meinen Patch anwenden.

In der Datei /etc/DIR_COLORS stehen die Definitionen für die Farben bzw. Dateien. Diese Datei muß vorhanden und mit sinnvollem Inhalt gefüllt sein.

Was tun, sprach Zeus

ls wird nur dann farbig, wenn man es ihm auch sagt. :-) Aber wie? Das ist sogar ziemlich einfach. Hier gibt es einen eigenen Befehl, um die entsprechenden Parameter zu setzen. dircolors(1) erzeugt Input für die aktive Shell. Das heißt, das Programm muß mit eval `dircolors [-abckstzPS] [filename]` aufgerufen werden, damit die Shell das auch übernimmt. Der Parameter gibt dabei u.a. die Art der Shell (sh, csh, ksh, ash etc.) an.

dircolors(1) setzt dabei verschiedene Variablen und erzeugt Aliase bzw. Funktionen, damit ls farbig wird. Dieser Befehl muß ggf. am Ende von /etc/profile oder ~/.profile angehängt werden.

Tunlichst vermeiden sollte man einen alias für ls der Form ls=/bin/ls. Das geht nämlich in die Hose, denn für Farbe braucht ls wie schon geschrieben einige Optionen. Diese werden von dircolors(1) in LS_OPTIONS gespeichert, also müßte ein entsprechender Alias ls='/bin/ls $LS_OPTIONS' sein.

Oder doch wieder farblos?

Einzelne User, die nur ein Monochromes Display haben, können mit dem farbigen Output evtl. nichts anfangen. Für diese besteht aber die Möglichkeit die Farben auszuschalten. Dazu muß nur eine leere Datei ~/.dir_colors angelegt werden. (Nebenbei bemerkt, hier können auch benutzereigene Farbdefinitionen gemacht werden.)

Wenn ls dann einen Segmentation Fault liefert, dann hast Du einen schon laengst bekannten Bug gefunden. :-(

Du kannst jetzt entweder das ls neu kompilieren oder hart eincodieren (z.B. durch einen eigenen Alias), daß ls immer mit der Option --colour=none aufgerufen wird.


© Joey, 1 Aug '99