Cosa significano i diversi colori in ls?


364

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

Cosa significano quei colori e c'è un manuale su tutti i colori?

Risposte:


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

Per tua informazione:

  • Per disattivare il colore, è necessario commentare le seguenti righe .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, quindi 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       
    } 

    Produzione:
    testo alternativo

Nota:


28
Lo evalscript che mostra la rappresentazione del colore di output per ogni tipo è geniale ... grazie!
Russ,

2
Pure sourcery;)
Homunculus Reticulli

5
Una versione più leggibile di quello evalscript è qui: github.com/gkotian/gautam_linux/blob/master/scripts/colours.sh
Gautam

3
Il rosso è anche un collegamento simbolico morto.
Thomas Ward

1
che dire dei file nel normale testo bianco?
S ..

98

Puoi scoprire quali colori lsusa guardando la $LS_COLORSvariabile:

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

Inoltre, i file sono colorati in base agli attributi:

testo alternativo


  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, ace, 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.


Tutte queste informazioni sono contenute nell'output di dircolors --print-database, ma la sua formattazione è piuttosto illeggibile.

Ecco una spiegazione tecnica di ciò che sta accadendo:

Esempio:

CHR 40;33;01

Il codice colore è composto da tre parti:

  • La prima parte prima del punto e virgola rappresenta lo stile del testo.

    • 00 = nessuno, 01 = grassetto, 04 = trattino basso, 05 = lampeggio, 07 = retromarcia, 08 = nascosto.
  • La seconda e la terza parte sono il colore e il colore di sfondo:

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

Ogni parte può essere omessa, supponendo che inizi a sinistra. cioè "01" significa grassetto, "01; 31" significa grassetto e rosso. E faresti stampare il tuo terminale a colori sfuggendo alle istruzioni \33[e terminandolo con un m. 33, o 1B in esadecimale, è il segno ASCII "ESCAPE" (un carattere speciale nel set di caratteri ASCII). Esempio:

"\33[1;31mHello World\33[m"

Stampa "Hello World" in rosso brillante.

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


Grazie! Stavo guardando una domanda sulla visualizzazione della topologia di Git e mi chiedevo perché alcuni dei personaggi fossero stampati.
pdp,

27

Se digiti dircolors( echo $LS_COLORSfunziona anche) dalla riga di comando otterrai un elenco di codici e colori per molti tipi di file in 1 riga. dircolors --print-databasemostra loro 1 riga alla volta. Ecco un breve elenco (ho cercato di inserire quelli più importanti). In fondo c'è una spiegazione di ciò che rappresentano i diversi codici alla fine di ogni riga:

NORMAL 00 # default globale, anche se tutto dovrebbe essere qualcosa.
FILE 00 # file normale
DIR 01; directory 34 #
LINK 01; link simbolico 36 #. (Se lo imposti su "target" anziché su
 # valore numerico, il colore è come per il file indicato.)
FIFO 40; tubo 33 #
SOCK 01; presa 35 #
PORTA 01; 35 # porta
BLK 40; 33; 01 # driver dispositivo a blocchi
CHR 40; 33; 01 # driver del dispositivo carattere
ORPHAN 40; 31; 01 # link simbolico a file inesistente o file non statable
SETUID 37; 41 # file che è setuid (u + s)
SETGID 30; file 43 # che è setgid (g + s)
STICKY_OTHER_WRITABLE 30; 42 # dir che è appiccicoso e scrivibile da altri (+ t, o + w)
OTHER_WRITABLE 34; 42 # dir che è altro scrivibile (o + w) e non appiccicoso
STICKY 37; 44 # dir con il bit appiccicoso impostato (+ t) e non scrivibile altro
# archivi o compressi (rosso brillante)
.tar 01; 31
.tgz 01; 31
# formati di immagine
.jpg 01; 35
.jpeg 01; 35
.gif 01; 35
.bmp 01; 35
# formati audio
.aac 00; 36
.flac 00; 36
.ogg 00; 36
  • Codici attributo: 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
  • Codici colore del 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 è un esempio su come impostare un colore per un file:

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

Questo imposterà *.ogge .mp3a bold magenta. E se lo metti nel tuo .bashrcfile diventerà permanente.


2
Ehi forse qualcun altro arriva con una risposta migliore. A proposito mi hai fatto superare i 15k con questo voto;)
Rinzwind

rock on! Ti sei trovato lì ... Grazie ancora, ho fatto una / "stringa" per cercare alcuni dei colori di cui non ero sicuro
user784637

