Co powoduje to zielone tło w wyjściu ls?

zrzut ekranu wyjścia ls na komputerze 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 sprawić, by był niebieski na czarnym lub przynajmniej coś jasnego na czymś ciemnym?

To jest na Ubuntu 12.04, używając bash w Gnome Terminal. W Konsole niebieski jest nieco ciemniejszy i czytelny, chociaż mógłby być o wiele lepszy.

Odpowiedź

Oprócz kolorowania pliki na podstawie ich typu (turkusowy dla plików audio, jasnoczerwony dla archiwów i plików skompresowanych oraz fioletowy dla obrazów i filmów), ls także koloruje pliki i katalogi na podstawie ich atrybutów:

  • Czarny tekst z zielonym tłem wskazuje, że katalog jest możliwy do zapisu przez inne osoby z wyjątkiem użytkownika i grupy będącej jego właścicielem, i ma ustawiony bit lepki (o+w, +t) .
  • Niebieski tekst z zielonym tłem wskazuje, że katalog jest zapisywalny przez inne osoby oprócz użytkownika i grupy będącego właścicielem i nie ma ustawionego bitu lepkiego (o+w, -t).

Stephano Palazzo pod adresem Ask Ubuntu przedstawił ten bardzo pouczający obraz na temat różnych kolorów atrybutów:

Wh przy różnych oznaczeniach kolorów w terminalu

Jak wskazał 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, na przykład BLK 40;33;01 ma postać:

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

  • TEXT_STYLE wskazuje styl tekstu:

    • 00 = brak
    • 01 = pogrubienie
    • 04 = podkreślenie
    • 05 = blink
    • 07 = reverse,
    • 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 pomijać zaczynając od prawej, więc na przykład .tar 01;31 oznacza pogrubienie i kolor czerwony.

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

256-kolorowy kod koloru pierwszego planu XTerm ma postać:

38;5;[FOREGROUND_COLOR] 

256-kolorowy kod koloru tła XTerm to formularz:

48;5;[BACKGROUND_COLOR] 

gdzie zarówno FOREGROUND_COLOR, jak i BACKGROUND_COLOR to ponumeruj zakres 0-255. Pełna lista kodów kolorów dla trybów 16 i 256 kolorów jest pokazana na poniższym zrzucie ekranu:

16 i 256 kody kolorów trybu koloru

Komentarze

  • Kody BACKGROUND_COLOR to nie to samo co FOREGROUND_COLOR; Kody tła to 40-47
  • 38;5; rozpoczyna xterm 256-kolorowy kod koloru pierwszego planu. 48;5; uruchamia 256-kolorowy kod koloru tła xterm. Cyan na wyjściu moich dircolors to 38;5;51 nie 36, chociaż wynik jest taki sam.
  • @stevesliva: Dziękuję za komentarz. ' zredagowałem odpowiedź, aby poprawnie wskazać kody kolorów tła i opisałem 256-kolorowe kody kolorów pierwszego planu i tła.
  • co oznacza tylko zielony kolor na pierwszym planie oznaczać? jak mam tutaj ?
  • @ChagaiFriedlander: Pliki wykonywalne (patrz dolny wiersz w zdjęcie ).

Odpowiedź

Kolory ls mogą reprezentować uprawnienia , domyślnie w niektórych systemach wyświetlane są katalogi, w których każdy ma uprawnienia do zapisu, na zielonym tle:

tutaj wprowadź opis obrazu

Możesz zmienić kolory, edytując zmienną $LS_COLORS 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ę irytująca, ale możesz zmienić ten kolor, tworząc plik z wybranymi kolorami i zapisując go jako ~/.dircolors:

dircolors -p > ~/.dircolors 

To polecenie wypisze wartości domyślne do ~/.dircolors. Będziesz wtedy musiał 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 uczynić go czarnym tekstem na czerwonym tle (patrz tutaj , aby uzyskać listę kodów kolorów):

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

Nie musisz mieć wszystkich wartości domyślnych , możesz także 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 w akcji:

tutaj wprowadź opis obrazu

Aby stało się to automatycznie, dodaj eval polecenie powyżej do pliku ~/.bashrc.

Komentarze

  • Domyślne kolory często wydają się wskazywać, że oryginalny autor nienawidzi nas i naszych oczu …
  • Dzięki. Dlaczego czasami piszesz ~ / .dirname, a czasami ~ / dircolors, a czasami ~ / .dircolors? czy mają być takie same?
  • Th anks. Dlaczego eval "$(dircolors ~/dircolors)"; zamiast w bardziej bezpośredni sposób, na przykład dircolors ~/dircolors?
  • @Tim, ponieważ dircolors drukuje tylko ustawienia, trzeba je ocenić, aby je czytać.
  • czytać je przez kogo?

Odpowiedz

Chociaż wszystkie odpowiedzi techniczne są prawdziwe, uznałbym to za trochę nieformalne ostrzeżenie, że hojnie rozdajesz swoje prawa lub kopiujesz criss + cross … (najczęściej wszyscy to robimy , żeby wszystko na początku działało, co?)

Jak ustawić kolor niebieski na czarnym, …?

Dobrym sposobem na przywrócenie praw, które najprawdopodobniej chcesz, jest takie stwierdzenie:

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

Najlepiej rozumieć, co to robi, jeśli rozumiesz przeznaczenie wielkich liter + X „wykonanie specjalne”, np. Zobacz Wikipedia

Jest naprawdę użyteczne tylko wtedy, gdy jest używane z „+” i zazwyczaj w połączeniu z opcją -R do nadania grupie lub innej osobie dostępu 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ś użył właśnie „chmod -R a + rx …

Odpowiedź

Oto 3 kroki, które zastosowałem, aby zmienić kolory:

Najpierw skopiuj domyślne kolory do pliku

dircolors -p > ~/.dircolors 

Następnie zmodyfikuj ten plik. Wewnątrz można znaleźć wartości kolorów, a tutaj jest więcej:

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 

( źródło )

Na koniec dodaj następującą linię do swojego pliku ~/.bashrc, aby kolory były automatycznie ładowane po otwarciu terminala:

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

Dla ~/.zshrc:

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

Odpowiedz

Aby szybko rozwiązać problem (zaznacz inne pliki do zapisu na żółto na nobg):

LS_COLORS+=":ow=01;33" 

Zamień 33 na 34 zamiast niebieskiego na nobg. Jeszcze prościej, aby nofg na nobg:

LS_COLORS+=:ow= 

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

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

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

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

sed umieszcza każdą regułę w jednym wierszu i grep usuwa reguły zaczynające się od *.".


Do poznaj ls kolory 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 (tej Thomasa Nymana), 38;5; jest prefiksem pierwszego planu x-term 256-colors, a 48;5; dla 256-kolorowego tła x-term. Jednak 256 kolorów nie jest obsługiwane przez wszystkie terminale.

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

Komentarze

  • Znalazłem upuszczanie LS_COLORS+=':ow=01;33' do mojego ~/.zshrc pomogło wyłączyć kolor tła dla katalogów w repozytorium git.To jest na komputerze z systemem Windows 10 z dystrybucją Pengwin-WSL. Teraz wszystkie katalogi w git-repo są czytelne.

Odpowiedz

To znaczy, że ten folder ma uprawnienia, jeśli uruchomisz to:

сhmod og-w AU_LI

to usunie bgcolor 🙂

Odpowiedź

Aby to naprawić, wypróbuj ow na 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 

tutaj wprowadź opis obrazu

Teraz dodajesz ow (OTHER_WRITABLE) opcja

~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 

tutaj wprowadź opis obrazu Bamm !!

Komentarze

Odpowiedź

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

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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *