Co způsobuje toto zelené pozadí ve výstupu ls?

screencap výstupu ls na stroji linux

Existují dva adresáře zobrazené „ls“. Normálně jsou adresáře kdekoli modré na černém pozadí. Ale první je modrá na zelené a není čitelná. Proč je to? Jak to udělat modře na černé, nebo alespoň něco světlého na něčem tmavém?

Toto je na Ubuntu 12.04, pomocí bash v Gnome Terminal. V Konsole je modrá mírně tmavší a lze ji přečíst, i když by mohla být mnohem lepší.

Odpovědět

Kromě zbarvení soubory založené na jejich typu (tyrkysové pro zvukové soubory, jasně červené pro archivy a komprimované soubory a fialové pro obrázky a videa), ls také vybarví soubory a adresáře podle jejich atributů:

  • Černý text se zeleným pozadím naznačuje, že do adresáře mohou zapisovat i ostatní, kromě vlastníka uživatele a skupiny, a má nastavený lepivý bit (o+w, +t) .
  • Modrý text se zeleným pozadím označuje, že do adresáře mohou zapisovat i ostatní, kromě vlastníka uživatele a skupiny, a nemá nastavený lepivý bit (o+w, -t).

Stephano Palazzo na Ask Ubuntu vytvořil tento velmi poučný obrázek nad různými barvami atributů:

Wh v různých barvách znamená v terminálu

Jak zdůraznil terdon , nastavení barev lze upravit pomocí dircolors . Seznam různých nastavení zbarvení je přístupný pomocí dircolors --print-database.

Každý řádek výstupu, například BLK 40;33;01 , je ve tvaru:

[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR] 
  • TARGET označuje cíl pravidla barvení

  • TEXT_STYLE označuje styl textu:

    • 00 = none
    • 01 = bold
    • 04 = podtržítko
    • 05 = blink
    • 07 = reverzní,
    • 08 = skrytý
  • FOREGROUND_COLOR označuje barvu popředí:

    • 30 = černá
    • 31 = červená
    • 32 = zelená
    • 33 = žlutá
    • 34 = modrá,
    • 35 = purpurová
    • 36 = azurová
    • 37 = bílá
  • BACKGROUND_COLOR označuje barvy pozadí:

    • 40 = černá
    • 41 = červená
    • 42 = zelená
    • 43 = žlutá
    • 44 = modrá,
    • 45 = purpurová
    • 46 = azurová
    • 47 = bílá

Pole mohou být vynechána počínaje zprava, takže například .tar 01;31 znamená tučné a červené.

XTerm a většina ostatních moderních terminálových emulátorů podporuje 256 barev.

Barevný kód popředí 256 barev XTerm má formu:

38;5;[FOREGROUND_COLOR] 

Kód barvy pozadí XTerm 256 barev má form:

48;5;[BACKGROUND_COLOR] 

kde FOREGROUND_COLOR i BACKGROUND_COLOR je a očíslovat rozsah 0-255. Úplný seznam barevných kódů pro 16 a 256 barevných režimů je uveden na následujícím snímku obrazovky:

16 a 256 barevné režimy barevné kódy

Komentáře

  • Kódy BACKGROUND_COLOR nejsou stejné jako FOREGROUND_COLOR; Kódy na pozadí jsou 40-47
  • 38;5; spouští xterm 256 barev popředí barevný kód. 48;5; spustí kód barvy pozadí xterm 256 barev. Azurová v mém výstupu dircolors 38;5;51 není 36 i když výsledek je stejný.
  • @stevesliva: Děkujeme za váš komentář. ‚ Upravil jsem odpověď tak, aby správně označoval kódy barev pozadí, a popsal 256barevné kódy popředí a barvy pozadí.
  • tak co dělá zelená pouze popředí znamenat? jako mám zde ?
  • @ChagaiFriedlander: Spustitelné soubory (viz spodní řádek v obrázek ).

Odpověď

Barvy ls mohou představovat oprávnění , výchozí nastavení pro některé systémy je zobrazit adresáře, kde má každý oprávnění k zápisu se zeleným pozadím:

zde zadejte popis obrázku

Barvy můžete změnit úpravou své $LS_COLORS proměnné pomocí dircolors (z 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. 

Syntaxe je zde sice trochu otravná, ale tuto barvu můžete změnit vytvořením souboru s požadovanými barvami a jeho uložením jako ~/.dircolors:

dircolors -p > ~/.dircolors 

Tento příkaz vytiskne výchozí hodnoty do ~/.dircolors. Poté budete muset tento soubor upravit a změnit tento řádek:

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

Chcete-li například vytvořit černý text na červeném pozadí (viz zde pro seznam barevných kódů):

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

Nemusíte mít všechna výchozí nastavení , můžete také jen vytvořit soubor s jedním řádkem a předefinovat pouze ten, který chcete změnit. Každopádně po vytvoření souboru jej načtěte pomocí:

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

A tady je to v akci:

sem zadejte popis obrázku

Chcete-li, aby se to stalo automaticky, přidejte eval výše uvedený příkaz do vašeho souboru ~/.bashrc.

Komentáře

  • Výchozí barvy často naznačují, že původní autor nás a naše oči nenávidí …
  • Díky. PROČ někdy píšete ~ / .dirname a někdy ~ / dircolors a někdy ~ / .dircolors? mají být stejné?
  • Čt anks. Proč eval "$(dircolors ~/dircolors)"; místo přímějšího způsobu, jako je dircolors ~/dircolors?
  • @Tim, protože dircolors vytiskne pouze nastavení, vy je třeba to vyhodnotit, aby bylo možné je číst.
  • aby je mohli číst kdo?

odpověď

I když jsou všechny technické odpovědi pravdivé, považoval bych za trochu neformálního varování, že jste trochu rozdělili práva na velkorysé nebo kopírování criss + cross … (nejčastěji to děláme všichni , aby věci zpočátku fungovaly, hm?)

Jak to udělat modře na černé, …?

Dobrým„ de-zelenějším “způsobem, jak získat zpět práva, která s největší pravděpodobností chcete, je toto prohlášení:

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

Nejlépe pochopíte, co dělá, pokud rozumíte účelu velkých písmen + X „speciální spuštění“, tj. Viz Wikipedia

Je to opravdu užitečné pouze při použití s „+“ a obvykle v kombinaci s volbou -R umožňující skupině nebo jinému přístup k velkému adresářovému stromu bez nastavení oprávnění ke spouštění normálních souborů (například textových souborů), což by se normálně stalo, kdybyste právě použili „chmod -R a + rx …

Odpověď

Zde jsou 3 kroky, které jsem použil ke změně barev:

Nejprve zkopírujte výchozí barvy do souboru

dircolors -p > ~/.dircolors 

Poté tento soubor upravte. Uvnitř najdete některé hodnoty barev a zde je několik dalších:

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 

( zdroj )

A nakonec přidejte do svého souboru ~/.bashrc následující řádek, aby se barvy automaticky načetly při otevření terminálu:

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

Pro ~/.zshrc:

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

Odpovědět

Chcete-li problém rychle vyřešit, (upravte ostatní zapisovatelné soubory na nobg žlutě):

LS_COLORS+=":ow=01;33" 

Nahraďte 33 řetězcem 34 modrou barvou na nobg. Ještě jednodušší, aby byla nofg na nobg:

LS_COLORS+=:ow= 

Chcete-li, aby byla změna trvalá, připojte ji ke svému .profile:

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

Chcete-li zobrazit pravidla LS_COLORS nesouvisející s příponou:

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

sed umístí každé pravidlo na jeden řádek a grep odstraní pravidla začínající *.".


To prozkoumejte ls barvy na vašem terminálu, zvažte použití

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

Potom

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

Jak je uvedeno v jiné odpovědi (odpovědi Thomase Nymana), 38;5; je předpona pro x-term v popředí 256 barev a 48;5; pro x-term 256 barev pozadí. 256 barev však není podporováno všemi terminály.

Viz také – Co znamenají různé barvy v ls? – na AskUbuntu .

Komentáře

  • Zjistil jsem, že padám LS_COLORS+=':ow=01;33' do mého ~/.zshrc pomohlo zakázat barevné pozadí adresářů v git-repo.Toto je na počítači se systémem Windows 10 s distribucí Pengwin-WSL. Nyní jsou všechny adresáře v git-repo čitelné.

Odpověď

To znamená, že tato složka má oprávnění, pokud spustíte toto:

сhmod og-w AU_LI

odstraní bgcolor 🙂

Odpověď

Chcete-li to opravit, zkuste o parametr LS_COLORS

Například:

~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 

zde zadejte popis obrázku

Nyní přidáte o (OTHER_WRITABLE) možnost

~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 

zde zadejte popis obrázku Bamm !!

Komentáře

Odpověď

Můžete změnit tón zelené barvy v Putty, aby byl text čitelný.

Otevřete Putty a přejděte do okna \ Colors, vyberte „ANSI Green“, nastavte jej na tmavší zelenou (R: 0 G: 70 B: 0).

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *