Vad orsakar den här gröna bakgrunden i LS-utdata?

skärmlock för LS-utdata på Linux-maskin

Det finns två kataloger som visas av ”ls”. Normalt är kataloger var som helst blå på svart bakgrund. Men den första är blå på grön och omöjlig att läsa. Varför är detta? Hur gör man det blått på svart eller åtminstone något ljus på något mörkt?

Detta är på Ubuntu 12.04, med bash i Gnome Terminal. I Konsole är det blå något mörkare och möjligt att läsa, men det kan vara mycket bättre.

Svar

Bortsett från att färga filer baserat på deras typ (turkos för ljudfiler, ljusrött för arkiv och komprimerade filer och lila för bilder och videor), ls färgar också filer och kataloger baserat på deras attribut:

  • Svart text med grön bakgrund indikerar att en katalog är skrivbar av andra förutom den ägande användaren och gruppen, och har den klibbiga bituppsättningen (o+w, +t) .
  • Blå text med grön bakgrund indikerar att en katalog är skrivbar av andra förutom den ägande användaren och gruppen, och har inte den klibbiga bituppsättningen (o+w, -t).

Stephano Palazzo över på Ask Ubuntu har gjort denna väldigt lärorika bild över de olika attributfärgerna:

Wh vid de olika färgerna i terminalen

Som terdon påpekade kan färginställningarna ändras via dircolors . En lista med de olika färginställningarna kan nås med dircolors --print-database.

Varje utgångsrad, t.ex. BLK 40;33;01 , har formen:

[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR] 
  • TARGET anger målet för färgningsregeln

  • TEXT_STYLE anger textstilen:

    • 00 = none
    • 01 = bold
    • 04 = understrykning
    • 05 = blinka
    • 07 = omvänd,
    • 08 = dold
  • FOREGROUND_COLOR anger förgrundsfärgen:

    • 30 = svart
    • 31 = röd
    • 32 = grön
    • 33 = gul
    • 34 = blå,
    • 35 = magenta
    • 36 = cyan
    • 37 = vit
  • BACKGROUND_COLOR anger bakgrundsfärgerna:

    • 40 = svart
    • 41 = röd
    • 42 = grön
    • 43 = gul
    • 44 = blå,
    • 45 = magenta
    • 46 = cyan
    • 47 = vit

Fält kan utelämnas från höger, så till exempel .tar 01;31 betyder fet och röd.

XTerm och de flesta andra moderna terminalemulatorer stöder 256 färger.

En XTerm 256-färgs förgrundsfärgkod har formen:

38;5;[FOREGROUND_COLOR] 

En XTerm 256-färgs bakgrundsfärgkod är av form:

48;5;[BACKGROUND_COLOR] 

där både FOREGROUND_COLOR och BACKGROUND_COLOR numrera intervallet 0-255. En fullständig lista över färgkoder för 16 och 256 färglägen visas i skärmdumpen nedan:

16 och 256 färgkodfärgkoder

Kommentarer

  • BACKGROUND_COLOR-koder är inte desamma som FOREGROUND_COLOR; Bakgrundskoder är 40-47
  • 38;5; startar en xterm 256-färg förgrundsfärgkod. 48;5; startar en xterm 256-färgs bakgrundsfärgkod. Cyan i min dircolors-utdata är 38;5;51 inte 36 även om resultatet är detsamma.
  • @stevesliva: Tack för din kommentar. Jag ’ har redigerat svaret för att ange bakgrundsfärgkoderna korrekt och beskriva 256-färgs förgrunds- och bakgrundsfärgkoder.
  • så vad gör grönt bara förgrund betyda? som om jag har här ?
  • @ChagaiFriedlander: Körbara filer (se nedre raden i bilden ).

Svar

Färgerna på ls kan representera behörigheterna är standardvärdena för vissa system att visa kataloger där alla har skrivbehörigheter med grön bakgrund:

ange bildbeskrivning här

Du kan ändra färgerna genom att redigera din $LS_COLORS variabel med dircolors (från 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. 

Syntaxen är visserligen irriterande här men du kan ändra den här färgen genom att skapa en fil med de färger du vill ha och spara den som ~/.dircolors:

dircolors -p > ~/.dircolors 

Det kommandot skriver ut standardinställningarna till ~/.dircolors. Du måste sedan redigera filen och ändra den här raden:

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

Till exempel för att göra den svart text på en röd bakgrund (se här för en lista med färgkoder):

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

Du behöver inte ha alla standardvärden , du kan också bara skapa en fil med en enda rad och omdefiniera bara den du vill ändra. Hur som helst, när du har skapat filen, ladda den med:

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

Och här är det i aktion:

ange bildbeskrivning här

För att det ska hända automatiskt, lägg till eval kommando ovan till din ~/.bashrc -fil.

Kommentarer

  • Standardfärgerna verkar ofta indikera att originalförfattaren hatar oss och våra ögon men …
  • Tack. Varför skriver du ibland ~ / .dirname och ibland ~ / dircolors, och ibland ~ / .färger? ska de vara desamma?
  • Th ankar. Varför eval "$(dircolors ~/dircolors)"; istället för ett mer direkt sätt som dircolors ~/dircolors?
  • @Tim eftersom dircolors bara skriver ut inställningarna, du måste utvärdera det för att de ska läsas.
  • för att de ska läsas av vem?

Svara

Även om alla tekniska svar är sanna, skulle jag betrakta det som en informell varning, att du tappade ut rättigheter till generöst eller kopiering av criss + cross … (oftast gör vi alla , för att få saker att börja fungera, va?)

Hur man gör det blått på svart, …?

En bra„ de-greener “för att komma tillbaka till rättigheter som du sannolikt vill ha, är detta uttalande:

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

Bäst förstått vad det gör, om du förstår syftet med versaler + X „specialkörning“, dvs. se Wikipedia

Det är bara riktigt användbart när det används med ”+” och vanligtvis i kombination med alternativet -R för att ge grupp- eller annan åtkomst till ett stort katalogträd utan att ställa in exekveringsbehörighet för normala filer (t.ex. textfiler), vilket normalt skulle hända om du bara använde ”chmod -R a + rx …

Svar

Här är de tre stegen jag använde för att ändra färger:

Kopiera först standardfärgerna till en fil

dircolors -p > ~/.dircolors 

Ändra sedan den här filen. Du kan hitta några värden för färger inuti, och här är några fler:

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 

( källa )

Och slutligen, lägg till följande rad i din ~/.bashrc -fil för att färgerna ska laddas automatiskt när du öppnar en terminal:

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

För ~/.zshrc:

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

Svara

För att snabbt åtgärda problemet, (gör andra skrivbara filer gula på nobg):

LS_COLORS+=":ow=01;33" 

Ersätt 33 med 34 för blått på nobg. Ännu enklare, att göra det nofg på nobg:

LS_COLORS+=:ow= 

För att göra din ändring permanent, lägg till den i din .profil:

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

För att visa de icke-tilläggsrelaterade reglerna för LS_COLORS:

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

sed sätter varje regel på en rad och grep tar bort reglerna som börjar med *.".


Till utforska ls färgerna på din terminal, överväg att använda

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

Sedan

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

Som anges i ett annat svar (det av Thomas Nyman) är 38;5; prefixet för förgrunden x-term 256-färger, och 48;5; för bakgrunds x-term 256-färger. 256-färger stöds dock inte av alla terminaler.

Se även -Vad betyder de olika färgerna i ls? – på AskUbuntu .

Kommentarer

  • Jag hittade att jag släppte LS_COLORS+=':ow=01;33' i min ~/.zshrc hjälpte till att inaktivera färgbakgrund för kataloger i en git-repo.Detta är på en Windows 10-maskin med en Pengwin-WSL-distribution. Nu är alla kataloger inom git-repo läsbara.

Svar

Det betyder att den här mappen har tillstånd om du kör detta:

сhmod og-w AU_LI

det tar bort bgcolor 🙂

Svar

För att fixa detta, försök med ow parameter för LS_COLORS

Till exempel:

~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 

ange bildbeskrivning här

Nu lägger du till 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 

ange bildbeskrivning här Bamm !!

Kommentarer

Svar

Du kan ändra grön ton i Putty för att göra texten läsbar.

Öppna Putty och gå till Window \ Färger, välj ”ANSI Green”, ställ in den till en mörkare grön (R: 0 G: 70 B: 0).

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *