Co oznaczają różne kolory w ls?

363

Co lsoznaczają różne kolory w poleceniu Ubuntu ? Na przykład, gdy wpisuję lspolecenie w jednym z moich folderów, otrzymuję jeden z plików w kolorze jasnozielonym, a drugi (który jest folderem) w kolorze niebieskim z zielonym podświetleniem.

Co oznaczają te kolory i istnieje instrukcja na temat wszystkich kolorów?

Rafid
źródło

Odpowiedzi:

390
  • Niebieski : katalog
  • Zielony : plik wykonywalny lub rozpoznany
  • Sky Blue : plik linku symbolicznego
  • Żółty z czarnym tłem : urządzenie
  • Różowy : plik obrazu graficznego
  • Czerwony : plik archiwum
  • Czerwony z czarnym tłem : Przerwany link

Dla Twojej informacji:

  • Aby wyłączyć kolor, musisz skomentować następujące wiersze w .bashrc.

    # enable color support of ls and also add handy aliases
    #if [ -x /usr/bin/dircolors ]; then
    #    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    #    alias ls='ls --color=auto'
    #    #alias dir='dir --color=auto'
    #    #alias vdir='vdir --color=auto'
    #
    #    alias grep='grep --color=auto'
    #    alias fgrep='fgrep --color=auto'
    #    alias egrep='egrep --color=auto'
    #fi
    
  • Ponadto, jeśli chcesz zobaczyć własne znaczenie kolorów bash, skopiuj / wklej następujące kody w swoim terminalu.

    eval $(echo "no:global default;fi:normal file;di:directory;ln:symbolic link;pi:named pipe;so:socket;do:door;bd:block device;cd:character device;or:orphan symlink;mi:missing file;su:set uid;sg:set gid;tw:sticky other writable;ow:other writable;st:sticky;ex:executable;"|sed -e 's/:/="/g; s/\;/"\n/g')           
    {      
      IFS=:     
      for i in $LS_COLORS     
      do        
        echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m" 
      done       
    } 

    Wynik:
    alternatywny tekst

Uwaga:

karthick87
źródło
28
Ten evalskrypt pokazujący wyjściową reprezentację kolorów dla każdego typu jest genialny ... dzięki!
Russ
2
Pure sourcery;)
Homunculus Reticulli
5
Bardziej czytelna wersja tego evalskryptu znajduje się tutaj: github.com/gkotian/gautam_linux/blob/master/scripts/colours.sh
Gautam
3
Czerwony jest również martwym dowiązaniem symbolicznym.
Thomas Ward
1
co z plikami w normalnym białym tekście?
S ..
98

Możesz dowiedzieć się, jakich kolorów lsużywa, patrząc na $LS_COLORSzmienną:

  • Turkusowy: pliki audio 1
  • Jasnoczerwony: Archiwa i pliki skompresowane 2
  • Fioletowy: zdjęcia i filmy 3

Ponadto pliki są kolorowane według atrybutów:

alternatywny tekst


  1. aac, au, flac, mid, midi, mka, mp3, mpc, ogg, ra, wav, axa, oga, spx, xspf.

  2. tar, tgz, arj, taz, lzh, lzma, tlz, txz, zip, z, Z, dz, gz, lz, xz, bz2, bz, tbz, tbz2, tz, deb, rpm, jar, rar, as, zoo, cpio, 7z, rz.

  3. jpg, jpeg, gif, bmp, pbm, pgm, ppm, tga, xbm, xpm, tif, tiff, png, svg, svgz, mng, pcx, mov, mpg, mpeg, m2v, mkv, ogm, mp4, m4v, mp4v, vob, qt, nuv, wmv, asf, rm, rmvb, flc, avi, fli, flv, gl, dl, xcf, xwd, yuv, cgm, emf, axv, anx, ogv, ogx.


Wszystkie te informacje są zawarte w wynikach dircolors --print-database, ale ich formatowanie jest raczej nieczytelne.

Oto techniczne wyjaśnienie tego, co się dzieje:

Przykład:

CHR 40;33;01

Kod koloru składa się z trzech części:

  • Pierwsza część przed średnikiem reprezentuje styl tekstu.

    • 00 = brak, 01 = pogrubienie, 04 = podkreślenie, 05 = mrugnięcie, 07 = odwrócenie, 08 = ukryty.
  • Druga i trzecia część to kolor i kolor tła:

    • 30 = czarny, 31 = czerwony, 32 = zielony, 33 = żółty, 34 = niebieski, 35 = magenta, 36 = cyjan, 37 = biały.

Każdą część można pominąć, zakładając, że zaczyna się od lewej. tzn. „01” oznacza pogrubienie, „01; 31” oznacza pogrubienie i kolor czerwony. A terminal można wydrukować w kolorze, unikając instrukcji \33[i kończąc na m. 33 lub 1B w systemie szesnastkowym to znak ASCII „ESCAPE” (znak specjalny w zestawie znaków ASCII). Przykład:

"\33[1;31mHello World\33[m"

Drukuje „Hello World” w kolorze jasnoczerwonym.

Polecenie lsz argumentem --color=auto(w Ubuntu lsjest aliasem dla ls --color=auto) przechodzi przez wszystkie nazwy plików i próbuje najpierw dopasować różne typy, takie jak plik wykonywalny, potok i tak dalej. Następnie próbuje dopasować wyrażenia regularne, takie jak * .wav, i wypisuje wynikową nazwę pliku zawartą w instrukcjach zmieniających kolory dla bash.

Stefano Palazzo
źródło
Dzięki! Szukałem w Git wizualizacji topologii pytania i zastanawiał się, dlaczego niektóre znaki były wydrukowane.
pdp
27

Jeśli wpiszesz dircolors( echo $LS_COLORSdziała również) z wiersza poleceń, otrzymasz listę kodów i kolorów dla wielu rodzajów plików w 1 wierszu. dircolors --print-databasepokazuje im 1 linię na raz. Oto krótka lista (starałem się umieścić najważniejsze). Na dole znajduje się wyjaśnienie tego, co oznaczają różne kody na końcu każdego wiersza:

NORMAL 00 # globalne domyślne, chociaż wszystko powinno być czymś.
PLIK 00 # normalny plik
DIR 01; 34 # katalog
LINK 01; 36 # link symboliczny. (Jeśli ustawisz to na „target” zamiast na
 # wartość liczbowa, kolor odpowiada wskazanemu plikowi.)
FIFO 40; 33 # rura
SOCK 01; 35 # gniazdo
DOOR 01; 35 # drzwi
BLK 40; 33; 01 # sterownik urządzenia blokowego
CHR 40; 33; 01 # sterownik urządzenia znakowego
ORPHAN 40; 31; 01 # dowiązanie symboliczne do nieistniejącego pliku lub pliku niestatystycznego
SETUID 37; 41 # plik, który jest setuid (u + s)
SETGID 30; 43 # plik, który jest setgid (g + s)
STICKY_OTHER_WRITABLE 30; 42 # katalog, który jest lepki i zapisywalny w inny sposób (+ t, o + w)
OTHER_WRITABLE 34; 42 # reż, który jest zapisywalny w inny sposób (o + w) i nie jest lepki
STICKY 37; 44 # reż z lepkim zestawem bitów (+ t) i nie do zapisania w inny sposób
# archiwa lub skompresowane (jaskrawoczerwone)
.tar 01; 31
.tgz 01; 31
# formaty obrazu
.jpg 01; 35
.jpeg 01; 35
.gif 01; 35
.bmp 01; 35
# formaty audio
.aac 00; 36
.flac 00; 36
.ogg 00; 36
  • Kody atrybutów: 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
  • Kody kolorów tekstu: 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
  • Kody kolorów tła: 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white

Jeśli chcesz się tym pobawić, oto przykład, jak ustawić kolor pliku:

export LS_COLORS=$LS_COLORS:"*.ogg=01;35":"*.mp3=01;35"  

To ustawi *.oggi .mp3będzie bold magenta. A jeśli umieścisz go w swoim .bashrcpliku, stanie się on trwały.

Rinzwind
źródło
2
Hej, może ktoś inny ma lepszą odpowiedź. Przy okazji dostałeś ponad 15 tysięcy dzięki temu głosowaniu;)
Rinzwind,
kołysz się! Dotarłeś na miejsce ... Jeszcze raz dziękuję, zrobiłem / „ciąg”, aby wyszukać niektóre kolory, których nie byłem pewien
user784637
Ta (doskonała) odpowiedź została połączona , na wypadek gdybyś zastanawiał się nad datami. :-)
Stefano Palazzo
@ Rinzwind, więc aby ustawić kolor pdfpliku, należy użyć procesu export? Czy można po prostu dodać jedno rozszerzenie do LS_COLORS zmiennej domyślnej ?
Sigur
23

Rozszerza to odpowiedź Karthick87 .


Z domyślną konfiguracją

  • Bezkolorowy (biały) : tekst w pliku lub w pliku innym niż nazwa pliku (np. Uprawnienia na wyjściu ls -l)
  • Pogrubiony niebieski : katalog
  • Pogrubiony błękit : link symboliczny
  • Pogrubiony zielony : plik wykonywalny
  • Pogrubiony czerwony : plik archiwum
  • Pogrubiona magenta : plik obrazu, wideo, grafika itp. Lub drzwi lub gniazdo
  • Cyjan : plik audio
  • Żółte z czarnym tłem : fajka (AKA FIFO)
  • Pogrubiony żółty z czarnym tłem : urządzenie blokowe lub urządzenie znakowe
  • Pogrubiona czerwień z czarnym tłem : sieroce dowiązanie symboliczne lub brakujący plik
  • Niekolorowane z czerwonym tłem : plik set-user-ID
  • Czarny z żółtym tłem : plik identyfikatora grupy
  • Czarny z czerwonym tłem : plik z możliwością
  • Biały z niebieskim tłem : lepki katalog
  • Niebieski z zielonym tłem : katalog do zapisu
  • Czarny z zielonym tłem : katalog lepki i zapisywalny w inny sposób

Skrypt pokazujący kolory

#!/bin/bash
# For LS_COLORS, print type and description in the relevant color.

IFS=:
for ls_color in $LS_COLORS; do
    color="${ls_color#*=}"
    type="${ls_color%=*}"

    # Add descriptions for named types.
    case "$type" in
    bd) type+=" (block device)" ;;
    ca) type+=" (file with capability)" ;;
    cd) type+=" (character device)" ;;
    di) type+=" (directory)" ;;
    do) type+=" (door)" ;;
    ex) type+=" (executable file)" ;;
    fi) type+=" (regular file)" ;;
    ln) type+=" (symbolic link)" ;;
    mh) type+=" (multi-hardlink)" ;;
    mi) type+=" (missing file)" ;;
    no) type+=" (normal non-filename text)" ;;
    or) type+=" (orphan symlink)" ;;
    ow) type+=" (other-writable directory)" ;;
    pi) type+=" (named pipe, AKA FIFO)" ;;
    rs) type+=" (reset to no color)" ;;
    sg) type+=" (set-group-ID)" ;;
    so) type+=" (socket)" ;;
    st) type+=" (sticky directory)" ;;
    su) type+=" (set-user-ID)" ;;
    tw) type+=" (sticky and other-writable directory)" ;;
    esac

    # Separate each color with a newline.
    if [[ $color_prev ]] && [[ $color != $color_prev ]]; then
        echo
    fi

    printf "\e[%sm%s\e[m " "$color" "$type"

    # For next loop
    color_prev="$color"
done
echo

Wyjście z domyślną konfiguracją:

zrzut ekranu gnome-terminal

Wyjście z moją konfiguracją (niestandardowe dircolors i niestandardowy motyw Solarized terminal):

zrzut ekranu gnome-terminal

Dostałem opisy od dircolors -pi man dir_colorsuzupełniałem luki własnymi badaniami.

Kolory i opisy są takie same od 14.04 do 17.10.

wjandrea
źródło
Skąd wiedziałeś o rsśrodkach RESET, mhśrodkach MULTIHARDLINK, caśrodkach CAPABILITYitp.?
Fredrick Gauss,
@FredrickGauss Jak napisałem w odpowiedzi, otrzymałem opisy z biegania dircolors -p.
wjandrea
dircolors -pnie mówi, że rs jest RESETOWANE 0 # reset do „normalnego” koloru .
Fredrick Gauss
@FredrickGauss Nie jawnie, ale „RESET” jest jedynym, który można skrócić jako „rs”, a kolor (0) pasuje.
wjandrea
18

Żadna z odpowiedzi tutaj nie zawiera 256 opcji kolorów w najnowszych wersjach Ubuntu. Mam niedobór kolorów (niektóre kolory sprawiają mi problemy w pobliżu), więc domyślnie niebieski katalog na czarnym jest dla mnie bardzo trudny do odczytania. Poniżej moje badania, aby to zmienić.

Wpisz, dircolors -p |lessaby zobaczyć swój obecny kod koloru.

Domyślny plik .bashrc powinien być już skonfigurowany nie tylko w celu wykorzystania systemowego kodu koloru, ale także w ~ / .dircolors, więc zrzuć wyjście dircolors do .dircolor, abyś mógł zacząć od tego za pomocą tego polecenia. dircolors -p > ~/.dircolors

Alternatywa: podnieś bardzo podobne 256 kolorowe dircolors z solaryzowanego projektu seebi .

Chwyć ten najobszerniejszy skrypt i uruchom go za pomocą polecenia, colortest -waby zobaczyć wszystkie kolory jednocześnie. Wybierz kolor. Lubię pomarańczę # 208. Chcę, aby był to kolor tekstu, więc korzystając z tych informacji o rozszerzonych kodach kolorów, mogę to zastosować.

Więc masz kolor, co teraz. Najpierw musimy utworzyć ciąg.

Pierwsza liczba będzie kodem atrybutu, najprawdopodobniej 00, ale jeśli chcesz, żeby migała, wybierz 05:

Wybierz kod atrybutu: 00 = brak 01 = pogrubienie 04 = podkreślenie 05 = miganie 07 = odwrócenie 08 = ukryte

Następnie wybierz dołącz ;38;5;do tego kodu atrybutu, aby wskazać kolor tekstu, aby uzyskać 00; 38; 5; a następnie dodaj swój kolor. Wybrałem 208, więc rozumiem 00;38;5;208.

Jeśli chcesz także umieścić na nim tło, wybierz inny kolor (powiedzmy 56) za pomocą najbarwniejszego skryptu i dopisz ;48;5;tło i 56, aby uzyskać całkowity ciąg 00;38;5;208;48;5;56.

Więc teraz to masz, co z tym robisz?

vim ~/.dircolors i znajdź sekcję, którą chcesz zmienić (dla mnie DIR) na ciąg, który ustaliliśmy powyżej „00; 38; 5; 208”.

Nie nastąpi to natychmiast, musisz załadować konfigurację. Użyj dircolors ~/.dircolorsdo uzyskania kodu, aby ustawić zmienną LS_COLORS. Możesz po prostu wkleić to do sesji terminalu lub możesz zamknąć terminal i otworzyć go ponownie. Możesz także potokować to do pliku i uruchomić jako skrypt powłoki.

Możesz wykonać tę samą procedurę z 16 kolorami. Nie potrzebujesz specjalnych; 38; 5 lub; 48; 5 rzeczy. Po prostu wrzuć liczby do sznurka i ciesz się prostotą.

Podziękowania dla Dana i seebi za ich notatki i kod na ten temat.

Flickerfly
źródło
sprawdź, czy 256 kolorów będzie działać tylko w terminalach kompatybilnych z Xterm . Tak więc 256 kolorów nie działa dla mnie z Konsole, ale działa z xterm i rxvt-unicode .
DK Bose
1
Konsole robi swoje. Sprawdź draculatheme.com/konsole lub techoverflow.net/2013/11/08/installing-konsole-solarized-theme, aby uzyskać ładną kolorystykę.
flickerfly