Wat veroorzaakt deze groene achtergrond in ls-uitvoer?

screencap van ls uitvoer op linux machine

Er zijn twee directories getoond door “ls”. Normaal gesproken zijn mappen overal blauw op een zwarte achtergrond. Maar de eerste is blauw op groen en onmogelijk te lezen. Waarom is dit? Hoe maak je het blauw op zwart, of op zijn minst iets lichts op iets donkers?

Dit is op Ubuntu 12.04, met bash in Gnome Terminal. In Konsole is het blauw iets donkerder en leesbaar, hoewel het veel beter zou kunnen zijn.

Antwoord

Behalve inkleuren bestanden op basis van hun type (turkoois voor audiobestanden, helderrood voor archieven en gecomprimeerde bestanden en paars voor afbeeldingen en videos), ls kleurt ook bestanden en mappen op basis van hun kenmerken:

  • Zwarte tekst met groene achtergrond geeft aan dat een directory beschrijfbaar is door anderen, behalve de gebruiker en groep die de eigenaar is, en dat de sticky bit is ingesteld (o+w, +t) .
  • Blauwe tekst met groene achtergrond geeft aan dat een directory beschrijfbaar is door anderen, behalve de gebruiker en groep die de eigenaar is, en dat niet de sticky bit is ingesteld (o+w, -t).

Stephano Palazzo op Ask Ubuntu heeft deze zeer leerzame afbeelding gemaakt over de verschillende attribuutkleuren:

Wh bij de verschillende kleuren betekenen in de terminal

Zoals terdon opmerkte, kunnen de kleurinstellingen worden gewijzigd via dircolors . Een lijst met de verschillende kleurinstellingen is toegankelijk met dircolors --print-database.

Elke regel met uitvoer, zoals BLK 40;33;01 , heeft de volgende vorm:

[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR] 
  • TARGET geeft het doel aan voor de kleurregel

  • TEXT_STYLE geeft de tekststijl aan:

    • 00 = geen
    • 01 = vet
    • 04 = onderstrepingsteken
    • 05 = blink
    • 07 = reverse,
    • 08 = verborgen
  • FOREGROUND_COLOR geeft de voorgrondkleur aan:

    • 30 = zwart
    • 31 = rood
    • 32 = groen
    • 33 = geel
    • 34 = blauw,
    • 35 = magenta
    • 36 = cyaan
    • 37 = wit
  • BACKGROUND_COLOR geeft de achtergrondkleuren aan:

    • 40 = zwart
    • 41 = rood
    • 42 = groen
    • 43 = geel
    • 44 = blauw,
    • 45 = magenta
    • 46 = cyaan
    • 47 = wit

Velden kunnen worden weggelaten vanaf de rechterkant, dus .tar 01;31 betekent bijvoorbeeld vet en rood.

XTerm en de meeste andere moderne terminalemulators ondersteunen 256 kleuren.

Een XTerm 256-kleuren voorgrondkleurcode heeft de volgende vorm:

38;5;[FOREGROUND_COLOR] 

Een XTerm 256-kleuren achtergrondkleurcode is van de form:

48;5;[BACKGROUND_COLOR] 

waarbij zowel FOREGROUND_COLOR als BACKGROUND_COLOR een nummer het bereik 0-255. Een volledige lijst met kleurcodes voor de 16 en 256 kleurmodi wordt weergegeven in de onderstaande schermafbeelding:

16 en 256 kleurmodus kleurcodes

Opmerkingen

  • BACKGROUND_COLOR-codes zijn niet hetzelfde als FOREGROUND_COLOR; Achtergrondcodes zijn 40-47
  • 38;5; start een xterm 256-kleuren voorgrondkleurcode. 48;5; start een xterm 256-kleuren achtergrondkleurcode. Cyaan in mijn dircolors-uitvoer is 38;5;51 niet 36 hoewel het resultaat hetzelfde is.
  • @stevesliva: Bedankt voor je reactie. Ik ‘ heb het antwoord bewerkt om de achtergrondkleurcodes correct aan te geven, en de 256-kleuren voorgrond- en achtergrondkleurcodes te beschrijven.
  • dus wat betekent groen alleen voorgrond gemeen? zoals ik hier heb?
  • @ChagaiFriedlander: uitvoerbare bestanden (zie onderste rij in de afbeelding ).

Antwoord

De kleuren van ls kunnen de toestemmingen vertegenwoordigen , de standaardinstelling voor sommige systemen is om mappen te tonen waar iedereen schrijfrechten heeft met een groene achtergrond:

voer hier een afbeeldingbeschrijving in

U kunt de kleuren wijzigen door uw $LS_COLORS variabele te bewerken met dircolors (van 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. 

De syntaxis is hier weliswaar een beetje vervelend, maar je kunt deze kleur wijzigen door een bestand te maken met de kleuren die je wilt en het op te slaan als ~/.dircolors:

dircolors -p > ~/.dircolors 

Met dat commando worden de standaardinstellingen afgedrukt in ~/.dircolors. U moet dan dat bestand bewerken en deze regel wijzigen:

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

Om er bijvoorbeeld zwarte tekst op een rode achtergrond van te maken (zie hier voor een lijst met kleurcodes):

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

U hoeft niet alle standaardinstellingen te hebben , je kunt ook gewoon een bestand maken met een enkele regel, waarbij je alleen het bestand dat je wilt wijzigen opnieuw definieert. Hoe dan ook, als je het bestand eenmaal hebt gemaakt, laad je het met:

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

En hier is het in actie:

voer hier de beschrijving van de afbeelding in

Om dat automatisch te laten gebeuren, voegt u de eval commando hierboven naar uw ~/.bashrc bestand.

Reacties

  • De standaardkleuren lijken vaak aan te geven dat de oorspronkelijke auteur ons en onze ogen haat …
  • Bedankt. Waarom schrijf je soms ~ / .dirname, en soms ~ / dircolors, en soms ~ / .dircolors? moeten ze hetzelfde zijn?
  • Th anks. Waarom eval "$(dircolors ~/dircolors)"; in plaats van een directere manier zoals dircolors ~/dircolors?
  • @Tim omdat dircolors alleen de instellingen afdrukt, moet het worden geëvalueerd zodat ze kunnen worden gelezen.
  • zodat ze kunnen worden gelezen door wie?

Antwoord

Hoewel alle technische antwoorden waar zijn, zou ik het een beetje een informele waarschuwing vinden, dat je een beetje rechten hebt uitgedeeld om royaal of kriskras + kruis te kopiëren … (meestal doen we dat allemaal , om dingen aanvankelijk werkend te krijgen, hè?)

Hoe maak je het blauw op zwart, …?

Een goede” ontgroening “om terug te gaan naar de rechten die u waarschijnlijk wilt, is deze verklaring:

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

Begrijp het beste wat het doet, als u het doel van hoofdletters + X „special execute“ begrijpt, dwz zie Wikipedia

Het is alleen erg handig wanneer het wordt gebruikt met “+” en meestal in combinatie met de -R optie om een groep of andere toegang te geven tot een grote mappenboom zonder uitvoeringsmachtiging in te stellen voor normale bestanden (zoals tekstbestanden), wat normaal zou gebeuren als je gewoon “chmod -R a + rx …

Antwoord

Hier zijn de 3 stappen die ik heb gebruikt om de kleuren te veranderen:

Kopieer eerst de standaardkleuren naar een bestand

dircolors -p > ~/.dircolors 

Wijzig vervolgens dit bestand. U kunt enkele waarden voor kleuren binnenin vinden, en hier zijn er nog enkele:

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 )

En tot slot, voeg de volgende regel toe aan uw ~/.bashrc -bestand zodat de kleuren automatisch worden geladen wanneer u een terminal opent:

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

Voor ~/.zshrc:

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

Antwoord

Om het probleem snel op te lossen, (maak andere beschrijfbare bestanden geel op nobg):

LS_COLORS+=":ow=01;33" 

Vervang 33 door 34 voor blauw op nobg. Nog eenvoudiger, om het nofg te maken op nobg:

LS_COLORS+=:ow= 

Om uw wijziging permanent te maken, voegt u deze toe aan uw .profile:

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

Om de niet-extensie gerelateerde regels van LS_COLORS te bekijken:

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

sed plaatst elke regel op één regel en grep verwijdert de regels die beginnen met *.".


Aan verken de ls kleuren op uw terminal, overweeg om

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

te gebruiken en vervolgens

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

Zoals vermeld in een ander antwoord (dat van Thomas Nyman), is 38;5; het voorvoegsel voor voorgrond x-term 256-kleuren, en 48;5; voor achtergrond x-term 256-kleuren. 256-kleuren wordt echter niet door alle terminals ondersteund.

Zie ook -Wat betekenen de verschillende kleuren in ls? – op AskUbuntu .

Reacties

  • Ik vond het neerzetten van LS_COLORS+=':ow=01;33' in mijn ~/.zshrc hielp bij het uitschakelen van kleur-achtergrond voor mappen in een git-repo.Dit staat op een Windows 10-machine met een Pengwin-WSL-distributie. Nu zijn alle mappen in git-repo leesbaar.

Antwoord

Dit betekent dat deze map permissies heeft als je voert dit uit:

сhmod og-w AU_LI

het zal verwijderen bgcolor 🙂

Antwoord

Om dit op te lossen, probeer de ow parameter naar de LS_COLORS

Bijvoorbeeld:

~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 

voer de beschrijving van de afbeelding hier in

Voeg nu de ow (OTHER_WRITABLE) optie

~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 

voer de beschrijving van de afbeelding hier in Bamm !!

Reacties

Answer

Je kunt de toon van groen in Putty veranderen om de tekst leesbaar te maken.

Open Putty en ga naar Window \ Colors, selecteer “ANSI Green”, zet het op donkerder groen (R: 0 G: 70 B: 0).

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *