Wie ändere ich die Farbe für Verzeichnisse mit ls in der Konsole?


165

Auf meiner Konsole ist die Farbe für Verzeichnisse so blau, dass es auf einem dunklen Hintergrund schwer zu lesen ist.

Wie kann ich die Farbdefinitionen für ändern ls?

Antworten:


250

Öffnen Sie Ihre ~/.bashrcDatei mit Ihrem Editor , um die Farben Ihres Verzeichnisses zu ändern

nano ~/.bashrc

und geben Sie am Ende der Datei Folgendes ein:

LS_COLORS=$LS_COLORS:'di=0;35:' ; export LS_COLORS

Einige schöne Farben zur Auswahl (in diesem Fall ist 0;35es lila) sind:

Blue = 34
Green = 32
Light Green = 1;32
Cyan = 36
Red = 31
Purple = 35
Brown = 33
Yellow = 1;33
Bold White = 1;37
Light Grey = 0;37
Black = 30
Dark Grey= 1;30

Die erste Zahl ist der Stil (1 = fett), gefolgt von einem Semikolon, und dann die tatsächliche Anzahl der Farben. Mögliche Stile (Effekte) sind:

0   = default colour
1   = bold
4   = underlined
5   = flashing text (disabled on some terminals)
7   = reverse field (exchange foreground and background color)
8   = concealed (invisible)

Die möglichen Hintergründe:

40  = black background
41  = red background
42  = green background
43  = orange background
44  = blue background
45  = purple background
46  = cyan background
47  = grey background
100 = dark grey background
101 = light red background
102 = light green background
103 = yellow background
104 = light blue background
105 = light purple background
106 = turquoise background
107 = white background

Alle möglichen Farben:

31  = red
32  = green
33  = orange
34  = blue
35  = purple
36  = cyan
37  = grey
90  = dark grey
91  = light red
92  = light green
93  = yellow
94  = light blue
95  = light purple
96  = turquoise
97  = white

Diese können sogar kombiniert werden, so dass ein Parameter wie:

di=1;4;31;42

in Ihrer LS_COLORS-Variablen würden Verzeichnisse in fett unterstrichenem rotem Text mit einem grünen Hintergrund angezeigt!

Um all diese Farben und Stile in Ihrem Terminal zu testen, können Sie eine der folgenden Methoden verwenden:

for i in 00{2..8} {0{3,4,9},10}{0..7}
do echo -e "$i \e[0;${i}mSubdermatoglyphic text\e[00m  \e[1;${i}mSubdermatoglyphic text\e[00m"
done

for i in 00{2..8} {0{3,4,9},10}{0..7}
do for j in 0 1
   do echo -e "$j;$i \e[$j;${i}mSubdermatoglyphic text\e[00m"
   done
done

Sie können auch andere Dateitypen ändern, wenn Sie den Befehl ls verwenden, indem Sie die einzelnen Dateitypen wie folgt definieren:

bd = (BLOCK, BLK)   Block device (buffered) special file
cd = (CHAR, CHR)    Character device (unbuffered) special file
di = (DIR)  Directory
do = (DOOR) [Door][1]
ex = (EXEC) Executable file (ie. has 'x' set in permissions)
fi = (FILE) Normal file
ln = (SYMLINK, LINK, LNK)   Symbolic link. If you set this to ‘target’ instead of a numerical value, the color is as for the file pointed to.
mi = (MISSING)  Non-existent file pointed to by a symbolic link (visible when you type ls -l)
no = (NORMAL, NORM) Normal (non-filename) text. Global default, although everything should be something
or = (ORPHAN)   Symbolic link pointing to an orphaned non-existent file
ow = (OTHER_WRITABLE)   Directory that is other-writable (o+w) and not sticky
pi = (FIFO, PIPE)   Named pipe (fifo file)
sg = (SETGID)   File that is setgid (g+s)
so = (SOCK) Socket file
st = (STICKY)   Directory with the sticky bit set (+t) and not other-writable
su = (SETUID)   File that is setuid (u+s)
tw = (STICKY_OTHER_WRITABLE)    Directory that is sticky and other-writable (+t,o+w)
*.extension =   Every file using this extension e.g. *.rpm = files with the ending .rpm

Eine vollständigere Liste finden Sie unter Bigsoft - Konfigurieren von LS_COLORS .

Bei einigen Distributionen möchten Sie möglicherweise auch die Hintergrundfarbe für ow"( OTHER_WRITABLE), dessen Standard nicht lesbar ist" ändern, z. B. in nicht fett gedruckten blauen Text auf grünem Hintergrund.

Sie können zum Beispiel LS_COLORS="$LS_COLORS:di=1;33"am Ende Ihrer .bashrcDatei verwenden, um einen gut lesbaren, orangefarbenen Text auf schwarzem Hintergrund zu erhalten.

Nachdem Sie Ihre .bashrc-Datei geändert haben, müssen Sie Ihre Shell neu starten oder ausführen, damit die Änderungen wirksam werden source ~/.bashrc.

