Hva forårsaker denne grønne bakgrunnen i produksjonen?

skjermdeksel for LS-utdata på Linux-maskin

Det er to kataloger vist av «ls». Normalt er kataloger hvor som helst blå på svart bakgrunn. Men den første er blå på grønt og umulig å lese. Hvorfor er det sånn? Hvordan lage det blå på svart, eller i det minste noe lyst på noe mørkt?

Dette er på Ubuntu 12.04, ved hjelp av bash i Gnome Terminal. I Konsole er det blå litt mørkere og mulig å lese, men det kan være mye bedre.

Svar

Bortsett fra å fargelegge filer basert på deres type (turkis for lydfiler, lyse rødt for arkiver og komprimerte filer og lilla for bilder og videoer), ls farger også filer og kataloger basert på deres attributter:

  • Svart tekst med grønn bakgrunn indikerer at en katalog kan skrives av andre bortsett fra den brukeren og gruppen som eier, og har det klebrig bit-settet (o+w, +t) .
  • Blå tekst med grønn bakgrunn indikerer at en katalog kan skrives av andre bortsett fra den brukeren og gruppen som eier, og har ikke den klissete bitverdien (o+w, -t).

Stephano Palazzo over på Ask Ubuntu har laget dette veldig lærerike bildet over de forskjellige attributtfargene:

Wh med de forskjellige fargene betyr i terminalen

Som terdon påpekte, kan fargeinnstillingene endres via dircolors . En liste over de forskjellige fargeleggingsinnstillingene er tilgjengelige med dircolors --print-database.

Hver linje med utdata, for eksempel BLK 40;33;01 , har formen:

[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR] 
  • TARGET angir målet for fargelegelen

  • TEXT_STYLE angir tekststilen:

    • 00 = ingen
    • 01 = fet
    • 04 = understrek
    • 05 = blink
    • 07 = omvendt,
    • 08 = skjult
  • FOREGROUND_COLOR angir forgrunnsfargen:

    • 30 = svart
    • 31 = rød
    • 32 = grønn
    • 33 = gul
    • 34 = blå,
    • 35 = magenta
    • 36 = cyan
    • 37 = hvit
  • BACKGROUND_COLOR angir bakgrunnsfargene:

    • 40 = svart
    • 41 = rød
    • 42 = grønn
    • 43 = gul
    • 44 = blå,
    • 45 = magenta
    • 46 = cyan
    • 47 = hvit

Felter kan utelates fra høyre, så for eksempel .tar 01;31 betyr fet og rød.

XTerm og de fleste andre moderne terminalemulatorer støtter 256 farger.

En XTerm 256-farget forgrunnsfargekode har formen:

38;5;[FOREGROUND_COLOR] 

En XTerm 256-farges bakgrunnsfargekode er av form:

48;5;[BACKGROUND_COLOR] 

der både FOREGROUND_COLOR og BACKGROUND_COLOR nummer området 0-255. En fullstendig liste over fargekoder for 16 og 256 fargemodi vises i skjermbildet nedenfor:

16 og 256 fargemodus fargekoder

Kommentarer

  • BACKGROUND_COLOR koder er ikke de samme som FOREGROUND_COLOR; Bakgrunnskoder er 40-47
  • 38;5; starter en xterm 256-farge forgrunnsfargekode. 48;5; starter en xterm 256-farget bakgrunnsfargekode. Cyan i mine dircolors-utdata er 38;5;51 ikke 36 selv om resultatet er det samme.
  • @stevesliva: Takk for kommentaren din. Jeg ‘ har redigert svaret for å indikere bakgrunnsfargekodene riktig, og beskrive 256-farges for- og bakgrunnsfargekoder.
  • så hva gjør grønt bare forgrunnen mener? som om jeg har her ?
  • @ChagaiFriedlander: Kjørbare filer (se nederste rad i bildet ).

Svar

Fargene på ls kan representere tillatelsene , er standardverdiene for noen systemer å vise kataloger der alle har skrivetillatelser med grønn bakgrunn:

skriv inn bildebeskrivelse her

Du kan endre fargene ved å redigere $LS_COLORS -variabelen med dircolors (fra 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. 

Syntaksen er riktignok litt irriterende her, men du kan endre denne fargen ved å opprette en fil med fargene du vil ha og lagre den som ~/.dircolors:

dircolors -p > ~/.dircolors 

Den kommandoen vil skrive ut standardinnstillingene til ~/.dircolors. Du må da redigere den filen og endre denne linjen:

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

For eksempel å gjøre den svart tekst på rød bakgrunn (se her for en liste over fargekoder):

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

Du trenger ikke å ha alle standardinnstillingene , kan du også bare opprette en fil med en enkelt linje, og omdefinere bare den du vil endre. Uansett, når du har opprettet filen, kan du laste den med:

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

Og her er det i aksjon:

skriv inn bildebeskrivelse her

For å få det til å skje automatisk, legg til eval -kommandoen ovenfor til ~/.bashrc -filen.

Kommentarer

  • Standardfargene indikerer ofte at den opprinnelige forfatteren hater oss og øynene våre …
  • Takk. Hvorfor skriver du noen ganger ~ / .dirname, og noen ganger ~ / dircolors, og noen ganger ~ / .fargestoffer? skal de være de samme?
  • Th anker. Hvorfor eval "$(dircolors ~/dircolors)"; i stedet for mer direkte måte som dircolors ~/dircolors?
  • @Tim fordi dircolors bare skriver ut innstillingene, du trenger å evaluere det for at de skal bli lest.
  • for at de skal bli lest av hvem?

Svar

Selv om alle de tekniske svarene stemmer, vil jeg betrakte det som en uformell advarsel, at du har gitt rettigheter til generøs eller kopiering av criss + cross … (oftest gjør vi alle , for å få ting til å fungere i utgangspunktet, ikke sant?)

Hvordan gjøre det blått på svart, …?

En god„ de-greener “for å komme tilbake til rettigheter du mest sannsynlig vil ha, er denne uttalelsen:

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

Best forstått hva det gjør, hvis du forstår hensikten med store bokstaver + X „spesiell utførelse“, dvs. se Wikipedia

Det er bare veldig nyttig når det brukes med «+» og vanligvis i kombinasjon med alternativet -R for å gi gruppe eller annen tilgang til et stort katalogtre uten å angi utfør tillatelse til normale filer (for eksempel tekstfiler), noe som normalt ville skje hvis du bare brukte «chmod -R a + rx …

Svar

Her er de tre trinnene jeg brukte for å endre fargene:

Kopier først standardfargene til en fil

dircolors -p > ~/.dircolors 

Endre deretter denne filen. Du kan finne noen verdier for farger inne, og her er noen flere:

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 

( kilde )

Og til slutt, legg til følgende linje i ~/.bashrc -filen for at fargene skal lastes automatisk når du åpner en terminal:

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

For ~/.zshrc:

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

Svar

For å raskt løse problemet, (gjør andre skrivbare filer gule på nobg):

LS_COLORS+=":ow=01;33" 

Erstatt 33 med 34 for blå på nobg. Enda enklere, å gjøre det nofg på nobg:

LS_COLORS+=:ow= 

For å gjøre endringen permanent, legg den til .profilen din:

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

Slik viser du ikke-utvidelsesrelaterte regler for LS_COLORS:

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

sed setter hver regel på en linje og grep fjerner reglene som begynner med *.".


To utforsk ls farger på terminalen din, vurder å bruke

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

Deretter

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

Som nevnt i et annet svar (det av Thomas Nyman), er 38;5; prefikset for forgrunnen x-term 256-farger, og 48;5; for bakgrunns x-term 256-farger. 256-farger støttes ikke av alle terminaler.

Se også -Hva betyr de forskjellige fargene i ls? – på AskUbuntu .

Kommentarer

  • Jeg fant å slippe LS_COLORS+=':ow=01;33' i ~/.zshrc bidro til å deaktivere fargebakgrunn for kataloger i en git-repo.Dette er på en Windows 10-maskin med en Pengwin-WSL-distribusjon. Nå er alle kataloger innen git-repo lesbare.

Svar

Dette betyr at denne mappen har tillatelser hvis du kjører dette:

сhmod og-w AU_LI

det fjerner bgcolor 🙂

Svar

For å fikse dette, prøv ow parameter til LS_COLORS

For eksempel:

~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 

skriv inn bildebeskrivelse her

Nå legger du til ow (OTHER_WRITABLE) alternativ

~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 

skriv inn bildebeskrivelse her Bamm !!

Kommentarer

Svar

Du kan endre tonen i grønt i Putty for å gjøre teksten lesbar.

Åpne Putty og gå til Window \ Colors, velg «ANSI Green», sett den til en mørkere grønn (R: 0 G: 70 B: 0).

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *