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.