Cosa causa questo sfondo verde nell'output di ls?


141

screencap dell'output di ls su macchina linux

Ci sono due directory mostrate da 'ls'. Normalmente le directory ovunque sono blu su sfondo nero. Ma il primo è blu su verde e impossibile da leggere. Perchè è questo? Come renderlo blu su nero, o almeno qualcosa di leggero su qualcosa di scuro?

Questo è su Ubuntu 12.04, usando bash in Gnome Terminal. A Konsole, il blu è leggermente più scuro e può essere letto, anche se potrebbe essere molto meglio.

Risposte:


162

Oltre a colorare i file in base al loro tipo (turchese per file audio, rosso vivo per archivi e file compressi e viola per immagini e video), lscolora anche file e directory in base ai loro attributi:

  • Il testo nero con sfondo verde indica che una directory è scrivibile da altri a parte l'utente e il gruppo proprietario e ha il bit sticky impostato ( o+w, +t).
  • Il testo blu con sfondo verde indica che una directory è scrivibile da altri a parte l'utente e il gruppo proprietari e non ha il set di bit appiccicoso ( o+w, -t).

Stephano Palazzo a Ask Ubuntu ha realizzato questa immagine molto istruttiva sui diversi colori degli attributi:

Cosa significano i diversi colori nel terminale

Come ha sottolineato Terdon , le impostazioni del colore possono essere modificate tramite dircolors. È possibile accedere a un elenco delle diverse impostazioni di colorazione con dircolors --print-database.

Ogni riga di output, ad esempio BLK 40;33;01, ha la forma:

[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR]
  • TARGET indica il bersaglio per la regola di colorazione

  • TEXT_STYLE indica lo stile del testo:

    • 00 = nessuno
    • 01 = grassetto
    • 04 = trattino basso
    • 05 = lampeggio
    • 07 = retromarcia,
    • 08 = nascosto
  • FOREGROUND_COLOR indica il colore di primo piano:

    • 30 = nero
    • 31 = rosso
    • 32 = verde
    • 33 = giallo
    • 34 = blu,
    • 35 = magenta
    • 36 = ciano
    • 37 = bianco
  • BACKGROUND_COLOR indica i colori di sfondo:

    • 40 = nero
    • 41 = rosso
    • 42 = verde
    • 43 = giallo
    • 44 = blu,
    • 45 = magenta
    • 46 = ciano
    • 47 = bianco

I campi possono essere omessi a partire da destra, quindi ad esempio .tar 01;31significa grassetto e rosso.

XTerm e la maggior parte degli emulatori di terminali moderni supportano 256 colori.

Un codice colore di primo piano XTerm a 256 colori ha la forma:

38;5;[FOREGROUND_COLOR]

Un codice colore di sfondo XTerm a 256 colori è nel formato:

48;5;[BACKGROUND_COLOR]

dove entrambi FOREGROUND_COLORed BACKGROUND_COLORè un numero compreso nell'intervallo 0-255. Un elenco completo di codici colore per le modalità di colore 16 e 256 è mostrato nello screenshot seguente:

16 e 256 codici colore modalità colore


5
I codici BACKGROUND_COLOR non sono gli stessi di FOREGROUND_COLOR; I codici di sfondo sono 40-47
Ryan V. Bissell,

38;5;avvia un codice colore di primo piano xterm a 256 colori. 48;5;avvia un codice colore di sfondo xterm a 256 colori. Il ciano nell'output dei miei dircolors 38;5;51 non è 36però il risultato è lo stesso.
stevesliva,

1
@stevesliva: grazie per il tuo commento. Ho modificato la risposta per indicare correttamente i codici colore di sfondo e descrivere i codici colore di primo piano a 256 colori e di sfondo.
Thomas Nyman,

55

I colori di lspossono rappresentare le autorizzazioni, l'impostazione predefinita per alcuni sistemi è mostrare le directory in cui tutti hanno autorizzazioni di scrittura con uno sfondo verde:

inserisci qui la descrizione dell'immagine

Puoi cambiare i colori modificando la tua $LS_COLORSvariabile usando dircolors(da man ls):

   Using color to distinguish file types is disabled both by  default  and
   with  --color=never.  With --color=auto, ls emits color codes only when
   standard output is connected to a terminal.  The LS_COLORS  environment
   variable can change the settings.  Use the dircolors command to set it.

La sintassi è certamente fastidiosa qui ma puoi cambiare questo colore creando un file con i colori che desideri e salvandolo come ~/.dircolors:

dircolors -p > ~/.dircolors

Quel comando stampa le impostazioni predefinite in ~/.dircolors. Sarà quindi necessario modificare quel file e cambiare questa riga:

OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky

Ad esempio, per renderlo testo nero su uno sfondo rosso (vedi qui per un elenco di codici colore):

OTHER_WRITABLE 30;41 # dir that is other-writable (o+w) and not sticky

Non è necessario disporre di tutti i valori predefiniti, è anche possibile creare un file con una sola riga, ridefinendo solo quello che si desidera modificare. Ad ogni modo, una volta creato il file, caricalo con:

eval "$(dircolors ~/.dircolors)";

Ed eccolo in azione:

inserisci qui la descrizione dell'immagine