Questa (eccellente) risposta è stata unita , nel caso ti stia chiedendo delle date. :-)
Stefano Palazzo

@Rinzwind, quindi per impostare un colore per il pdffile, il processo è da usare export? È possibile semplicemente aggiungere un'estensione nella LS_COLORS variabile predefinita ?
Sigur,

23

Questo si espande sulla risposta di Karthick87 .


Con l'impostazione predefinita

  • Non colorato (bianco) : testo di file o non di nome file (ad es. Autorizzazioni nell'output di ls -l)
  • Blu grassetto : directory
  • Ciano grassetto : collegamento simbolico
  • Verde grassetto : file eseguibile
  • Rosso grassetto : file di archivio
  • Magenta grassetto : file immagine, video, grafica, ecc. O porta o presa
  • Ciano : file audio
  • Giallo con sfondo nero : pipe (AKA FIFO)
  • Giallo grassetto con sfondo nero : dispositivo a blocchi o dispositivo a caratteri
  • Rosso grassetto con sfondo nero : collegamento simbolico orfano o file mancante
  • Non colorato con sfondo rosso : file set-user-ID
  • Nero con sfondo giallo : file set-group-ID
  • Nero con sfondo rosso : file con capacità
  • Bianco con sfondo blu : directory adesiva
  • Blu con sfondo verde : directory scrivibile altro
  • Nero con sfondo verde : directory appiccicosa e scrivibile altro

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

Uscita con impostazione predefinita:

screenshot di gnome-terminal

Output con la mia configurazione (dircolors personalizzati e tema del terminale personalizzato Solarized):

screenshot di gnome-terminal

Ho ottenuto le descrizioni da dircolors -pe man dir_colors, e ho colmato le lacune con le mie ricerche.

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


Come sapevi che rssignifica RESET, mhsignifica MULTIHARDLINK, casignifica CAPABILITYecc?
Fredrick Gauss,

@FredrickGauss Mentre scrivevo nella risposta, ho ricevuto descrizioni dalla corsa dircolors -p.
wjandrea,

dircolors -pnon dice che rs è RESET 0 # ripristinato al colore "normale" .
Fredrick Gauss,

@FredrickGauss Non esplicitamente, ma "RESET" è l'unico che può essere abbreviato come "rs" e il colore (0) corrisponde.
wjandrea,

18

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

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

Il .bashrc predefinito dovrebbe già essere configurato non solo per sfruttare il codice colore del sistema, ma anche uno in ~ / .dircolors in modo da scaricare l'output di dircolors su .dircolor in modo da poter iniziare con quello usando questo comando. dircolors -p > ~/.dircolors

Alternativa: prendi un dircolor a 256 colori molto simile dal progetto solarizzato di Seebi .

Prendi questo script colortest ed eseguilo con il comando in colortest -wmodo 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 su codici colore estesi, posso applicarlo.

Quindi hai un colore, e adesso? Per prima cosa dobbiamo creare la stringa.

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

Scegli un codice attributo: 00 = nessuno 01 = grassetto 04 = trattino basso 05 = lampeggio 07 = retromarcia 08 = nascosto

Quindi selezionare append ;38;5;a quel codice di attributo per indicare il colore del testo per ottenere 00; 38; 5; e poi aggiungi il tuo colore. Ho scelto 208 quindi ottengo 00;38;5;208.

Se vuoi mettere anche uno sfondo su di esso, scegli un altro colore (diciamo 56) con lo script più colorato e l'appendice ;48;5;per lo sfondo e 56 per il colore per ottenere una stringa totale di 00;38;5;208;48;5;56.

Quindi ora ce l'hai, cosa ci fai?

vim ~/.dircolors e trova la sezione che vuoi cambiare (per me che è DIR) alla stringa che abbiamo stabilito sopra "00; 38; 5; 208".

Questo non si applica immediatamente, dovrai caricare la configurazione. Utilizzare dircolors ~/.dircolorsper ottenere il codice per impostare la variabile LS_COLORS. Potresti semplicemente incollarlo nella sessione del terminale oppure puoi chiudere il terminale e riaprirlo. È inoltre possibile reindirizzarlo in un file ed eseguirlo come script di shell.

Puoi fare la stessa procedura con 16 colori. Non hai bisogno di cose speciali; 38; 5 o; 48; 5. Basta lanciare i numeri nella stringa e godersi la semplicità.

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


si prega di verificare se 256 colori funzioneranno solo con terminali compatibili con xterm . Quindi, 256 colori non funzionano per me con Konsole ma funzionano con xterm e rxvt-unicode .
DK Bose,

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.