Cosa causa questo sfondo verde nelloutput di ls?

screencap delloutput 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 chiaro su qualcosa di scuro?

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

Risposta

A parte la colorazione file in base al tipo (turchese per file audio, rosso brillante per archivi e file compressi e viola per immagini e video), ls colora anche file e directory in base ai loro attributi:

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

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

Wh ai diversi colori significano nel terminale

Come 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 lobiettivo per la regola di colorazione

  • TEXT_STYLE indica lo stile del testo:

    • 00 = nessuno
    • 01 = grassetto
    • 04 = trattino basso
    • 05 = blink
    • 07 = reverse,
    • 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;31 significa grassetto e rosso.

XTerm e la maggior parte degli altri emulatori di terminale 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 è del modulo:

48;5;[BACKGROUND_COLOR] 

dove sia FOREGROUND_COLOR e BACKGROUND_COLOR è un numerare lintervallo 0-255. Un elenco completo dei codici colore per le modalità a 16 e 256 colori è mostrato nello screenshot seguente:

16 e 256 codici colore in modalità colore

Commenti

  • I codici BACKGROUND_COLOR non sono gli stessi di FOREGROUND_COLOR; I codici di sfondo sono 40-47
  • 38;5; avvia un codice colore di primo piano xterm 256 colori . 48;5; avvia un codice colore di sfondo a 256 colori xterm. Loutput di ciano nei miei dircolors è 38;5;51 non 36 anche se il risultato è lo stesso.
  • @stevesliva: grazie per il tuo commento. Ho ‘ ho modificato la risposta per indicare correttamente i codici dei colori di sfondo e descrivere i codici dei colori di primo piano e di sfondo a 256 colori.
  • quindi cosa significa verde solo in primo piano significare? come se avessi qui ?
  • @ChagaiFriedlander: file eseguibili (vedi la riga inferiore in limmagine ).

Risposta

I colori di ls possono rappresentare le autorizzazioni , limpostazione predefinita per alcuni sistemi è mostrare le directory in cui tutti hanno i permessi di scrittura con uno sfondo verde:

inserisci qui la descrizione dellimmagine

Puoi cambiare i colori modificando la tua $LS_COLORS variabile utilizzando 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 un po fastidiosa qui, ma puoi cambiare questo colore creando un file con i colori che desideri e salvandolo come ~/.dircolors:

dircolors -p > ~/.dircolors 

quel comando stamperà i valori predefiniti in ~/.dircolors. Dovrai quindi modificare il 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 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 tutte le impostazioni predefinite , puoi anche creare un file con una sola riga, ridefinendo solo quello che vuoi modificare. Comunque, una volta creato il file, caricalo con:

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

Ed eccola in azione:

inserisci qui la descrizione dellimmagine

Per fare in modo che avvenga automaticamente, aggiungi eval comando sopra al tuo file ~/.bashrc.

Commenti

  • I colori predefiniti spesso sembrano indicare che lautore originale ci odia e i nostri occhi però …
  • Grazie. PERCHÉ a volte scrivi ~ / .dirname, a volte ~ / dircolors e talvolta ~ / .dircolors? dovrebbero essere gli stessi?
  • Th anks. Perché eval "$(dircolors ~/dircolors)"; invece di un modo più diretto come dircolors ~/dircolors?
  • @Tim perché dircolors stampa solo le impostazioni, tu è necessario valutarlo per poterli leggere.
  • per farli leggere da chi?

Risposta

Sebbene tutte le risposte tecniche siano vere, lo considero un po un avvertimento informale, che hai elargito un po i diritti generosamente o copiando criss + cross … (molto spesso 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 dichiarazione:

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

Si capisce meglio cosa fa, se si comprende lo scopo di maiuscolo + X “esecuzione speciale”, ovvero vedere Wikipedia

È veramente utile solo se usato con “+” e di solito in combinazione con lopzione -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), cosa che normalmente accadrebbe se si usasse “chmod -R a + rx …

Risposta

Ecco i 3 passaggi che ho utilizzato per cambiare i colori:

Per prima cosa, copia i colori predefiniti in un file

dircolors -p > ~/.dircolors 

Quindi modifica questo file. Puoi trovare alcuni valori per i colori allinterno, e qui ce ne sono altri:

Code Color 0 Default Colour 1 Bold 4 Underlined 5 Flashing Text 7 Reverse Field 31 Red 32 Green 33 Orange 34 Blue 35 Purple 36 Cyan 37 Grey 40 Black Background 41 Red Background 42 Green Background 43 Orange Background 44 Blue Background 45 Purple Background 46 Cyan Background 47 Grey Background 90 Dark Grey 91 Light Red 92 Light Green 93 Yellow 94 Light Blue 95 Light Purple 96 Turquoise 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 

( source )

Infine, aggiungi la seguente riga al tuo file ~/.bashrc affinché i colori vengano caricati automaticamente quando apri un terminale:

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

Per ~/.zshrc:

if [[ -f ~/.dircolors ]] ; then eval $(dircolors -b ~/.dircolors) elif [[ -f /etc/DIR_COLORS ]] ; then eval $(dircolors -b /etc/DIR_COLORS) fi 

Risposta

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

LS_COLORS+=":ow=01;33" 

Sostituisci 33 con 34 per blu su nobg. Ancora più semplice, per renderlo nofg su nobg:

LS_COLORS+=:ow= 

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

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

Per visualizzare le regole non correlate alle estensioni di LS_COLORS:

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

sed inserisce ogni regola su una riga e grep rimuove le regole che iniziano con *.".


A esplora i ls colori sul tuo terminale, valuta la possibilità di utilizzare

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. } 

Quindi

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

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

Vedi anche -Cosa significano i diversi colori in ls? – su AskUbuntu .

Commenti

  • Ho scoperto di rilasciare LS_COLORS+=':ow=01;33' nel mio ~/.zshrc ha aiutato a disabilitare il colore di sfondo per le directory in un repository git.Questo è su una macchina Windows 10 con una distribuzione Pengwin-WSL. Ora tutte le directory allinterno di git-repo sono leggibili.

Risposta

Bene, questo significa che questa cartella ha permessi se esegui questo:

сhmod og-w AU_LI

rimuoverà bgcolor 🙂

Risposta

Per risolvere questo problema, prova ow parametro per LS_COLORS

Ad 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 dellimmagine

Ora aggiungi ow (OTHER_WRITABLE) opzione

~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 dellimmagine Bamm !!

Commenti

Risposta

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

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *