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ů:
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:
Komentáře
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:
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:
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 jedircolors ~/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
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
Komentáře
- Pokud chcete změnit barvu pomocí .dir_colors, můžete přidat
OTHER_WRITABLE 34;43
. Díky: gist.github.com/jmoz/280005/…
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).
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 dircolors38;5;51
není36
i když výsledek je stejný.