Jak zmienić kolor dla katalogów z ls w konsoli?

165

Na mojej konsoli kolor katalogów jest tak niebieski, że trudno go odczytać na ciemnym tle.

Jak mogę zmienić definicje kolorów ls?

rubo77
źródło

Odpowiedzi:

250

Aby zmienić kolory katalogu, otwórz ~/.bashrcplik w edytorze

nano ~/.bashrc

i wprowadź następujący wpis na końcu pliku:

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

Niektóre fajne wybory kolorów (w tym przypadku 0;35jest to fioletowy) to:

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

Pierwszą liczbą jest styl (1 = pogrubienie), następnie średnik, a następnie rzeczywista liczba kolorów, możliwe style (efekty) to:

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)

Możliwe tła:

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

Wszystkie możliwe kolory:

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

Można je nawet łączyć, aby parametr taki jak:

di=1;4;31;42

w zmiennej LS_COLORS spowoduje, że katalogi pojawią się pogrubioną, podkreśloną czerwoną czcionką z zielonym tłem!

Aby przetestować wszystkie te kolory i style w swoim terminalu, możesz użyć jednego z:

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

Można także zmieniać inne rodzaje plików, korzystając z polecenia ls, definiując każdy rodzaj za pomocą:

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

Bardziej kompletna lista dostępna jest na Bigsoft - Konfigurowanie LS_COLORS .

W niektórych dystrybucjach możesz także chcieć zmienić kolor tła dla ow„( OTHER_WRITABLE), którego domyślnie nie można odczytać”, na przykład na niepogrubiony niebieski tekst na zielonym tle.

Możesz na przykład użyć LS_COLORS="$LS_COLORS:di=1;33"na końcu .bashrcpliku, aby uzyskać czytelny, pogrubiony pomarańczowy tekst na czarnym tle.

Po zmianie pliku .bashrc, aby wprowadzić zmiany, musisz ponownie uruchomić powłokę lub uruchomić source ~/.bashrc.

Uwaga: na przykład możesz połączyć więcej poleceń z dwukropkiem

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

Źródło:

rubo77
źródło
3
Działa to dobrze, dzięki. Osobiście uważam, że lepiej jest ustawić, LS_COLORS=$LS_COLORS:'di=1;44:' ; export LS_COLORSktóry pokazuje katalogi pogrubioną białą czcionką na niebieskim tle.
isapir
2
Wydaje mi się, że to nie działa. Wygląda na to, że gdzieś jest inny plik konfiguracyjny, który zastępuje .bashrc- niektóre kolory działają, inne wyglądają inaczej. Na przykład foldery są zielone zamiast niebieskiego, ale pliki wyglądają poprawnie. Co to mogło być?
Nearoo
1
sprawdź, czy używasz bash czy sh, a także sprawdź plik .profile w katalogu domowym. i globalny/etc/bash.bashrc
rubo77
5
Prawdopodobnie chcesz zmodyfikować inne zapisywalne i lepkie inne zapisywalne katalogi. Spróbuj czegoś więcejLS_COLORS=$LS_COLORS:'tw=01;35:ow=01;35:' ; export LS_COLORS
Charles L.
2
działało dla ls, ale jak mogę zmienić kolor katalogu, w którym jestem, przed pytaniem # w cmd?
Gaia
31

Bardzo proste. Dodaj te trzy linie do ~ / .bashrc

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

Jeśli chcesz zastosować zmiany w uruchomionej sesji bash, uruchom:

source ~/.bashrc
Abdel Hegazi
źródło
4
To jedyna rzecz, która działała dla mnie.
solalito
To działało dla mnie, ale muszę się uruchamiać przy source ~/.bashrckażdym logowaniu. Czy istnieje sposób, aby to naprawić?
Miguel
@Miguel: co otrzymujesz po wpisaniu echo $SHELLpolecenia cmd? Założę się, że to NIE jest /bin/bash. Możesz znaleźć swoją aktywną .profilelub .logini dodać source $HOME/.bashrcna końcu. Powodzenia.
shellter
4

LS_COLORS

Jest to zbiór rozszerzeń: mapowań kolorów, odpowiednich do użycia jako zmienna środowiskowa LS COLORS.

rubo77
źródło
1
ciekawe, ale nie mogę sprawić, by działało w ksh.
Herman Toothrot,
3

Zgodnie z odpowiedzią Hegazi możesz faktycznie kontrolować kolor katalogu i wiele innych kolorów za pomocą polecenia dircolors. Możesz utworzyć plik konfiguracji, który jest dobrze udokumentowany.

Możesz utworzyć plik .dircolor w swoim katalogu domowym w następujący sposób:

dircolors -p > ~/.dircolors

Następnie w swoim pliku ~ / .bashrc dodaj linie

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

Spowoduje to utworzenie zmiennej $ LS_COLORS dla bash. Flaga -c zostanie ustawiona, jeśli dla csh. Zaznacza także polecenie ls, aby wyświetlało się w kolorze.

Edytuj wartość atrybutu DIR jak wyżej w kolorze pliku ~ / .dircolor, aby zmienić kolor katalogu (lub dowolnego z innych typów plików dla innych kolorów). Możesz także zmienić kolory określonych plików lub zdefiniować własne.

uśmiechnięta żaba
źródło
2

Ta --color=autoopcja nie działa w przypadku używania iTerm2 na komputerze Mac. Ta -Gopcja działa. Umieszczam następujący alias w moich, ~/.profilea teraz katalogi są kolorowe i /dołączone końcowe :

alias ls='ls -F -G'
John Slavick
źródło
To dlatego, że są to narzędzia BSD, a nie coreutils :)
Meeh
0

Oto moje podejście do polecenia ls z często używanymi opcjami:

dodaj następujące wiersze do pliku o nazwie ~ / .alias

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"

dodaj następujące wiersze do ~ / .bashrc

if [ -f ~/.alias ]; then
    . ~/.alias
fi
Jonathan L.
źródło
4
wystarczy dodać --color=autodo lsaliasu - pozostałe aliasy dziedziczą ustawienie
Stuart Cardall,