Co powoduje to zielone tło w wynikach ls?


141

zrzut ekranu wyjścia ls na maszynie z systemem Linux

Istnieją dwa katalogi pokazane przez „ls”. Zwykle katalogi w dowolnym miejscu są niebieskie na czarnym tle. Ale pierwszy jest niebieski na zielonym i niemożliwy do odczytania. Dlaczego to? Jak zrobić niebieski na czarnym, a przynajmniej coś jasnego na czymś ciemnym?

To jest na Ubuntu 12.04, używając bash w Gnome Terminal. W Konsoli niebieski jest nieco ciemniejszy i można go odczytać, choć może być znacznie lepszy.

Odpowiedzi:


162

Oprócz plików kolorystycznych opartych na ich typach (turkusowy dla plików audio, jasnoczerwony dla archiwów i plików skompresowanych oraz fioletowy dla obrazów i filmów), lstakże koloruje pliki i katalogi na podstawie ich atrybutów:

  • Czarny tekst z zielonym tłem wskazuje, że katalog może być zapisywany przez innych użytkowników oprócz właściciela i grupy oraz ma ustawiony bit lepki ( o+w, +t).
  • Niebieski tekst z zielonym tłem wskazuje, że katalog może być zapisywany przez innych użytkowników oprócz właściciela i grupy, i nie ma ustawionego bitu lepkiego ( o+w, -t).

Stephano Palazzo z Ask Ubuntu stworzył ten bardzo pouczający obraz w odniesieniu do różnych kolorów atrybutów:

Co oznaczają różne kolory w terminalu

Jak zauważył terdon , ustawienia kolorów można modyfikować za pomocą dircolors. Dostęp do listy różnych ustawień kolorowania można uzyskać za pomocą dircolors --print-database.

Każdy wiersz wyniku, taki jak BLK 40;33;01, ma postać:

[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR]
  • TARGET wskazuje cel dla reguły kolorowania

  • TEXT_STYLE wskazuje styl tekstu:

    • 00 = brak
    • 01 = pogrubienie
    • 04 = podkreślenie
    • 05 = mrugnięcie
    • 07 = rewers
    • 08 = ukryty
  • FOREGROUND_COLOR wskazuje kolor pierwszego planu:

    • 30 = czarny
    • 31 = czerwony
    • 32 = zielony
    • 33 = żółty
    • 34 = niebieski
    • 35 = magenta
    • 36 = cyjan
    • 37 = biały
  • BACKGROUND_COLOR wskazuje kolory tła:

    • 40 = czarny
    • 41 = czerwony
    • 42 = zielony
    • 43 = żółty
    • 44 = niebieski
    • 45 = magenta
    • 46 = cyjan
    • 47 = biały

Pola można pominąć, zaczynając od prawej, więc na przykład .tar 01;31oznaczają pogrubienie i kolor czerwony.

XTerm i większość innych nowoczesnych emulatorów terminali obsługuje 256 kolorów.

256-kolorowy kod pierwszego planu XTerm ma postać:

38;5;[FOREGROUND_COLOR]

256-kolorowy kod koloru tła XTerm ma postać:

48;5;[BACKGROUND_COLOR]

gdzie oboje FOREGROUND_COLORi BACKGROUND_COLORjest liczbą z zakresu 0-255. Pełna lista kodów kolorów dla trybów 16 i 256 kolorów pokazano na poniższym zrzucie ekranu:

Kody kolorów w trybie 16 i 256 kolorów


5
Kody BACKGROUND_COLOR nie są takie same jak kody FOREGROUND_COLOR; Kody w tle to 40-47
Ryan V. Bissell

38;5;uruchamia 256- kolorowy kod koloru pierwszego planu xterm . 48;5;uruchamia 256-kolorowy kod koloru tła xterm. Cyjan w mojej produkcji dircolors 38;5;51 nie jest, 36chociaż wynik jest taki sam.
stevesliva

1
@stevesliva: Dzięki za komentarz. Zredagowałem odpowiedź, aby poprawnie wskazać kody kolorów tła i opisać 256-kolorowe kody kolorów pierwszego planu i tła.
Thomas Nyman

55

Kolory lsmogą reprezentować uprawnienia, domyślnie w niektórych systemach jest pokazanie katalogów, w których każdy ma uprawnienia do zapisu z zielonym tłem:

wprowadź opis zdjęcia tutaj

Możesz zmienić kolory, edytując $LS_COLORSzmienną za 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.

Składnia jest wprawdzie trochę denerwująca, ale możesz zmienić ten kolor, tworząc plik z pożądanymi kolorami i zapisując go jako ~/.dircolors:

dircolors -p > ~/.dircolors

To polecenie wypisze ustawienia domyślne ~/.dircolors. Następnie musisz edytować ten plik i zmienić ten wiersz:

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