Affinché ciò accada automaticamente, aggiungi il evalcomando sopra al tuo ~/.bashrcfile.


8
I colori predefiniti sembrano spesso indicare che l'autore originale ci odia e i nostri occhi però ...
kurtm

1
Grazie. Perché a volte scrivi ~ / .dirname e talvolta ~ / dircolors, a volte ~ / .dircolors? dovrebbero essere uguali?
Tim

Grazie. Perché eval "$(dircolors ~/dircolors)";invece di un modo più diretto come dircolors ~/dircolors?
Tim

@Tim perché dircolors stampa solo le impostazioni, è necessario valutarle per poterle leggere.
terdon

per loro di essere letto da chi?
Tim

11

Mentre tutte le risposte tecniche sono vere, lo considererei un po 'un avvertimento informale, che hai dato un po' i diritti a generosamente o copiando criss + cross ... (il più delle volte lo facciamo tutti, per far funzionare le cose inizialmente, eh ?)

Come renderlo blu su nero, ...?

Un buon "de-green" per tornare ai diritti che molto probabilmente desideri è questa affermazione:

chmod -R a-x,o-w,+X thatGreenFolderWithSubfolders/

Comprendi meglio cosa fa, se capisci lo scopo di maiuscole + X "esecuzione speciale", ovvero vedi Wikipedia

È davvero utile solo se usato con '+' e di solito in combinazione con l'opzione -R per dare al gruppo o altro accesso a un grande albero di directory senza impostare il permesso di esecuzione su file normali (come file di testo), che normalmente accadrebbe se hai appena usato "chmod -R a + rx ...


8

Ho avuto la stessa domanda, la risposta di Terdon è buona ma penso che ci sia confusione tra dirname e dircolors?

Ad ogni modo, dopo qualche ulteriore ricerca ho potuto cambiare i colori, quindi condivido la mia soluzione qui. Potrebbe essere utile per qualcuno un giorno!

Quindi, 3 semplici passaggi:

Innanzitutto, come ha detto Terdon, copia i colori predefiniti in un file

dircolors -p > ~/.dircolors

Quindi modificare questo file. Puoi trovare alcuni valori per i colori all'interno, ma ne ho trovati di più qui :)

E infine, aggiungi la seguente riga al tuo ~/.bashrcfile per caricare automaticamente i colori quando apri un terminale:

eval 'dircolors ~/.dircolors' > /dev/null

Ecco :)


1
perché ~/.zshrcdovevo andare if [[ -f ~/.dircolors ]] ; then eval $(dircolors -b ~/.dircolors) elif [[ -f /etc/DIR_COLORS ]] ; then eval $(dircolors -b /etc/DIR_COLORS) fi. Scusate l'interruzione di linea sono orribili
Eric D. Johnson,

2

Per risolvere rapidamente il problema, (rendere i file scrivibili in giallo su nobg):

LS_COLORS+=':ow=01;33'

Sostituisci 33con il 34blu su nobg. Ancora più semplice, per farlo su Nobg:

LS_COLORS+=:ow=

Per rendere permanente la modifica, aggiungila al tuo .profile:

echo "export LS_COLORS+=':ow=01;33'" >> ~/.profile

Per visualizzare le regole relative alla non estensione di LS_COLORS:

echo "$LS_COLORS" | sed 's/:/\n/g' | grep -v '\*.'

sedmette ogni regola su una riga e greprimuove le regole che iniziano per*.'.


Per esplorare i lscolori sul tuo terminale, considera l'utilizzo

C="$LS_COLORS"
function sc () {
    echo "$LS_COLORS" | sed 's/:/\n/g' | grep -v '\*.'
}
function t () {
    ls /mnt # Or the path to your example directory.
}

Poi

LS_COLORS="$C:ow=38;5;250;48;5;025";t

Come affermato in un'altra risposta (quella di Thomas Nyman), 38;5;è il prefisso per il primo piano x-term a 256 colori e 48;5;per lo sfondo x-termine a 256 colori. 256 colori, tuttavia, non sono supportati da tutti i terminali.

Vedi anche -Che cosa significano i diversi colori in ls? - su AskUbuntu.


1

Bene, questo significa che questa cartella ha le autorizzazioni se si esegue questo:

сhmod og-w AU_LI

rimuoverà bgcolor :)


0

Per risolvere questo problema, prova il parametro ow su LS_COLORS

Per esempio:

~LS_COLORS='fi=0:ln=5:pi=0:so=7:bd=5:cd=5:or=31:mi=0:ex=93:*.py=36:di=40:*.zip=33:*.tgz=33'
~ls -l

inserisci qui la descrizione dell'immagine

Ora aggiungi l' opzione ow

~export LS_COLORS='fi=0:ln=5:pi=0:so=7:bd=5:cd=5:or=31:mi=0:ex=93:*.py=36:di=40:*.zip=33:*.tgz=33:ow=0'
~ls -l

inserisci qui la descrizione dell'immagine


0

Puoi cambiare il tono del verde in Putty per rendere leggibile il testo.

Apri Putty e vai su Window \ Colors, seleziona "ANSI Green", impostalo su un verde più scuro (R: 0 G: 70 B: 0).

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.