ฉันจะเปลี่ยนสีสำหรับไดเรกทอรีที่มี ls ในคอนโซลได้อย่างไร


165

บนคอนโซลของฉันสีสำหรับไดเรกทอรีนั้นเป็นสีน้ำเงินซึ่งยากต่อการอ่านบนพื้นหลังสีดำ

ฉันจะเปลี่ยนคำจำกัดความของสีได้lsอย่างไร

คำตอบ:


250

หากต้องการเปลี่ยนสีไดเรกทอรีให้เปิด~/.bashrcไฟล์ด้วยเครื่องมือแก้ไข

nano ~/.bashrc

และทำรายการต่อไปนี้ในตอนท้ายของไฟล์:

LS_COLORS=$LS_COLORS:'di=0;35:' ; export LS_COLORS

ตัวเลือกสีที่ดี (ในกรณีนี้0;35คือสีม่วง) คือ:

Blue = 34
Green = 32
Light Green = 1;32
Cyan = 36
Red = 31
Purple = 35
Brown = 33
Yellow = 1;33
Bold White = 1;37
Light Grey = 0;37
Black = 30
Dark Grey= 1;30

หมายเลขแรกคือสไตล์ (1 = ตัวหนา) ตามด้วยเครื่องหมายอัฒภาคแล้วจำนวนสีจริงสไตล์ที่เป็นไปได้ (เอฟเฟกต์) คือ:

0   = default colour
1   = bold
4   = underlined
5   = flashing text (disabled on some terminals)
7   = reverse field (exchange foreground and background color)
8   = concealed (invisible)

ภูมิหลังที่เป็นไปได้:

40  = black background
41  = red background
42  = green background
43  = orange background
44  = blue background
45  = purple background
46  = cyan background
47  = grey background
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
107 = white background

สีที่เป็นไปได้ทั้งหมด:

31  = red
32  = green
33  = orange
34  = blue
35  = purple
36  = cyan
37  = grey
90  = dark grey
91  = light red
92  = light green
93  = yellow
94  = light blue
95  = light purple
96  = turquoise
97  = white

สิ่งเหล่านี้สามารถรวมกันได้ดังนั้นพารามิเตอร์เช่น:

di=1;4;31;42

ในตัวแปร LS_COLORS ของคุณจะทำให้ไดเรกทอรีปรากฏเป็นตัวอักษรสีแดงขีดเส้นใต้ตัวหนาพร้อมพื้นหลังสีเขียว!

ในการทดสอบสีและสไตล์ทั้งหมดเหล่านี้ในเทอร์มินัลของคุณคุณสามารถใช้หนึ่งใน:

for i in 00{2..8} {0{3,4,9},10}{0..7}
do echo -e "$i \e[0;${i}mSubdermatoglyphic text\e[00m  \e[1;${i}mSubdermatoglyphic text\e[00m"
done

for i in 00{2..8} {0{3,4,9},10}{0..7}
do for j in 0 1
   do echo -e "$j;$i \e[$j;${i}mSubdermatoglyphic text\e[00m"
   done
done

คุณยังสามารถเปลี่ยนไฟล์ประเภทอื่น ๆ ได้เมื่อใช้คำสั่ง ls โดยกำหนดแต่ละชนิดด้วย:

bd = (BLOCK, BLK)   Block device (buffered) special file
cd = (CHAR, CHR)    Character device (unbuffered) special file
di = (DIR)  Directory
do = (DOOR) [Door][1]
ex = (EXEC) Executable file (ie. has 'x' set in permissions)
fi = (FILE) Normal file
ln = (SYMLINK, LINK, LNK)   Symbolic link. If you set this to ‘target’ instead of a numerical value, the color is as for the file pointed to.
mi = (MISSING)  Non-existent file pointed to by a symbolic link (visible when you type ls -l)
no = (NORMAL, NORM) Normal (non-filename) text. Global default, although everything should be something
or = (ORPHAN)   Symbolic link pointing to an orphaned non-existent file
ow = (OTHER_WRITABLE)   Directory that is other-writable (o+w) and not sticky
pi = (FIFO, PIPE)   Named pipe (fifo file)
sg = (SETGID)   File that is setgid (g+s)
so = (SOCK) Socket file
st = (STICKY)   Directory with the sticky bit set (+t) and not other-writable
su = (SETUID)   File that is setuid (u+s)
tw = (STICKY_OTHER_WRITABLE)    Directory that is sticky and other-writable (+t,o+w)
*.extension =   Every file using this extension e.g. *.rpm = files with the ending .rpm

รายการที่สมบูรณ์มากขึ้นสามารถใช้ได้ที่Bigsoft - การกำหนดค่า LS_COLORS

ในการแจกแจงบางอย่างคุณอาจต้องการเปลี่ยนสีพื้นหลังสำหรับow"( OTHER_WRITABLE) ซึ่งค่าเริ่มต้นไม่สามารถอ่านได้" ตัวอย่างเช่นข้อความสีน้ำเงินที่ไม่ใช่ตัวหนาบนพื้นหลังสีเขียว

คุณสามารถใช้ตัวอย่างเช่นLS_COLORS="$LS_COLORS:di=1;33"ในตอนท้ายของ.bashrcไฟล์ของคุณเพื่อรับข้อความสีส้มตัวหนาที่สามารถอ่านได้บนพื้นหลังสีดำ

หลังจากที่คุณปรับเปลี่ยนไฟล์ของคุณ bashrc source ~/.bashrcที่จะนำการเปลี่ยนแปลงที่มีผลในการที่คุณจะต้องรีสตาร์ทเปลือกหรือการทำงานของคุณ

หมายเหตุ: คุณสามารถรวมคำสั่งเพิ่มเติมเข้ากับโคลอนตัวอย่างเช่น

LS_COLORS=$LS_COLORS:'di=1;33:ln=36' ; export LS_COLORS; ls

ที่มา:


3
มันใช้งานได้ดีขอบคุณ ฉันพบว่าเป็นการส่วนตัวที่ดีกว่าในการตั้งค่าLS_COLORS=$LS_COLORS:'di=1;44:' ; export LS_COLORSซึ่งแสดงไดเรกทอรีเป็นตัวหนาสีขาวบนพื้นหลังสีน้ำเงิน
isapir

2
ดูเหมือนจะไม่ได้ผลสำหรับฉัน ดูเหมือนว่ามีไฟล์กำหนดค่าอีกไฟล์หนึ่งที่เขียนทับ.bashrc- บางสีทำงานได้และไฟล์อื่น ๆ ดูแตกต่างออกไป โฟลเดอร์เป็นสีเขียวแทนสีน้ำเงิน แต่ไฟล์ดูถูกต้อง มันจะเป็นอะไร?
Nearoo

1
ตรวจสอบว่าคุณกำลังใช้ bash หรือ sh และตรวจสอบไฟล์. profile ของคุณในไดเรกทอรีบ้านของคุณ และทั่วโลก/etc/bash.bashrc
rubo77

5
คุณอาจต้องการปรับเปลี่ยน dirs อื่น ๆ ที่เขียนได้และเหนียวอื่น ๆ ลองอะไรอีกอย่างที่ชอบLS_COLORS=$LS_COLORS:'tw=01;35:ow=01;35:' ; export LS_COLORS
Charles L.

2
ใช้งานได้กับ ls แต่ฉันจะเปลี่ยนสีของ dir ที่ฉันอยู่ได้อย่างไรก่อนหน้า # ในพรอมต์คำสั่ง cmd
Gaia

31

ง่ายมาก. เพิ่มสามบรรทัดเหล่านี้ใน ~ / .bashrc

$ vi ~/.bashrc
export LS_OPTIONS='--color=auto'
eval "$(dircolors -b)"
alias ls='ls $LS_OPTIONS'

หากคุณต้องการใช้การเปลี่ยนแปลงในเซสชัน bash ที่รันอยู่ให้รัน:

source ~/.bashrc

4
นี่เป็นสิ่งเดียวที่ทำงานให้ฉัน
solalito

มันใช้งานได้สำหรับฉัน แต่ฉันต้องทำงานsource ~/.bashrcทุกครั้งที่ลงชื่อเข้าใช้มีวิธีแก้ไขปัญหานี้หรือไม่
มิเกล

@Miguel: คุณจะได้อะไรเมื่อคุณพิมพ์echo $SHELLจากพรอมต์คำสั่ง? /bin/bashฉันเดิมพันมันไม่ได้เป็น คุณสามารถค้นหาการใช้งานของคุณ.profileหรือ.loginเพิ่มsource $HOME/.bashrcในตอนท้าย โชคดี.
shellter

4

LS_COLORS

นี่คือคอลเล็กชันของส่วนขยาย: การจับคู่สีเหมาะสำหรับใช้เป็นตัวแปรสภาพแวดล้อม LS COLORS ของคุณ


1
น่าสนใจ แต่ฉันไม่สามารถทำให้มันเป็น ksh ได้
Herman Toothrot

3

นอกจากคำตอบของ Hegazi แล้วคุณสามารถควบคุมสีไดเรคทอรีและสีอื่น ๆ อีกมากมายโดยใช้คำสั่ง dircolors คุณสามารถสร้างไฟล์กำหนดค่าที่มีเอกสารที่ดี

คุณสามารถสร้างไฟล์. coloured ในโฮมไดเร็กตอรี่ของคุณได้ดังนี้:

dircolors -p > ~/.dircolors

จากนั้นในไฟล์ ~ / .bashrc ของคุณเพิ่มบรรทัด

eval "`dircolors -b ~/.dircolors`"
alias ls='ls --color=auto'

สิ่งนี้จะสร้างตัวแปร $ LS_COLORS สำหรับการทุบตี แฟล็ก -c จะตั้งค่าหากเป็น csh นอกจากนี้ยังติดธงคำสั่ง ls เพื่อแสดงสี

แก้ไขค่าของแอตทริบิวต์ DIR ข้างต้นในสีไฟล์ ~ / .dircolor เพื่อเปลี่ยนสีของไดเรกทอรี (หรือประเภทไฟล์อื่น ๆ ที่รวมอยู่สำหรับสีอื่น ๆ ) นอกจากนี้คุณยังสามารถเปลี่ยนสีของไฟล์เฉพาะหรือกำหนดของคุณเอง


2

--color=autoตัวเลือกที่ไม่ทำงานสำหรับฉันโดยใช้ iTerm2 บน Mac ของฉัน -Gตัวเลือกที่ทำงานได้แม้ว่า ฉันใส่นามแฝงต่อไปนี้ใน~/.profileไดเรกทอรีของฉันและตอนนี้มีสีและมีการต่อ/ท้าย:

alias ls='ls -F -G'

เป็นเพราะมันเป็น BSD และไม่ใช่ coreutils :)
Meeh

0

นี่เป็นแนวทางของฉันสำหรับคำสั่ง ls พร้อมตัวเลือกที่ใช้กันทั่วไป:

เพิ่มบรรทัดต่อไปนี้ลงในไฟล์ชื่อ ~ / .alias

alias ll='ls -lhF --color=auto'
alias llt='ls -lht --color=auto'
alias lla='ls -alF --color=auto'
alias la='ls -A --color=auto'
alias l='ls -CF --color=auto'
alias ls="ls --color=auto"

เพิ่มบรรทัดต่อไปนี้ใน ~ / .bashrc

if [ -f ~/.alias ]; then
    . ~/.alias
fi

4
คุณจะต้องเพิ่ม--color=autoไปยังlsนามแฝง - นามแฝงอื่น ๆ ที่มีการสืบทอดการตั้งค่า
สจ๊วร์ Cardall
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.