Na przykład, aby uzyskać czarny tekst na czerwonym tle ( lista kodów kolorów znajduje się tutaj ):

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

Nie musisz mieć wszystkich ustawień domyślnych, możesz też po prostu utworzyć plik z pojedynczą linią, ponownie definiując tylko ten, który chcesz zmienić. W każdym razie po utworzeniu pliku załaduj go za pomocą:

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

I oto jest w akcji:

wprowadź opis zdjęcia tutaj

Aby tak się stało automatycznie, dodaj evalpowyższe polecenie do ~/.bashrcpliku.


8
Domyślne kolory często wskazują, że oryginalny autor nienawidzi nas i naszych oczu ...
kurtm 10.10.2013

1
Dzięki. DLACZEGO czasami piszesz ~ / .dirname, a czasami ~ / dircolors, a czasami ~ / .dircolors? czy mają być takie same?
Tim

Dzięki. Dlaczego eval "$(dircolors ~/dircolors)";zamiast bardziej bezpośredniego sposobu, takiego jak dircolors ~/dircolors?
Tim

@ Czas, ponieważ dircolors drukuje tylko ustawienia, musisz je sprawdzić, aby można je było odczytać.
terdon

aby je czytać przez kogo?
Tim

11

Chociaż wszystkie odpowiedzi techniczne są prawdziwe, uważam to za nieformalne ostrzeżenie, że odrzuciłeś trochę prawa do hojnego lub kopiowania criss + cross ... (najczęściej wszyscy tak robimy, aby początkowo wszystko działało, co? ?)

Jak zrobić niebieski na czarnym, ...?

Dobrym sposobem na „odejście od środowiska” w celu powrotu do praw, które najprawdopodobniej chcesz, jest takie oświadczenie:

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

Najlepiej zrozumiałeś, co robi, jeśli rozumiesz cel wielkich liter + X „special execute”, czyli patrz Wikipedia

Jest to naprawdę przydatne, gdy jest używane z „+” i zwykle w połączeniu z opcją -R, aby dać grupie lub inny dostęp do dużego drzewa katalogów bez ustawiania uprawnień do wykonywania normalnych plików (takich jak pliki tekstowe), co normalnie by się stało, gdyby właśnie użyłeś "chmod -R a + rx ...


8

Miałem to samo pytanie, odpowiedź Terdona jest miła, ale myślę, że istnieje pomieszanie między dirname a dircolors?

W każdym razie po dalszych badaniach mogłem zmienić kolory, dlatego dzielę się tutaj swoim rozwiązaniem. Może się przydać komuś kiedyś!

A więc 3 proste kroki:

Najpierw, jak powiedział terdon, skopiuj domyślne kolory do pliku

dircolors -p > ~/.dircolors

Następnie zmodyfikuj ten plik. Możesz znaleźć wartości dla kolorów w środku, ale znalazłem więcej tutaj :)

Na koniec dodaj następujący wiersz do ~/.bashrcpliku, aby kolory były ładowane automatycznie po otwarciu terminala:

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

Voilà :)


1
dla ~/.zshrcmusiałem iść z if [[ -f ~/.dircolors ]] ; then eval $(dircolors -b ~/.dircolors) elif [[ -f /etc/DIR_COLORS ]] ; then eval $(dircolors -b /etc/DIR_COLORS) fi. Niestety, łamanie linii jest okropne
Eric D. Johnson

2

Aby szybko rozwiązać problem (spraw, aby inne pliki do zapisu były żółte na nobg):

LS_COLORS+=':ow=01;33'

Zastąpić 33przez 34Blue na nobg. Jeszcze prościej, aby było nofg na nobg:

LS_COLORS+=:ow=

Aby twoja zmiana była trwała, dołącz ją do swojego .profile:

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

Aby wyświetlić reguły niezwiązane z rozszerzeniem LS_COLORS:

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

sedumieszcza każdą regułę w jednym wierszu i grepusuwa reguły zaczynające się od*.'.


Aby zbadać lskolory na swoim terminalu, rozważ użycie

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

Następnie

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

Jak stwierdzono w innej odpowiedzi (Thomas Thymana), 38;5;jest to przedrostek dla x-term 256 kolorów na pierwszym planie i 48;5;dla x-term 256-kolorów tła. 256 kolorów nie jest jednak obsługiwane przez wszystkie terminale.

Zobacz także - Co oznaczają różne kolory w ls? - na AskUbuntu.



0

Aby to naprawić, wypróbuj parametr ow przez LS_COLORS

Na przykład:

~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

wprowadź opis zdjęcia tutaj

Teraz dodajesz opcję ow

~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

wprowadź opis zdjęcia tutaj


0

Możesz zmienić ton zieleni w Putty, aby tekst był czytelny.

Otwórz Putty i przejdź do Window \ Colours, wybierz „ANSI Green”, ustaw ciemniejszą zieleń (R: 0 G: 70 B: 0).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.