Come posso cambiare il colore delle directory con ls nella console?


166

Sulla mia console il colore per le directory è così blu, che è difficile da leggere su uno sfondo scuro.

Come posso modificare le definizioni dei colori per ls?

Risposte:


250

Per cambiare i colori della directory, apri il tuo ~/.bashrcfile con il tuo editor

nano ~/.bashrc

e inserire la seguente voce alla fine del file:

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

Alcune belle scelte di colore (in questo caso 0;35è viola) sono:

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

Il primo numero è lo stile (1 = grassetto), seguito da un punto e virgola, quindi il numero effettivo del colore, i possibili stili (effetti) sono:

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)

I possibili sfondi:

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

Tutti i colori possibili:

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

Questi possono anche essere combinati, in modo che un parametro come:

di=1;4;31;42

nella tua variabile LS_COLORS farebbero apparire le directory in grassetto sottolineato testo rosso con sfondo verde!

Per testare tutti questi colori e stili nel tuo terminale, puoi usare uno di:

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

Puoi anche cambiare altri tipi di file quando usi il comando ls definendo ogni tipo con:

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

Un elenco più completo è disponibile su Bigsoft - Configuring LS_COLORS .

In alcune distribuzioni, potresti anche voler cambiare il colore di sfondo di ow"( OTHER_WRITABLE) il cui valore predefinito non è leggibile", ad esempio il testo blu non in grassetto su sfondo verde.

Ad esempio, è possibile utilizzare LS_COLORS="$LS_COLORS:di=1;33"alla fine del .bashrcfile per ottenere un bel testo in grassetto arancione leggibile su sfondo nero.

Dopo aver modificato il file .bashrc, per rendere effettive le modifiche dovrai riavviare la shell o eseguire source ~/.bashrc.

Nota: è possibile combinare più comandi con due punti , ad esempio

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

Fonte:


3
Funziona bene, grazie. Personalmente ho trovato meglio impostare LS_COLORS=$LS_COLORS:'di=1;44:' ; export LS_COLORSche mostra le directory in grassetto bianco su sfondo blu.
Isapir,

2
Questo non sembra funzionare per me. Sembra che ci sia un altro file di configurazione da qualche parte che sovrascrive .bashrc: alcuni colori funzionano, altri hanno un aspetto diverso. Le cartelle sono verdi, ad esempio anziché blu, ma i file appaiono correttamente. Cosa potrebbe essere?
Nearoo,

1
controlla se stai usando bash o sh e controlla anche il tuo file .profile nella tua home directory. e globale/etc/bash.bashrc
rubo77

5
Probabilmente vuoi modificare altre directory scrivibili e appiccicose. Prova qualcosa di più simileLS_COLORS=$LS_COLORS:'tw=01;35:ow=01;35:' ; export LS_COLORS
Charles L.

2
che ha funzionato per ls, ma come posso cambiare il colore della directory in cui mi trovo, prima del # nel prompt di cmd?
Gaia,

31

Molto semplice. Aggiungi queste tre righe a ~ / .bashrc

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

Se si desidera applicare le modifiche in una sessione bash in esecuzione, eseguire:

source ~/.bashrc

4
Questa è l'unica cosa che ha funzionato per me.
solalito,

Ha funzionato per me, ma devo eseguirlo source ~/.bashrcogni volta che eseguo l'accesso. Esiste un modo per risolvere questo problema?
Miguel,

@Miguel: cosa ottieni quando digiti echo $SHELLdal prompt di cmd? Scommetto che NON lo è /bin/bash. Puoi trovare il tuo attivo .profileo .logine aggiungere source $HOME/.bashrcalla fine. In bocca al lupo.
shellter

4

LS_COLORS

Questa è una raccolta di estensioni: mappature dei colori, adatte per l'uso come variabile d'ambiente LS COLORS.


1
interessante ma non riesco a farlo funzionare in ksh.
Herman Toothrot,

4

Oltre alla risposta di Hegazi, puoi effettivamente controllare il colore della directory e molti altri colori usando il comando dircolors. È possibile creare un file di configurazione ben documentato.

Puoi creare un file .dircolor nella tua home directory come segue:

dircolors -p > ~/.dircolors

Quindi nel tuo file ~ / .bashrc aggiungi le righe

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

Questo creerà una variabile $ LS_COLORS per bash. Il flag -c verrà impostato se per csh. Contrassegna anche il comando ls per visualizzarlo a colori.

Modifica il valore dell'attributo DIR come sopra nel colore del file ~ / .dircolor per cambiare il colore della directory (o uno qualsiasi degli altri tipi di file inclusi per altri colori). Puoi anche cambiare i colori di file specifici o definirne uno tuo.


2

L' --color=autoopzione non funziona per me usando iTerm2 sul mio Mac. L' -Gopzione funziona però. Ho inserito il seguente alias nella mia ~/.profilee ora le directory sono colorate e ho /aggiunto un finale :

alias ls='ls -F -G'

È perché sono programmi di utilità BSD e non coreutils :)
Meeh

0

Questo è il mio approccio al comando ls con le opzioni comunemente usate:

aggiungere le seguenti righe in un file chiamato ~ / .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"

aggiungi le seguenti righe in ~ / .bashrc

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

4
è sufficiente aggiungere --color=autoalla lsalias - gli altri alias con l'eredita
Stuart Cardall
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.