Hvad forårsager denne grønne baggrund i LS-output?

screencap af ls output på Linux-maskine

Der er to mapper vist af “ls”. Normalt er mapper hvor som helst blå på sort baggrund. Men den første er blå på grøn og umulig at læse. Hvorfor er det? Hvordan gør man det blåt på sort eller i det mindste noget lys på noget mørkt?

Dette er på Ubuntu 12.04 ved hjælp af bash i Gnome Terminal. I Konsole er den blå lidt mørkere og mulig at læse, selvom den kunne være meget bedre.

Svar

Bortset fra farvning filer baseret på deres type (turkis til lydfiler, lyse rødt til arkiver og komprimerede filer og lilla til billeder og videoer), ls farver også filer og mapper ud fra deres attributter:

  • Sort tekst med grøn baggrund indikerer, at en mappe kan skrives af andre bortset fra den ejer og gruppe, der har den klæbende bit (o+w, +t) .
  • Blå tekst med grøn baggrund angiver, at en mappe kan skrives af andre bortset fra den bruger og gruppe, der ejer, og har ikke den klæbende bit sæt (o+w, -t).

Stephano Palazzo over på Ask Ubuntu har lavet dette meget lærerige billede over de forskellige attributfarver:

Wh ved de forskellige farver betyder i terminalen

Som terdon påpegede, kan farveindstillingerne ændres via dircolors . En liste over de forskellige farveindstillinger kan fås med dircolors --print-database.

Hver linje med output, såsom BLK 40;33;01 , har formen:

[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR] 
  • TARGET angiver målet for farvelægningsreglen

  • TEXT_STYLE angiver tekstformat:

    • 00 = ingen
    • 01 = fed
    • 04 = understreg
    • 05 = blink
    • 07 = omvendt,
    • 08 = skjult
  • FOREGROUND_COLOR angiver forgrundsfarven:

    • 30 = sort
    • 31 = rød
    • 32 = grøn
    • 33 = gul
    • 34 = blå,
    • 35 = magenta
    • 36 = cyan
    • 37 = hvid
  • BACKGROUND_COLOR angiver baggrundsfarverne:

    • 40 = sort
    • 41 = rød
    • 42 = grøn
    • 43 = gul
    • 44 = blå,
    • 45 = magenta
    • 46 = cyan
    • 47 = hvid

Felter kan udelades startende fra højre, så for eksempel .tar 01;31 betyder fed og rød.

XTerm og de fleste andre moderne terminalemulatorer understøtter 256 farver.

En XTerm 256-farve forgrundsfarvekode er af formen:

38;5;[FOREGROUND_COLOR] 

En XTerm 256-farve baggrundsfarvekode er af form:

48;5;[BACKGROUND_COLOR] 

hvor både FOREGROUND_COLOR og BACKGROUND_COLOR nummer området 0-255. En komplet liste over farvekoder til 16 og 256 farvetilstande vises i nedenstående skærmbillede:

16 og 256 farvekode farvekoder

Kommentarer

  • BACKGROUND_COLOR koder er ikke de samme som FOREGROUND_COLOR; Baggrundskoder er 40-47
  • 38;5; starter en xterm 256-farve forgrundsfarvekode. 48;5; starter en xterm 256-farve baggrundsfarvekode. Cyan i min dircolors output er 38;5;51 ikke 36 selvom resultatet er det samme.
  • @stevesliva: Tak for din kommentar. Jeg ‘ har redigeret svaret for at angive baggrundsfarvekoder korrekt og beskrive 256-farve forgrunds- og baggrundsfarvekoder.
  • så hvad betyder grøn kun forgrunden betyde? som om jeg har her ?
  • @ChagaiFriedlander: Eksekverbare filer (se nederste række i billedet ).

Svar

Farverne på ls kan repræsentere tilladelserne er standarderne for nogle systemer at vise mapper, hvor alle har skrivetilladelser med en grøn baggrund:

indtast billedebeskrivelse her

Du kan ændre farverne ved at redigere din $LS_COLORS variabel ved hjælp af 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 ganske vist irriterende her, men du kan ændre denne farve ved at oprette en fil med de ønskede farver og gemme den som ~/.dircolors:

dircolors -p > ~/.dircolors 

