Apa arti perbedaan warna dalam ls?

364

Apa arti perbedaan warna dalam lsperintah Ubuntu ? Misalnya, ketika saya mengetik lsperintah di salah satu folder saya, saya mendapatkan salah satu file berwarna hijau muda, yang lain (yang merupakan folder) berwarna biru dengan highlight hijau.

Apa arti warna-warna itu, dan ada manual tentang semua warna?

Rafid
sumber

Jawaban:

391
  • Biru : Direktori
  • Hijau : File data yang dapat dieksekusi atau dikenali
  • Biru Langit : File tautan simbolik
  • Kuning dengan latar belakang hitam : Perangkat
  • Merah muda : File gambar grafik
  • Merah : File arsip
  • Merah dengan latar belakang hitam : Tautan rusak

Untuk informasi anda:

  • Untuk mematikan warna, Anda harus mengomentari baris berikut dalam .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
    
  • Juga jika Anda ingin melihat makna warna bash Anda sendiri, maka salin / tempel kode berikut di terminal Anda.

    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       
    } 
    

    Keluaran:
    teks alternatif

catatan:

karthick87
sumber
28
Bahwa evalnaskah menampilkan warna representasi output untuk setiap jenis brilian ... terima kasih!
Russ
2
Sourcery murni;)
Homunculus Reticulli
5
Versi evalskrip yang lebih mudah dibaca ada di sini: github.com/gkotian/gautam_linux/blob/master/scripts/colours.sh
Gautam
3
Merah juga merupakan symlink mati.
Thomas Ward
1
bagaimana dengan file dalam teks putih normal?
S ..
98

Anda dapat mengetahui warna apa yang lsdigunakan dengan melihat $LS_COLORSvariabel:

  • Pirus: file audio 1
  • Merah Terang: Arsip dan file terkompresi 2
  • Ungu: gambar dan video 3

Selain itu, file diwarnai oleh atribut:

teks alternatif


  1. aac, au, flac, pertengahan, 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, ace, kebun binatang, 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.


Semua informasi ini terkandung dalam output dari dircolors --print-database, tetapi formatnya agak tidak dapat dibaca.

Berikut penjelasan teknis tentang apa yang terjadi:

Contoh:

CHR 40;33;01

Kode warna terdiri dari tiga bagian:

  • Bagian pertama sebelum titik koma mewakili gaya teks.

    • 00 = tidak ada, 01 = tebal, 04 = garis bawah, 05 = berkedip, 07 = terbalik, 08 = disembunyikan.
  • Bagian kedua dan ketiga adalah warna dan warna latar:

    • 30 = hitam, 31 = merah, 32 = hijau, 33 = kuning, 34 = biru, 35 = magenta, 36 = cyan, 37 = putih.

Setiap bagian dapat dihilangkan, dengan asumsi mulai dari sebelah kiri. yaitu "01" berarti huruf tebal, "01; 31" berarti huruf tebal dan merah. Dan Anda akan mendapatkan terminal Anda untuk mencetak dalam warna dengan lolos dari instruksi dengan \33[dan diakhiri dengan m. 33, atau 1B dalam heksadesimal, adalah tanda ASCII "ESCAPE" (karakter khusus dalam rangkaian karakter ASCII). Contoh:

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

Mencetak "Hello World" dengan warna merah terang.

Perintah lsdengan argumen --color=auto(pada Ubuntu, lsadalah alias untuk ls --color=auto) memeriksa semua nama file dan mencoba terlebih dahulu untuk mencocokkan jenis yang berbeda, seperti Executable, Pipe dan sebagainya. Ia kemudian mencoba mencocokkan ekspresi reguler seperti * .wav dan mencetak nama file yang dihasilkan, terlampir dalam instruksi pengubah warna ini untuk bash.

Stefano Palazzo
sumber
Terima kasih! Saya sedang melihat pertanyaan visualisasi topologi Git dan bertanya-tanya mengapa beberapa karakter dicetak.
pdp
27

Jika Anda mengetik dircolors( echo $LS_COLORSjuga berfungsi) dari baris perintah, Anda akan mendapatkan daftar kode dan warna untuk banyak tipe file dalam 1 baris. dircolors --print-databasemenunjukkan kepada mereka 1 baris sekaligus. Berikut adalah daftar singkat (saya mencoba memasukkan yang paling penting). Di bagian bawah ada penjelasan tentang apa kode yang berbeda di akhir setiap baris mewakili:

NORMAL 00 # default global, meskipun semuanya harus menjadi sesuatu.
FILE 00 # file normal
Direktori DIR 01; 34 #
LINK 01; 36 # tautan simbolik. (Jika Anda menetapkan ini ke 'target' alih-alih a
 # nilai numerik, warnanya untuk file yang ditunjukkan.)
FIFO 40; 33 # pipa
SOCK 01; soket 35 #
PINTU 01; 35 # pintu
BLK 40; 33; 01 # blokir driver perangkat
CHR 40; 33; 01 # driver perangkat karakter
ORPHAN 40; 31; 01 # symlink ke file yang tidak ada, atau file yang tidak dapat di-stat-kan
SETUID 37; 41 # file yang disetuid (u + s)
SETGID 30; 43 # file yang disetgid (g + s)
STICKY_OTHER_WRITABLE 30; 42 # dir yang lengket dan dapat ditulis lainnya (+ t, o + w)
OTHER_WRITABLE 34; 42 # dir yang dapat ditulis oleh orang lain (o + w) dan tidak lengket
STICKY 37; 44 # dir dengan set sticky bit (+ t) dan tidak dapat ditulis lainnya
# arsip atau dikompresi (merah terang)
.tar 01; 31
.tgz 01; 31
# format gambar
.jpg 01; 35
.jpeg 01; 35
.gif 01; 35
.bmp 01; 35
# format audio
.aac 00; 36
.flac 00; 36
.ogg 00; 36
  • Kode atribut: 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
  • Kode warna teks: 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
  • Kode warna latar belakang: 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white

Jika Anda ingin bermain-main dengan ini di sini adalah contoh tentang cara mengatur warna untuk file:

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

Ini akan mengatur *.oggdan .mp3ke bold magenta. Dan jika Anda memasukkannya ke dalam .bashrcfile Anda itu akan menjadi permanen.

Rinzwind
sumber
2
Hei, mungkin ada orang lain yang memberikan jawaban yang lebih baik. Tapi Anda membuat saya lebih dari 15k dengan upvote ini;)
Rinzwind
teruskan! Anda punya sendiri di sana ... Terima kasih lagi, saya membuat / "string" untuk mencari beberapa warna yang saya tidak yakin tentang
user784637
Jawaban (luar biasa) ini digabungkan , jika Anda penasaran dengan tanggalnya. :-)
Stefano Palazzo
@Rinzwind, jadi untuk mengatur warna untuk pdffile, prosesnya adalah menggunakan export? Apakah mungkin untuk hanya menambahkan satu ekstensi dalam LS_COLORS variabel default ?
Sigur
23

Ini memperluas jawaban Karthick87 .


Dengan pengaturan standar

  • Tidak berwarna (putih) : file atau teks non-nama file (misalnya izin dalam output dari ls -l)
  • Biru tebal : direktori
  • Bold cyan : tautan simbolik
  • Hijau tebal : file yang dapat dieksekusi
  • Merah tebal : file arsip
  • Magenta tebal : file gambar, video, grafik, dll. Atau pintu atau soket
  • Cyan : file audio
  • Kuning dengan latar belakang hitam : pipa (AKA FIFO)
  • Kuning tebal dengan latar belakang hitam : memblokir perangkat atau perangkat karakter
  • Merah tebal dengan latar belakang hitam : orphan symlink atau file yang hilang
  • Tidak berwarna dengan latar belakang merah : file set-user-ID
  • Hitam dengan latar belakang kuning : set-group-ID file
  • Hitam dengan latar belakang merah : file dengan kemampuan
  • Putih dengan latar belakang biru : direktori lengket
  • Biru dengan latar belakang hijau : direktori yang dapat ditulis lainnya
  • Hitam dengan latar belakang hijau : direktori sticky dan dapat ditulis lainnya

Script untuk menunjukkan warna

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

Output dengan pengaturan default:

tangkapan layar gnome-terminal

Keluaran dengan pengaturan saya (dircolors khusus dan tema terminal Terpolarisasi khusus):

tangkapan layar gnome-terminal

Saya mendapatkan deskripsi dari dircolors -pdan man dir_colors, dan mengisi kekosongan dengan penelitian saya sendiri.

Warna dan deskripsinya sama dari 14,04 hingga 17,10.

wjandrea
sumber
Bagaimana Anda tahu rsberarti RESET, mhberarti MULTIHARDLINK, caberarti CAPABILITYdll?
Fredrick Gauss
@ FredrickGauss Ketika saya menulis jawaban, saya mendapatkan deskripsi dari menjalankan dircolors -p.
wjandrea
dircolors -ptidak mengatakan rs adalah RESET 0 # reset ke warna "normal" .
Fredrick Gauss
@FredrickGauss Tidak secara eksplisit, tetapi "RESET" adalah satu-satunya yang dapat disingkat "rs", dan warnanya (0) cocok.
wjandrea
18

Tidak ada jawaban di sini yang menyertakan 256 opsi warna dalam versi terbaru Ubuntu. Saya kekurangan warna (beberapa warna membuat saya kesulitan dekat satu sama lain) sehingga direktori biru default pada hitam sangat sulit bagi saya untuk membaca. Berikut ini adalah penelitian saya untuk mengubahnya.

Ketik dircolors -p |lessuntuk melihat kode warna Anda saat ini.

Default .bashrc harus sudah dikonfigurasi tidak hanya untuk mengambil keuntungan dari kode warna sistem, tetapi juga satu di ~ / .dircolors jadi buang output dircolors ke .dircolor sehingga Anda bisa mulai dengan menggunakan perintah ini. dircolors -p > ~/.dircolors

Alternatif: mengambil sangat mirip 256 dircolors warna dari solarized seebi ini proyek.

Raih skrip colortest ini dan jalankan dengan perintah colortest -wsehingga Anda bisa melihat semua warna sekaligus. Pilih warna. Saya suka jeruk # 208. Saya ingin itu menjadi warna teks jadi menggunakan info ini pada kode warna yang diperluas, saya bisa menerapkannya.

Jadi Anda punya warna, sekarang apa. Pertama kita harus membuat string.

Angka pertama akan menjadi kode atribut, kemungkinan besar 00, tetapi jika Anda ingin berkedip, lanjutkan dengan 05:

Pilih kode atribut: 00 = tidak ada 01 = tebal 04 = garis bawah 05 = kedip 07 = terbalik 08 = disembunyikan

Selanjutnya pilih tambahkan ;38;5;kode atribut itu untuk menunjukkan warna teks Anda untuk mendapatkan 00; 38; 5; dan kemudian menambahkan warna Anda. Saya memilih 208, jadi saya dapat 00;38;5;208.

Jika Anda ingin juga meletakkan latar belakang di atasnya, pilih warna lain (misalkan 56) dengan skrip colortest dan tambahkan ;48;5;latar belakang dan 56 untuk warna untuk mendapatkan total string 00;38;5;208;48;5;56.

Jadi sekarang Anda memilikinya, apa yang Anda lakukan dengannya?

vim ~/.dircolors dan temukan bagian yang ingin Anda ubah (untuk saya yaitu DIR) ke string yang kami tentukan di atas "00; 38; 5; 208".

Ini tidak akan segera berlaku, Anda harus memuat konfigurasi. Gunakan dircolors ~/.dircolorsuntuk mendapatkan kode untuk mengatur variabel LS_COLORS Anda. Anda bisa menempelkannya ke sesi terminal Anda atau menutup terminal dan membukanya kembali. Anda juga bisa menyalurkannya ke file dan menjalankannya sebagai skrip shell.

Anda dapat melakukan prosedur yang sama dengan 16 warna. Anda tidak memerlukan barang-barang khusus; 38; 5 atau; 48; 5 Cukup lempar angka ke dalam string dan nikmati kesederhanaannya.

Terima kasih kepada Dan dan seebi untuk catatan dan kode mereka tentang ini.

flickerfly
sumber
periksa apakah 256 warna hanya akan berfungsi di terminal yang kompatibel dengan xterm . Jadi, 256 warna tidak berfungsi untuk saya dengan Konsole tetapi bekerja dengan xterm dan rxvt-unicode .
DK Bose
1
Konsole melakukan hal sendiri. Lihatlah draculatheme.com/konsole atau techoverflow.net/2013/11/08/installing-konsole-solarized-theme untuk skema warna yang bagus.
flickerfly