Co znamenají různé barvy v ls?

301

Co znamenají různé barvy v příkazuls Ubuntu? Například když zadám příkazls do jednoho z mých složek, dostanu jeden ze souborů světle zelený, druhý (což je složka) modře se zvýrazněním zeleně.

Co znamenají tyto barvy a existuje nějaká příručka o všech barvách?

    
dané Rafid 14.12.2010 09:15

5 odpovědí

311
  • Modrá : Adresář
  • Zelená : spustitelný nebo rozpoznaný datový soubor
  • Sky Blue : symbolický odkazový soubor
  • Žlutá s černým pozadím : Zařízení
  • Růžová : Grafický soubor obrázku
  • Červená : Archivovat soubor
  • Červená s černým pozadím : zlomený odkaz

Vaše informace:

  • Chcete-li barvu vypnout, musíte v.bashrc

    vykládat následující řádky
    # 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
    
  • Také pokud chcete vidět vlastní barvy barev, pak zkopírujte / vložte následující kódy do terminálu.

      
    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       
    } 
    

    Výstup:

Poznámka:

odpověděl karthick87 14.12.2010 09:18
86

Můžete zjistit, jaké barvyls používá při pohledu na proměnnou$LS_COLORS:

  • Tyrkysová: zvukové soubory 1
  • Jasně červená: Archivy a komprimované soubory 2
  • Fialová: obrázky a videa 3

Soubory jsou navíc zbarveny atributy:

  1. aac, au, flac, střední, midi, mka, mp3, mpc, ogg, ra, wav, xa, spga, xspf.

  2. tar, tzz, arj, tz, lz, lzma, tzz, tzz, zz, z, jar, rar, eso, zoo, cpio, 7z, rz.

  3. jpg, jpeg, gif, bmp, pbm, pgm, ppm, tga, xbm, xpm, tif, tiff, png, svgz, mng, ogm, mp4, m4v, mp4v, vob, qt, nvv, wmv, asf, rm, rmvb, flc, avi, ogx.

Všechny tyto informace jsou obsaženy ve výstupudircolors --print-database, ale jeho formátování je poněkud nečitelné.

Zde je technické vysvětlení toho, co se děje:

Příklad:

CHR 40;33;01

Kód barvy se skládá ze tří částí:

  • První část před středníkem představuje styl textu.

    • 00 = žádný, 01 = tučný, 04 = podtržítko, 05 = blikat, 07 = vzad, 08 = skrytý
  • Druhá a třetí část jsou barva a barva pozadí:

    • 30 = černá, 31 = červená, 32 = zelená, 33 = žlutá, 34 = modrá, 35 = purpurová,

Každá část může být vynechána za předpokladu, že začíná vlevo. "01" znamená tučně, "01; 31" znamená tučné a červené. A vy byste dostali váš terminál k tisku v barvě uniknutím příkazu[ a jeho ukončením pomocím. 33 nebo 1B v šestnáctkové soustavě je znak ASCII "ESCAPE" (zvláštní znak v znakové sadě ASCII). Příklad:

"[1;31mHello World[m"

Vytiskne "Hello World" v jasně červené barvě.

Příkazls s argumentem--color=auto (na Ubuntu,ls je alias prols --color=auto) prochází všemi názvy souborů a nejprve se pokusí shodovat s různými typy jako Executable, Pipe a tak dále . Pak se pokusí přizpůsobit regulární výrazy jako * .wav a vytiskne výsledný název souboru, který je obsažen v těchto pokynech pro změnu barev pro bash.

    
odpověděl Stefano Palazzo 14.12.2010 09:57
27

Pokud zadejte příkaz dircolors (echo $LS_COLORS také funguje) line dostanete seznam kódů a barev pro mnoho typů souborů v 1 řádku. dircolors --print-database jim zobrazuje 1 řádek najednou. Zde je krátký seznam (snažil jsem se dát ty nejdůležitější). V dolní části je vysvětlení, jaké odlišné kódy na konci každého řádku představují:

NORMAL 00 # global default, although everything should be something.
FILE 00 # normal file
DIR 01;34 # directory
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
 # numerical value, the color is as for the file pointed to.)
FIFO 40;33 # pipe
SOCK 01;35 # socket
DOOR 01;35 # door
BLK 40;33;01 # block device driver
CHR 40;33;01 # character device driver
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
SETUID 37;41 # file that is setuid (u+s)
SETGID 30;43 # file that is setgid (g+s)
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
# archives or compressed (bright red)
.tar 01;31
.tgz 01;31
# image formats
.jpg 01;35
.jpeg 01;35
.gif 01;35
.bmp 01;35
# audio formats
.aac 00;36
.flac 00;36
.ogg 00;36
  • Atributy kódy:00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
  • Kódy barev textu:30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
  • Kódy barvy pozadí:40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white

Chcete-li si s touto možností zahrát, je příklad, jak nastavit barvu souboru:

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

Nastaví se*.ogg a.mp3 nabold magenta. A pokud ji umístíte do souboru.bashrc, stane se trvalý.

    
odpověděl Rinzwind 14.09.2011 10:25
15

Žádná z odpovědí zde neobsahuje 256 barevných možností v nejnovějších verzích Ubuntu. Jsem barevná nedostatečná (některé barvy mi dávají problémy blízko sebe), takže výchozí modrý adresář na černém je pro mě opravdu těžké číst. To, co následuje, je můj výzkum, abych to změnil.

Zadejtedircolors -p |less pro zobrazení vašeho aktuálního barevného kódu.

Výchozí soubor .bashrc by měl být již nakonfigurován nejen pro využití kódu barev systému, ale i pro jeden / ~ .dircolors, takže výpis dircolors do dircolor vynechá, takže můžete začít s použitím tohoto příkazu. dircolors -p > ~/.dircolors

Alternativa: vyzvednout velmi podobné 256 barevných dircolorů z vizi solarized .

Uchopte tento skript colortest a spusťte jej příkazemcolortest -w, abyste viděli všechny barvy najednou. Vyberte barvu. Líbí se mi oranžová # 208. Chci, aby to byla barva textu, takže pomocí těchto informací na rozšířených barevných kódech mohu použít toto.

Takže máte barvu, teď co. Nejprve musíme vytvořit řetězec.

První číslo bude kód atributu, s největší pravděpodobností 00, ale pokud chcete blikat, jděte s číslem 05:

  

Zvolte kód atributu: 00 = žádný 01 = tučný 04 = podtržítka 05 = bliká 07 = zpět 08 = skrytý

Dalším výběrem přidejte;38;5; k tomuto atributovému kódu, který indikuje barvu textu, abyste získali 00; 38; 5; a poté připojte svou barvu. Zvolil jsem 208, takže dostanu00;38;5;208.

Chcete-li také položit pozadí, vyberte jinou barvu (řekněme 56) skriptem colortest a přidejte;48;5; pro pozadí a 56 pro barvu získáte celkový řetězec00;38;5;208;48;5;56.

Takže teď máte to, co s ním děláte?

vim ~/.dircolors a najít sekci, kterou chcete změnit (pro mě, která je DIR) na řetězec, který jsme určili nad "00; 38; 5; 208".

To nebude platit okamžitě, budete muset načíst konfiguraci. Použijtedircolors ~/.dircolors pro získání kódu pro nastavení proměnné LS_COLORS. Můžete to prostě vložit do terminálu nebo zavřít terminál a znovu ho otevřít. Také byste mohli do tohoto souboru přenést a spustit jej jako shellový skript.

Můžete provést stejný postup se 16 barvami. Nepotřebujete speciální, 38, 5 nebo 48, 5 věci. Stačí házet čísla do řetězce a užít si jednoduchosti.

Díky Dan a see pro jejich poznámky a kód na toto.

    
odpověděl flickerfly 22.03.2013 21:45
14

Rozšiřuje se o odpověď Karthick87 .

S výchozím nastavením

  • Nezbarvený (bílý) : soubor nebo text bez názvu souboru (např. oprávnění ve výstupuls -l)
  • Tučná modrá : adresář
  • Tučné azurové : symbolický odkaz
  • Tučná zelená : spustitelný soubor
  • Tučná červená : Archivovaný soubor
  • Tučná purpurová : obrazová, video, grafická, nebo zásuvka nebo
  • Azurová : zvukový soubor
  • Žlutá s černým pozadím : trubka (AKA FIFO)
  • Tučná žlutá s černým pozadím : blokování znakového zařízení nebo
  • Tučná červená s černým pozadím : chybějící soubor
  • Nezafarbený s červeným pozadím : soubor s nastaveným uživatelským ID
  • Černá se žlutým podkladem : Soubor ID skupiny souborů
  • Černá s červeným pozadím : soubor s možností
  • Bílá s modrým pozadím : slepý adresář
  • Modrá se zeleným pozadím : jiný zapisovatelný adresář
  • Černá se zeleným pozadím : adresář s lepivým a jiným zápisem

Skript pro zobrazení barev

#!/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

Výstup s výchozím nastavením:

Výstup s mým nastavením (vlastní dircolory a vlastní motiv Solarized terminálu):

Mám popisy zdircolors -p aman dir_colors a vyplnil mezeru vlastním výzkumem.

Barvy a popisy jsou stejné od 14.04 do 17.10.

    
odpověděl wjandrea 17.02.2017 22:05