สีที่แตกต่างหมายถึงอะไรใน ls?


364

สีที่ต่างกันในlsคำสั่งของ Ubuntu หมายความว่าอย่างไร ตัวอย่างเช่นเมื่อฉันพิมพ์lsคำสั่งในโฟลเดอร์ใดโฟลเดอร์หนึ่งของฉันฉันจะได้รับไฟล์ใดไฟล์หนึ่งในสีเขียวอ่อนส่วนอีกไฟล์หนึ่ง (ซึ่งเป็นโฟลเดอร์) เป็นสีน้ำเงินโดยมีการเน้นสีเขียว

สีเหล่านั้นหมายถึงอะไรและมีคู่มือใดเกี่ยวกับสีทั้งหมดหรือไม่

คำตอบ:


391
  • สีน้ำเงิน : สารบบ
  • เขียว : ไฟล์ข้อมูลที่เรียกใช้งานได้หรือที่รู้จัก
  • Sky Blue : ไฟล์ลิงก์สัญลักษณ์
  • สีเหลืองกับพื้นหลังสีดำ : อุปกรณ์
  • ชมพู : ไฟล์ภาพกราฟิก
  • แดง : ไฟล์เก็บถาวร
  • สีแดงกับพื้นหลังสีดำ : ลิงค์เสีย

สำหรับข้อมูลของคุณ:

  • .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
    
  • นอกจากนี้หากคุณต้องการเห็นความหมายสีทุบตีของคุณเองให้คัดลอก / วางรหัสต่อไปนี้ในเครื่องเทอร์มินัลของคุณ

    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       
    } 

    เอาท์พุท:
    ข้อความแสดงแทน

บันทึก:

  • สำหรับข้อมูลเพิ่มเติมพิมพ์man dir_colorsใน terminal

28
evalสคริปต์นั้นแสดงการแสดงสีออกสำหรับแต่ละประเภทนั้นยอดเยี่ยม ... ขอบคุณ!
Russ

2
ของหวานบริสุทธิ์;)
Homunculus Reticulli

5
รุ่นevalสคริปต์ที่อ่านได้เพิ่มเติมอยู่ที่นี่: github.com/gkotian/gautam_linux/blob/master/scripts/colours.sh
Gautam

3
สีแดงก็เป็น symlink ที่ตายแล้ว
Thomas Ward

1
สิ่งที่เกี่ยวกับไฟล์ในข้อความสีขาวปกติ?
..

98

คุณสามารถค้นหาสีที่lsใช้โดยดูที่$LS_COLORSตัวแปร:

  • Turquoise: ไฟล์เสียง1
  • สีแดงสด: เอกสารสำคัญและไฟล์บีบอัด2
  • สีม่วง: รูปภาพและวิดีโอ3

นอกจากนี้ไฟล์ยังได้รับการสนับสนุนโดยแอททริบิวต์:

ข้อความแสดงแทน


  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, รอบต่อนาที, jar, rar, ace, สวนสัตว์, cpio, 7z, rz

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


ข้อมูลทั้งหมดนี้มีอยู่ในผลลัพธ์ของdircolors --print-databaseแต่การจัดรูปแบบของมันค่อนข้างอ่านไม่ได้

นี่คือคำอธิบายทางเทคนิคของสิ่งที่เกิดขึ้น:

ตัวอย่าง:

CHR 40;33;01

รหัสสีประกอบด้วยสามส่วน:

  • ส่วนแรกก่อนเครื่องหมายอัฒภาคแสดงถึงลักษณะข้อความ

    • 00 = ไม่มี, 01 = ตัวหนา, 04 = ขีดล่าง, 05 = กะพริบ, 07 = ถอย, 08 = ซ่อน
  • ส่วนที่สองและสามคือสีและสีพื้นหลัง:

    • 30 = สีดำ, 31 = สีแดง, 32 = สีเขียว, 33 = สีเหลือง, 34 = สีฟ้า, 35 = สีม่วงแดง, 36 = สีฟ้า, 37 = สีขาว

แต่ละส่วนสามารถละเว้นได้โดยเริ่มจากด้านซ้าย เช่น "01" หมายถึงตัวหนา "01; 31" หมายถึงตัวหนาและสีแดง และคุณจะได้รับ terminal ของคุณพิมพ์สีโดยการหลบหนีการเรียนการสอนด้วยและลงท้ายด้วย\33[ m33 หรือ 1B ในเลขฐานสิบหกคือเครื่องหมาย ASCII "ESCAPE" (อักขระพิเศษในชุดอักขระ ASCII) ตัวอย่าง:

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

พิมพ์ "Hello World" ด้วยสีแดงสดใส

คำสั่งที่lsมีอาร์กิวเมนต์--color=auto(บน Ubuntu lsเป็นนามแฝงls --color=auto) จะผ่านชื่อไฟล์ทั้งหมดและพยายามก่อนเพื่อให้ตรงกับประเภทที่แตกต่างกันเช่น Executable, Pipe และอื่น ๆ จากนั้นจะพยายามจับคู่นิพจน์ทั่วไปเช่น * .wav และพิมพ์ชื่อไฟล์ที่ได้ซึ่งอยู่ในคำแนะนำการเปลี่ยนสีเหล่านี้สำหรับการทุบตี


ขอบคุณ! ฉันกำลังดู คำถามเกี่ยวกับการสร้างภาพโทโพโลยี Gitและสงสัยว่าทำไมบางตัวละครจึงถูกพิมพ์
pdp

27

หากคุณพิมพ์dircolors( echo $LS_COLORSยังใช้งานได้) จากบรรทัดคำสั่งคุณจะได้รับรายการรหัสและสีสำหรับประเภทไฟล์จำนวนมากใน 1 บรรทัด dircolors --print-databaseแสดงครั้งละ 1 บรรทัด นี่คือรายการสั้น ๆ (ฉันพยายามใส่สิ่งที่สำคัญที่สุด) ที่ด้านล่างมีคำอธิบายเกี่ยวกับรหัสที่แตกต่างกันในตอนท้ายของแต่ละบรรทัดแสดงถึง:

ปกติ 00 # ทั่วโลกเริ่มต้นแม้ว่าทุกอย่างควรจะเป็นอะไร
ไฟล์ปกติ 00 #
DIR 01; 34 # ไดเรกทอรี
ลิงค์ 01; 36 # ลิงก์สัญลักษณ์ (หากคุณตั้งค่านี้เป็น 'เป้าหมาย' แทนที่จะเป็น
 # ค่าตัวเลขสีเป็นไฟล์ที่ชี้ไป)
FIFO 40; 33 # pipe
SOCK 01; ซ็อกเก็ต 35 #
ประตู 01; 35 # ประตู
BLK 40; 33; 01 # บล็อคไดรเวอร์อุปกรณ์
CHR 40; 33; 01 # ไดรเวอร์อุปกรณ์ตัวอักษร
ORPHAN 40; 31; 01 # symlink ไปยังไฟล์ที่ไม่มีอยู่หรือไฟล์ที่ไม่มีสถานะ
SETUID 37; 41 # ไฟล์ที่ setuid (u + s)
SETGID 30; 43 # ไฟล์ที่ setgid (g + s)
STICKY_OTHER_WRITABLE 30; 42 # dir ที่เหนียวและเขียนได้อื่น (+ t, o + w)
OTHER_WRITABLE 34; 42 # dir ที่เขียนได้อื่น (o + w) และไม่เหนียว
STICKY 37; 44 # dir พร้อมกับชุดบิตเหนียว (+ t) และไม่สามารถเขียนได้แบบอื่น
# คลังเก็บหรือบีบอัด (สีแดงสด)
.tar 01; 31
.tgz 01; 31
# รูปแบบภาพ
.jpg 01; 35
.jpeg 01; 35
.gif 01; 35
.bmp 01; 35
# รูปแบบเสียง
.aac 00; 36
.flac 00; 36
.ogg 00; 36
  • รหัสคุณสมบัติ: 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
  • รหัสสีข้อความ: 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
  • รหัสสีพื้นหลัง: 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white

หากคุณต้องการที่จะเล่นกับสิ่งนี้นี่คือตัวอย่างเกี่ยวกับวิธีการตั้งค่าสีสำหรับไฟล์:

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

นี้จะตั้ง*.oggและการ.mp3 bold magentaและถ้าคุณใส่ไว้ใน.bashrcไฟล์มันจะกลายเป็นถาวร


2
เฮ้บางทีคนอื่นอาจมาพร้อมคำตอบที่ดีกว่า Btw คุณได้รับฉันมากกว่า 15k ด้วย upvote นี้)
Rinzwind

ร็อคบน! คุณไปถึงที่นั่นแล้ว ... ขอขอบคุณอีกครั้งฉันทำ a / "string" เพื่อค้นหาสีที่ฉันไม่แน่ใจ
user784637

คำตอบที่ยอดเยี่ยมนี้ถูกรวมเข้าด้วยกันในกรณีที่คุณสงสัยเกี่ยวกับวันที่ :-)
Stefano Palazzo

@Rinzwind ดังนั้นหากต้องการตั้งค่าสีสำหรับpdfไฟล์กระบวนการจะใช้งานexportอย่างไร เป็นไปได้หรือไม่ที่จะเพิ่มส่วนขยายหนึ่งตัวในLS_COLORS ตัวแปรเริ่มต้น
Sigur

23

นี้จะขยายในคำตอบของ Karthick87


ด้วยการตั้งค่าเริ่มต้น

  • Uncolored (white) : ไฟล์หรือข้อความที่ไม่ใช่ชื่อไฟล์ (เช่นสิทธิ์ในผลลัพธ์ของls -l)
  • สีน้ำเงินตัวหนา : ไดเรกทอรี
  • ฟ้าเข้ม : ลิงก์สัญลักษณ์
  • Bold green : ไฟล์ที่เรียกทำงานได้
  • ตัวหนาสีแดง : ไฟล์เก็บถาวร
  • Bold magenta : ไฟล์รูปภาพวิดีโอกราฟิก ฯลฯหรือประตูหรือซ็อกเก็ต
  • Cyan : ไฟล์เสียง
  • สีเหลืองกับพื้นหลังสีดำ : pipe (AKA FIFO)
  • ตัวหนาสีเหลืองพร้อมพื้นหลังสีดำ : อุปกรณ์บล็อคหรืออุปกรณ์ตัวละคร
  • ตัวหนาสีแดงพร้อมพื้นหลังสีดำ : เด็กกำพร้า symlink หรือไฟล์หายไป
  • ไม่มีสีพื้นหลังสีแดง : ไฟล์ set-user-ID
  • ดำพร้อมพื้นหลังสีเหลือง : ไฟล์ set-group-ID
  • ดำพร้อมพื้นหลังสีแดง : ไฟล์ที่มีความสามารถ
  • สีขาวกับพื้นหลังสีน้ำเงิน : ไดเรกทอรีเหนียว
  • สีน้ำเงินพร้อมพื้นหลังสีเขียว : ไดเรกทอรีอื่น ๆ ที่สามารถเขียนได้
  • สีดำกับพื้นหลังสีเขียว : ไดเรกทอรีเหนียวและอื่น ๆ ที่เขียนได้

สคริปต์เพื่อแสดงสี

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

เอาต์พุตพร้อมการตั้งค่าเริ่มต้น:

ภาพหน้าจอ gnome-terminal

เอาท์พุทด้วยการตั้งค่าของฉัน (dircolors ที่กำหนดเองและชุดรูปแบบเทอร์มินัล Solarized แบบกำหนดเอง):

ภาพหน้าจอ gnome-terminal

ฉันได้คำอธิบายจากdircolors -pและman dir_colorsและเติมเต็มช่องว่างด้วยการวิจัยของฉันเอง

สีและรายละเอียดเหมือนกันตั้งแต่ 14.04 ถึง 17.10


คุณรู้จักความrsหมายRESET, ความmhหมายMULTIHARDLINK, ความcaหมายและCAPABILITYอื่น ๆ ได้อย่างไร?
Fredrick Gauss

@FredrickGauss dircolors -pขณะที่ผมเขียนไว้ในคำตอบที่ผมได้รับรายละเอียดจากการทำงาน
wjandrea

dircolors -pไม่ได้บอกว่าอาร์เอสเป็นRESET 0 # รีเซ็ตเป็น "ปกติ" สี
Fredrick Gauss

@FredrickGauss ไม่ชัดเจน แต่ "RESET" เป็นเพียงตัวเดียวที่สามารถย่อได้ว่า "rs" และการจับคู่สี (0)
wjandrea

18

คำตอบที่นี่ไม่มีตัวเลือกสี 256 ตัวใน Ubuntu รุ่นล่าสุด ฉันมีสีไม่พอ (บางสีทำให้ฉันมีปัญหาใกล้กัน) ดังนั้นไดเรกทอรีสีน้ำเงินเริ่มต้นที่เป็นสีดำจึงยากสำหรับฉันที่จะอ่าน สิ่งที่ตามมาคืองานวิจัยของฉันที่จะเปลี่ยนสิ่งนั้น

พิมพ์dircolors -p |lessเพื่อดูรหัสสีปัจจุบันของคุณ

ค่าเริ่มต้น. bashrc ควรได้รับการกำหนดค่าไม่เพียง แต่จะใช้ประโยชน์จากรหัสสีของระบบ แต่ยังมีอีกหนึ่งใน ~ / .dircolors เพื่อถ่ายโอนข้อมูล dircolors ไปยัง. dircolors เพื่อให้คุณสามารถเริ่มต้นด้วยคำสั่งนี้ dircolors -p > ~/.dircolors

ทางเลือก:เลือก 256 dircolors สีที่คล้ายกันมากจากโครงการsolarized ของ seebi

หยิบสคริปต์ colortestนี้และเรียกใช้ด้วยคำสั่งcolortest -wเพื่อให้คุณสามารถเห็นสีทั้งหมดในครั้งเดียว เลือกสี ฉันชอบส้ม # 208 ฉันต้องการที่จะเป็นสีข้อความดังนั้นการใช้ข้อมูลนี้ในรหัสสีแบบขยายฉันสามารถนำไปใช้

ดังนั้นคุณมีสีแล้วตอนนี้อะไร ก่อนอื่นเราต้องสร้างสตริง

หมายเลขแรกจะเป็นรหัสแอททริบิวซึ่งเป็นไปได้มากที่สุดคือ 00 แต่ถ้าคุณต้องการให้มันกระพริบตาไปที่ 05:

เลือกรหัสคุณลักษณะ: 00 = ไม่มี 01 = ตัวหนา 04 = ขีดล่าง 05 = กะพริบ 07 = สลับ 08 = ปกปิด

ถัดไปเลือกผนวก;38;5;กับรหัสคุณลักษณะนั้นเพื่อระบุสีข้อความของคุณเพื่อรับ 00; 38; 5; จากนั้นจึงเพิ่มสีของคุณ ฉันเลือก 208 00;38;5;208เพื่อให้ฉันได้รับ

หากคุณต้องการที่จะยังใส่พื้นหลังที่มันเลือกสีอื่น (สมมติว่า 56) กับสคริปต์ colortest และผนวก;48;5;สำหรับพื้นหลังและ 56 00;38;5;208;48;5;56สำหรับสีที่จะได้รับสตริงรวมของ

ตอนนี้คุณมีแล้วคุณจะทำอย่างไรกับมัน?

vim ~/.dircolors และค้นหาส่วนที่คุณต้องการเปลี่ยน (สำหรับฉันนั่นคือ DIR) เป็นสตริงที่เรากำหนดไว้ด้านบน "00; 38; 5; 208"

สิ่งนี้จะไม่นำมาใช้ทันทีคุณจะต้องโหลดการกำหนดค่า ใช้dircolors ~/.dircolorsเพื่อรับรหัสเพื่อตั้งค่าตัวแปร LS_COLORS ของคุณ คุณสามารถวางลงในเซสชันเทอร์มินัลของคุณหรือคุณสามารถปิดเทอร์มินัลแล้วเปิดใหม่ คุณสามารถไพพ์นั้นลงในไฟล์และเรียกใช้เป็นเชลล์สคริปต์

คุณสามารถทำขั้นตอนเดียวกันนี้ด้วย 16 สี คุณไม่ต้องการสิ่งพิเศษ 38; 5 หรือ; 48; 5 สิ่ง เพียงแค่โยนตัวเลขลงในสตริงและเพลิดเพลินกับความเรียบง่าย

ขอบคุณDanและSeebiสำหรับโน้ตและโค้ดของพวกเขาในเรื่องนี้


โปรดตรวจสอบว่า 256 สีจะทำงานเฉพาะในเทอร์มินัลที่รองรับ xtermหรือไม่ ดังนั้น 256 สีไม่ทำงานสำหรับฉันกับKonsoleแต่ทำงานกับxtermและrxvt-Unicode
DK Bose

1
Konsole ทำสิ่งที่เป็นของตัวเอง ลองดูdraculatheme.com/konsoleหรือtechoverflow.net/2013/11/08/installing-konsole-solarized-themeเพื่อรับโทนสีที่ดี
flickerfly
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.