Hinweis: Sie mehr Befehle mit einem kombinieren können Doppelpunkt , zum Beispiel

LS_COLORS=$LS_COLORS:'di=1;33:ln=36' ; export LS_COLORS; ls

Quelle:


3
Das funktioniert gut, danke. Ich persönlich fand es besser, LS_COLORS=$LS_COLORS:'di=1;44:' ; export LS_COLORSdie Verzeichnisse fett weiß auf blauem Hintergrund darzustellen.
Isapir

2
Das scheint bei mir nicht zu funktionieren. Es sieht so aus, als gäbe es irgendwo eine andere Konfigurationsdatei, die überschrieben wird .bashrc- einige Farben funktionieren, andere sehen anders aus. Ordner sind zum Beispiel grün statt blau, aber Dateien sehen korrekt aus. Was könnte es sein?
Nearoo

1
Überprüfen Sie, ob Sie bash oder sh verwenden, und überprüfen Sie auch Ihre .profile-Datei in Ihrem Ausgangsverzeichnis. und global/etc/bash.bashrc
rubo77

5
Sie möchten wahrscheinlich andere beschreibbare und nicht beschreibbare Verzeichnisse ändern. Versuchen Sie etwas ähnlicheresLS_COLORS=$LS_COLORS:'tw=01;35:ow=01;35:' ; export LS_COLORS
Charles L.

2
das funktionierte für ls, aber wie ändere ich die Farbe des Verzeichnisses, in dem ich mich befinde, vor dem # in der Eingabeaufforderung cmd?
Gaia

31

Sehr einfach. Fügen Sie diese drei Zeilen zu ~ / .bashrc hinzu

$ vi ~/.bashrc
export LS_OPTIONS='--color=auto'
eval "$(dircolors -b)"
alias ls='ls $LS_OPTIONS'

Wenn Sie die Änderungen in einer laufenden Bash-Sitzung anwenden möchten, führen Sie Folgendes aus:

source ~/.bashrc

4
Dies ist das einzige, was bei mir funktioniert hat.
Solalito

Es hat bei mir funktioniert, aber ich muss source ~/.bashrcjedes Mal ausgeführt werden, wenn ich mich anmelde. Gibt es eine Möglichkeit, dies zu beheben?
Miguel

@ Miguel: Was bekommst du, wenn du echo $SHELLan der Eingabeaufforderung cmd eingibst ? Ich wette, es ist NICHT /bin/bash. Sie können Ihr aktives .profileoder finden .loginund source $HOME/.bashrcam Ende hinzufügen . Viel Glück.
Shellter

4

LS_COLORS

Dies ist eine Sammlung von Erweiterungen: Farbzuordnungen, die als Umgebungsvariable LS COLORS verwendet werden können.


1
interessant, aber ich kann diese Arbeit nicht in ksh machen.
Herman Toothrot

3

Neben der Antwort von Hegazi können Sie mit dem Befehl dircolors auch die Verzeichnisfarbe und viele andere Farben steuern. Sie können eine Konfigurationsdatei erstellen, die gut dokumentiert ist.

Sie können wie folgt eine .dircolor-Datei in Ihrem Ausgangsverzeichnis erstellen:

dircolors -p > ~/.dircolors

Fügen Sie dann in Ihrer ~ / .bashrc-Datei die Zeilen hinzu

eval "`dircolors -b ~/.dircolors`"
alias ls='ls --color=auto'

Dadurch wird eine Variable $ LS_COLORS für bash erstellt. Das Flag -c wird gesetzt, wenn für csh. Es markiert auch den Befehl ls, um ihn in Farbe anzuzeigen.

Bearbeiten Sie den Wert des DIR-Attributs wie oben in der Farbe der ~ / .dircolor-Datei, um die Farbe des Verzeichnisses (oder eines der anderen enthaltenen Dateitypen für andere Farben) zu ändern. Sie können auch die Farben bestimmter Dateien ändern oder eigene definieren.


2

Die --color=autoOption funktioniert nicht mit iTerm2 auf meinem Mac. Die -GOption funktioniert jedoch. Ich habe den folgenden Alias ​​in meine ~/.profileund jetzt Verzeichnisse eingefügt, die farbig und mit einem /angehängten Pfad versehen sind:

alias ls='ls -F -G'

Es ist, weil es BSD-Utils und nicht Coreutils ist :)
Meeh

0

Das ist mein Ansatz für den Befehl ls mit häufig verwendeten Optionen:

Fügen Sie die folgenden Zeilen in eine Datei mit dem Namen ~ / .alias ein

alias ll='ls -lhF --color=auto'
alias llt='ls -lht --color=auto'
alias lla='ls -alF --color=auto'
alias la='ls -A --color=auto'
alias l='ls -CF --color=auto'
alias ls="ls --color=auto"

Fügen Sie die folgenden Zeilen in ~ / .bashrc ein

if [ -f ~/.alias ]; then
    . ~/.alias
fi

4
Sie müssen nur --color=autoden lsAlias hinzufügen - die anderen Aliase mit erben die Einstellung
Stuart Cardall
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.