Denne kommando udskriver standardindstillingerne til ~/.dircolors. Du bliver derefter nødt til at redigere den fil og ændre denne linje:

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

For eksempel at gøre den sort tekst på en rød baggrund (se her for en liste over farvekoder):

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

Du behøver ikke at have alle standardindstillingerne , kan du også bare oprette en fil med en enkelt linje og omdefinere netop den, du vil ændre. Under alle omstændigheder, når du har oprettet filen, skal du indlæse den med:

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

Og her er det i aktion:

indtast billedbeskrivelse her

For at få det til at ske automatisk skal du tilføje eval kommando ovenfor til din ~/.bashrc fil.

Kommentarer

  • Standardfarverne synes ofte at indikere, at den oprindelige forfatter hader os og vores øjne dog …
  • Tak. Hvorfor skriver du nogle gange ~ / .dirname, og nogle gange ~ / dircolors, og nogle gange ~ / .farver? skal de være de samme?
  • Th anker. Hvorfor eval "$(dircolors ~/dircolors)"; i stedet for mere direkte måde som dircolors ~/dircolors?
  • @Tim fordi dirfarver kun udskriver indstillingerne, du har brug for at evaluere det for at de kan læses.
  • for at de kan læses af hvem?

Svar

Selvom alle tekniske svar er sande, vil jeg betragte det som en uformel advarsel, at du uddelte rettighederne lidt til generøst eller kopiering af criss + cross … (oftest gør vi alle , for at få tingene til at virke oprindeligt, ikke?)

Hvordan gør man det blåt på sort, …?

En god„ de-greener “for at komme tilbage til rettigheder, du sandsynligvis vil have, er denne erklæring:

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

Bedst forstået hvad det gør, hvis du forstår formålet med store bogstaver + X „special execute“, dvs. se Wikipedia

Det er kun virkelig nyttigt, når det bruges med “+” og normalt i kombination med -R mulighed for at give gruppe eller anden adgang til et stort katalogtræ uden at indstille udfør tilladelse til normale filer (såsom tekstfiler), hvilket normalt ville ske, hvis du bare brugte “chmod -R a + rx …

Svar

Her er de 3 trin, jeg brugte til at ændre farverne:

Kopier først standardfarverne til en fil

dircolors -p > ~/.dircolors 

Rediger derefter denne fil. Du kan finde nogle værdier for farver indeni, og her er nogle 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 sidst tilføj følgende linje til din ~/.bashrc -fil for at farverne automatisk indlæses, når du åbner 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 hurtigt at løse problemet, (gør andre skrivbare filer gule på nobg):

LS_COLORS+=":ow=01;33" 

Udskift 33 med 34 til blå på nobg. Endnu enklere at gøre det nofg på nobg:

LS_COLORS+=:ow= 

For at gøre din ændring permanent skal du tilføje den til din .profil:

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

For at se de ikke-udvidelsesrelaterede regler for LS_COLORS:

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

sed sætter hver regel på en linje, og grep fjerner reglerne, der begynder med *.".


To udforsk ls farverne på din terminal, overvej at bruge

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

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

Som anført i et andet svar (det af Thomas Nyman) er 38;5; præfikset for forgrunds x-term 256-farver, og 48;5; til baggrunds x-term 256-farver. 256-farver understøttes dog ikke af alle terminaler.

Se også -Hvad betyder de forskellige farver i ls? – på AskUbuntu .

Kommentarer

  • Jeg fandt at droppe LS_COLORS+=':ow=01;33' i min ~/.zshrc hjalp med at deaktivere farvebaggrund for mapper i en git-repo.Dette er på en Windows 10-maskine med en Pengwin-WSL-distribution. Nu er alle mapper inden for git-repo læsbare.

Svar

Nå dette betyder, at denne mappe har tilladelser, hvis du kører dette:

сhmod og-w AU_LI

det fjerner bgcolor 🙂

Svar

For at rette 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 

indtast billedebeskrivelse her

Nu tilføjer du ow (OTHER_WRITABLE) mulighed

~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 

angiv billedbeskrivelse her Bamm !!

Kommentarer

Svar

Du kan ændre tonen i grønt i kitt for at gøre teksten læsbar.

Åbn kitt og gå til vindue \ Farver, vælg “ANSI Green”, indstil den til en mørkere grøn (R: 0 G: 70 B: 0).

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *