Ce cauzează acest fundal verde în ieșirea ls?

screencap de ieșire ls pe mașina Linux

Există două directoare afișate de „eu”. În mod normal, directoarele de oriunde sunt albastre pe fundal negru. Dar primul este albastru pe verde și imposibil de citit. De ce asta? Cum se face albastru pe negru sau cel puțin ceva luminos pe ceva întunecat?

Acesta este pe Ubuntu 12.04, folosind bash în Gnome Terminal. În Konsole, albastrul este ușor mai întunecat și poate fi citit, deși ar putea fi mult mai bun.

Răspuns

În afară de colorare fișiere bazate pe tipul lor (turcoaz pentru fișiere audio, roșu aprins pentru Arhive și fișiere comprimate și violet pentru imagini și videoclipuri), ls colorează și fișiere și directoare pe baza atributelor lor: / p>

  • Textul negru cu fundal verde indică faptul că un director poate fi scris de către alții în afară de utilizatorul și grupul proprietar și are setul de biți lipicios (o+w, +t) .
  • Textul albastru cu fundal verde indică faptul că un director poate fi scris de către alții în afară de utilizatorul și grupul proprietar și nu are setul de biți lipici (o+w, -t).

Stephano Palazzo la Ask Ubuntu a făcut această imagine foarte instructivă asupra diferitelor culori ale atributelor:

Wh la diferitele culori înseamnă în terminal

După cum a subliniat terdon , setările de culoare pot fi modificate prin dircolors . O listă a diferitelor setări de colorare poate fi accesată cu dircolors --print-database.

Fiecare linie de ieșire, cum ar fi BLK 40;33;01 , este de forma:

[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR] 
  • TARGET indică ținta pentru regula de colorare

  • TEXT_STYLE indică stilul textului:

    • 00 = none
    • 01 = bold
    • 04 = underscore
    • 05 = clipire
    • 07 = invers,
    • 08 = ascuns
  • FOREGROUND_COLOR indică culoarea din prim-plan:

    • 30 = negru
    • 31 = roșu
    • 32 = verde
    • 33 = galben
    • 34 = albastru,
    • 35 = magenta
    • 36 = cyan
    • 37 = alb
  • BACKGROUND_COLOR indică culorile de fundal:

    • 40 = negru
    • 41 = roșu
    • 42 = verde
    • 43 = galben
    • 44 = albastru,
    • 45 = magenta
    • 46 = cyan
    • 47 = alb

Câmpurile pot fi omise începând din dreapta, deci, de exemplu, .tar 01;31 înseamnă bold și roșu.

XTerm și majoritatea celorlalte emulatoare de terminale moderne acceptă 256 de culori.

Un cod de culoare de prim-plan XTerm cu 256 de culori are forma:

38;5;[FOREGROUND_COLOR] 

Un cod de culoare de fundal cu 256 de culori XTerm este de form:

48;5;[BACKGROUND_COLOR] 

unde atât FOREGROUND_COLOR cât și BACKGROUND_COLOR numerotați intervalul 0-255. O listă completă a codurilor de culoare pentru modurile de culoare 16 și 256 sunt prezentate în captura de ecran de mai jos:

16 și 256 coduri color mod color

Comentarii

  • Codurile BACKGROUND_COLOR nu sunt la fel ca FOREGROUND_COLOR; Codurile de fundal sunt 40-47
  • 38;5; pornește un cod de culoare de prim plan xterm 256 culori . 48;5; pornește un cod de culoare de fundal de 256 de culori xterm. Cianul din ieșirea mea din dircolors este 38;5;51 nu 36 deși rezultatul este același.
  • @stevesliva: Vă mulțumim pentru comentariu. Am ‘ modificat răspunsul pentru a indica corect codurile de culoare de fundal și descriu codurile de prim-plan cu 256 de culori și codurile de culoare de fundal.
  • deci ce înseamnă doar verde în prim-plan Rău? ca și cum am aici ?
  • @ChagaiFriedlander: fișiere executabile (vezi rândul de jos din poza ).

Răspuns

Culorile ls pot reprezenta permisiunile , valorile implicite pentru unele sisteme sunt să afișeze directoare unde toată lumea are permisiuni de scriere cu un fundal verde:

introduceți descrierea imaginii aici

Puteți schimba culorile editând variabila $LS_COLORS utilizând dircolors (din 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. 

Sintaxa este un pic deranjantă aici, dar puteți schimba această culoare creând un fișier cu culorile dorite și salvându-l ca ~/.dircolors:

dircolors -p > ~/.dircolors 

Această comandă va imprima valorile implicite în ~/.dircolors. Apoi, va trebui să editați acel fișier și să schimbați această linie:

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

De exemplu, pentru a face text negru pe un fundal roșu (consultați aici pentru o listă de coduri de culoare):

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

Nu trebuie să aveți toate valorile implicite , puteți, de asemenea, să creați un fișier cu o singură linie, redefinind-o doar pe cea pe care doriți să o modificați. Oricum, după ce ați creat fișierul, încărcați-l cu:

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

Și aici este în acțiune:

introduceți descrierea imaginii aici

Pentru ca acest lucru să se întâmple automat, adăugați eval de mai sus în fișierul ~/.bashrc.

Comentarii

  • Culorile implicite par să indice adesea că autorul original ne urăște pe noi și pe ochii noștri …
  • Mulțumesc. De ce scrieți uneori ~ / .dirname și alteori ~ / dircolors și alteori ~ / .dicolori? se presupune că sunt aceleași?
  • Th ciudate. De ce eval "$(dircolors ~/dircolors)"; în loc de un mod mai direct, cum ar fi dircolors ~/dircolors?
  • @Tim deoarece dircolors tipărește doar setările, trebuie să o evaluați pentru a le putea citi.
  • pentru a le citi de cine?

Răspundeți

Deși toate răspunsurile tehnice sunt adevărate, aș considera că este un avertisment informal, că ați eliminat drepturile un pic cu generozitate sau copiere criss + cross … (cel mai adesea facem cu toții , ca lucrurile să funcționeze inițial, nu?)

Cum se face albastru pe negru, …?

Un bun„ de-verde ”pentru a reveni la drepturile pe care cel mai probabil le doriți, este această afirmație:

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

Cel mai bine am înțeles ce face, dacă înțelegeți scopul majusculei + X „executare specială“, adică consultați Wikipedia

Este foarte util doar atunci când este utilizat cu „+” și de obicei în combinație cu opțiunea -R pentru a oferi acces grupului sau altui acces la un arbore de mari directoare fără a seta permisiunea de executare pentru fișierele normale (cum ar fi fișierele text), ceea ce s-ar întâmpla în mod normal dacă ați folosi „chmod -R a + rx … p>

Răspuns

Iată cei 3 pași pe care i-am folosit pentru a schimba culorile:

Mai întâi, copiați culorile implicite într-un fișier

dircolors -p > ~/.dircolors 

Apoi modificați acest fișier. Puteți găsi câteva valori pentru culori în interior și iată câteva altele:

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 

( sursă )

Și, în cele din urmă, adăugați următoarea linie în fișierul dvs. ~/.bashrc pentru ca culorile să fie încărcate automat atunci când deschideți un terminal:

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

Pentru ~/.zshrc:

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

Răspuns

Pentru a remedia rapid problema, (faceți fișierele care pot fi scrise în galben pe nobg):

LS_COLORS+=":ow=01;33" 

Înlocuiți 33 cu 34 pentru albastru pe nobg. Chiar și mai simplu, pentru ao face nofg pe nobg:

LS_COLORS+=:ow= 

Pentru ca modificarea dvs. să fie permanentă, adăugați-o la .profile:

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

Pentru a vizualiza regulile care nu au legătură cu extensia LS_COLORS:

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

sed pune fiecare regulă pe o singură linie și grep elimină regulile care încep cu *.".


To explorați ls culorile de pe terminalul dvs., luați în considerare utilizarea

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

Apoi

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

După cum sa menționat într-un alt răspuns (cel al lui Thomas Nyman), 38;5; este prefixul pentru termenul 256-culori din prim-plan și 48;5; pentru fundalul x-termen 256-culori. Cu toate acestea, 256 de culori nu sunt acceptate de toate terminalele.

Consultați și -Ce înseamnă diferitele culori în ls? – pe AskUbuntu .

Comentarii

  • Am găsit că a scăpat LS_COLORS+=':ow=01;33' în ~/.zshrc a ajutat la dezactivarea fundalului de culoare pentru directoare într-un git-repo.Aceasta este pe o mașină Windows 10 cu o distribuție Pengwin-WSL. Acum toate directoarele din git-repo sunt lizibile.

Răspuns

Ei bine, asta înseamnă că acest folder are permisiuni dacă rulați acest lucru:

сhmod og-w AU_LI

va elimina bgcolor 🙂

Răspuns

Pentru a remedia acest lucru, încercați ow parametrul LS_COLORS

De exemplu:

~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 

introduceți descrierea imaginii aici

Acum adăugați ow (OTHER_WRITABLE) opțiune

~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 

introduceți descrierea imaginii aici Bamm !!

Comentarii

Răspuns

Puteți schimba tonul verde în Putty pentru a face textul lizibil.

Deschideți Putty și accesați Window \ Culori, selectați „ANSI Green”, setați-l la un verde mai închis (R: 0 G: 70 B: 0).

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *