Che cosa significano i diversi colori in ls?

313

Che cosa significano i diversi colori nel comando ls di Ubuntu? Ad esempio, quando digito il comando ls in una delle mie cartelle, ottengo uno dei file in verde chiaro, l'altro (che è una cartella) in blu con evidenziazione verde.

Che cosa significano questi colori e c'è un manuale su tutti i colori?

    
posta Rafid 14.12.2010 - 09:15
fonte

5 risposte

330
  • Blu : directory
  • Verde : file di dati eseguibile o riconosciuto
  • Sky Blue : file di link simbolici
  • Giallo con sfondo nero : dispositivo
  • Rosa : file immagine grafica
  • Rosso : file di archivio
  • Rosso con sfondo nero : link interrotto

Per vostra informazione:

  • Per disattivare il colore, devi commentare le seguenti righe in .bashrc .

    # enable color support of ls and also add handy aliases
    #if [ -x /usr/bin/dircolors ]; then
    #    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    #    alias ls='ls --color=auto'
    #    #alias dir='dir --color=auto'
    #    #alias vdir='vdir --color=auto'
    #
    #    alias grep='grep --color=auto'
    #    alias fgrep='fgrep --color=auto'
    #    alias egrep='egrep --color=auto'
    #fi
    
  • Inoltre, se vuoi vedere i tuoi significati di colore bash, copia / incolla i seguenti codici nel tuo terminale.

      
    eval $(echo "no:global default;fi:normal file;di:directory;ln:symbolic link;pi:named pipe;so:socket;do:door;bd:block device;cd:character device;or:orphan symlink;mi:missing file;su:set uid;sg:set gid;tw:sticky other writable;ow:other writable;st:sticky;ex:executable;"|sed -e 's/:/="/g; s/\;/"\n/g')           
    {      
      IFS=:     
      for i in $LS_COLORS     
      do        
        echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m" 
      done       
    } 
    

    Output:

Nota:

  • Perulterioriinformazioniscrivi man dir_colors nel terminale.
risposta data karthick87 14.12.2010 - 09:18
fonte
90

Puoi scoprire quali colori ls utilizza osservando la variabile $LS_COLORS :

  • Turchese: file audio 1
  • Rosso brillante: archivi e file compressi 2
  • Viola: immagini e video 3

Inoltre, i file sono colorati per attributi:

  1. aac,au,flac,mid,midi,mka,mp3,mpc,ogg,ra,wav,axa,oga,spx,xspf.

  2. tar,tgz,arj,taz,lzh,lzma,tlz,txz,zip,z,z,dz,gz,lz,xz,bz2,bz,tbz,tbz2,tz,deb,rpm,jar,rar,asso,zoo,cpio,7z,rz.

  3. jpg,jpeg,gif,bmp,pbm,pgm,ppm,tga,xbm,xpm,tif,tiff,png,svg,svgz,mng,pcx,mov,mpg,mpeg,m2v,mkv,ogm,mp4,m4v,mp4v,vob,qt,nuv,wmv,asf,rm,rmvb,flc,avi,fli,flv,gl,dl,xcf,xwd,yuv,cgm,emf,axv,anx,ogv,OGX.

Tuttequesteinformazionisonocontenutenell'outputdidircolors--print-database,malasuaformattazioneèalquantoilleggibile.

Eccounaspiegazionetecnicadicosastasuccedendo:

Esempio:

CHR40;33;01

Ilcodicecoloreècompostodatreparti:

  • Laprimaparteprimadelpuntoevirgolarappresentalostiledeltesto.

    • 00=nessuno,01=grassetto,04=trattinobasso,05=lampeggia,07=retromarcia,08=nascosto.
  • Lasecondaelaterzapartesonoilcoloreeilcoloredellosfondo:

    • 30=nero,31=rosso,32=verde,33=giallo,34=blu,35=magenta,36=ciano,37=bianco.

Ognipartepuòessereomessa,assumendol'avvioasinistra.Adesempio"01" significa in grassetto, "01; 31" significa in grassetto e rosso. E il tuo terminale dovrebbe stampare a colori evadendo l'istruzione con [ e terminandola con un m . 33, o 1B in esadecimale, è il segno ASCII "ESCAPE" (un carattere speciale nel set di caratteri ASCII). Esempio:

"[1;31mHello World[m"

Stampa "Hello World" in rosso.

Il comando ls con l'argomento --color=auto (su Ubuntu, ls è un alias per ls --color=auto ) passa attraverso tutti i nomi di file e cerca prima di abbinare diversi tipi, come Eseguibile, Pipe e così via . Cerca quindi di abbinare espressioni regolari come * .wav e stampa il nome del file risultante, incluso in queste istruzioni che cambiano colore per bash.

    
risposta data Stefano Palazzo 14.12.2010 - 09:57
fonte
27

Se digiti dircolors ( echo $LS_COLORS funziona anche) dal comando linea otterrai una lista di codici e colori per molti tipi di file in 1 linea. dircolors --print-database mostra loro 1 riga alla volta. Ecco una breve lista (ho cercato di inserire quelli più importanti). In fondo c'è una spiegazione su cosa rappresentano i diversi codici alla fine di ogni riga:

NORMAL 00 # global default, although everything should be something.
FILE 00 # normal file
DIR 01;34 # directory
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
 # numerical value, the color is as for the file pointed to.)
FIFO 40;33 # pipe
SOCK 01;35 # socket
DOOR 01;35 # door
BLK 40;33;01 # block device driver
CHR 40;33;01 # character device driver
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
SETUID 37;41 # file that is setuid (u+s)
SETGID 30;43 # file that is setgid (g+s)
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
# archives or compressed (bright red)
.tar 01;31
.tgz 01;31
# image formats
.jpg 01;35
.jpeg 01;35
.gif 01;35
.bmp 01;35
# audio formats
.aac 00;36
.flac 00;36
.ogg 00;36
  • Codici degli attributi: 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
  • Codici colore testo: 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
  • Codici colore di sfondo: 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white

Se vuoi giocare con questo qui c'è un esempio su come impostare un colore per un file:

export LS_COLORS=$LS_COLORS:"*.ogg=01;35":"*.mp3=01;35"  

Questo imposterà *.ogg e .mp3 a bold magenta . E se lo metti nel tuo file .bashrc diventerà permanente.

    
risposta data Rinzwind 14.09.2011 - 10:25
fonte
17

Nessuna delle risposte qui include le 256 opzioni di colore nelle ultime versioni di Ubuntu. I colori sono carenti (alcuni colori mi danno problemi l'uno vicino all'altro) quindi la directory blu di default sul nero è davvero difficile da leggere per me. Quello che segue è la mia ricerca per cambiarlo.

Digita dircolors -p |less per vedere il tuo codice colore corrente.

L'impostazione predefinita .bashrc dovrebbe essere già configurata non solo per sfruttare il codice colore del sistema, ma anche uno in ~ / .dircolors, quindi scaricare l'output di dircolors su .dircolor in modo da poter iniziare con questo comando. % Co_de%

Alternativa: prendi un colore molto simile a 256 colori da seebi's solarized project.

Prendi questo script colortest ed eseguilo con il comando dircolors -p > ~/.dircolors in modo da poter vedere tutti i colori contemporaneamente. Scegli un colore. Mi piace l'arancione # 208. Voglio che sia il colore del testo, quindi, usando queste informazioni sui codici colore estesi, posso applicarlo.

Quindi hai un colore, ora cosa. Per prima cosa dobbiamo creare la stringa.

Il primo numero sarà un codice di attributo, molto probabilmente 00, ma se vuoi farlo lampeggiare vai con 05:

% Bl0ck_qu0te%

Avanti seleziona aggiungi colortest -w a quel codice di attributo per indicare il colore del tuo testo per ottenere 00; 38; 5; e poi aggiungi il tuo colore. Ho scelto 208 quindi ottengo ;38;5; .

Se vuoi anche metterne uno sfondo, scegli un altro colore (diciamo 56) con lo script colortest e l'append 00;38;5;208 per lo sfondo e 56 per il colore per ottenere una stringa totale di ;48;5; .

Quindi ora ce l'hai, cosa ne fai?

00;38;5;208;48;5;56 e trova la sezione che vuoi cambiare (per me che è DIR) nella stringa che abbiamo determinato sopra "00; 38; 5; 208".

Questo non si applica immediatamente, dovrai caricare la configurazione. Usa vim ~/.dircolors nel codice get per impostare la variabile LS_COLORS. Potresti semplicemente incollarlo nella sessione del terminale oppure puoi chiudere il terminale e riaprirlo. Potresti anche inserirlo in un file ed eseguirlo come uno script di shell.

Puoi fare la stessa procedura con 16 colori. Non hai bisogno del materiale speciale; 38; 5 o; 48; 5. Basta inserire i numeri nella stringa e goderti la semplicità.

Grazie a Dan e seebi per le loro note e il codice su questo.

    
risposta data flickerfly 22.03.2013 - 21:45
fonte
17

Questo amplia la risposta di Karthick87 .

Con l'impostazione predefinita

  • Non colorato (bianco) : file o testo non di nome file (ad esempio autorizzazioni nell'output di ls -l )
  • Grassetto blu : directory
  • Grassetto cyan : link simbolico
  • Grassetto : file eseguibile
  • Grassetto rosso : file di archivio
  • Grassetto magenta : file immagine, video, grafica, ecc. o porta o socket
  • Ciano : file audio
  • Giallo con sfondo nero : pipe (AKA FIFO)
  • Grassetto giallo con sfondo nero : dispositivo di blocco o dispositivo carattere
  • Grassetto rosso con sfondo nero : symlink orfano o file mancante
  • Non colorato con sfondo rosso : file set-user-ID
  • Nero con sfondo giallo : set-group-ID file
  • Nero con sfondo rosso : file con capacità
  • Bianco con sfondo blu : directory adesiva
  • Blu con sfondo verde : directory scrivibile da altri
  • Nero con sfondo verde : directory adesiva e con scrittura diversa

Script per mostrare i colori

#!/bin/bash
# For LS_COLORS, print type and description in the relevant color.

IFS=:
for ls_color in $LS_COLORS; do
    color="${ls_color#*=}"
    type="${ls_color%=*}"

    # Add descriptions for named types.
    case "$type" in
    bd) type+=" (block device)" ;;
    ca) type+=" (file with capability)" ;;
    cd) type+=" (character device)" ;;
    di) type+=" (directory)" ;;
    do) type+=" (door)" ;;
    ex) type+=" (executable file)" ;;
    fi) type+=" (regular file)" ;;
    ln) type+=" (symbolic link)" ;;
    mh) type+=" (multi-hardlink)" ;;
    mi) type+=" (missing file)" ;;
    no) type+=" (normal non-filename text)" ;;
    or) type+=" (orphan symlink)" ;;
    ow) type+=" (other-writable directory)" ;;
    pi) type+=" (named pipe, AKA FIFO)" ;;
    rs) type+=" (reset to no color)" ;;
    sg) type+=" (set-group-ID)" ;;
    so) type+=" (socket)" ;;
    st) type+=" (sticky directory)" ;;
    su) type+=" (set-user-ID)" ;;
    tw) type+=" (sticky and other-writable directory)" ;;
    esac

    # Separate each color with a newline.
    if [[ $color_prev ]] && [[ $color != $color_prev ]]; then
        echo
    fi

    printf "\e[%sm%s\e[m " "$color" "$type"

    # For next loop
    color_prev="$color"
done
echo

Output con impostazione predefinita:

Outputconlamiaconfigurazione(dircolorspersonalizzatietemadelterminaleSolarizedpersonalizzato):

Ho ricevuto le descrizioni da dircolors -p e man dir_colors e ho riempito gli spazi vuoti con le mie ricerche.

I colori e le descrizioni sono gli stessi dal 14.04 al 17.10.

    
risposta data wjandrea 17.02.2017 - 22:05
fonte

Leggi altre domande sui tag