อะไรเป็นสาเหตุของพื้นหลังสีเขียวนี้ในเอาต์พุต ls


141

screencap ของ ls เอาท์พุทบนเครื่อง linux

มีสองไดเรกทอรีที่แสดงโดย 'ls' ปกติไดเรกทอรีใดก็ได้ที่มีสีน้ำเงินบนพื้นหลังสีดำ แต่คนแรกเป็นสีฟ้าบนสีเขียวและอ่านไม่ได้ ทำไมนี้ ทำอย่างไรจึงจะทำให้สีน้ำเงินเป็นสีดำหรืออย่างน้อยก็มีบางสิ่งบางอย่างที่ทำให้บางสิ่งบางอย่างมืดไป?

สิ่งนี้อยู่ใน Ubuntu 12.04 โดยใช้ bash ใน Gnome Terminal ใน Konsole สีน้ำเงินจะเข้มขึ้นเล็กน้อยและเป็นไปได้ที่จะอ่าน

คำตอบ:


162

นอกเหนือจากการระบายสีไฟล์ตามประเภท (สีฟ้าครามสำหรับไฟล์เสียงสีแดงสดใสสำหรับไฟล์เก็บถาวรและไฟล์บีบอัดและสีม่วงสำหรับรูปภาพและวิดีโอ) รวมlsถึงไฟล์สีและไดเรกทอรีตามคุณสมบัติ:

  • ข้อความสีดำที่มีพื้นหลังสีเขียวหมายถึงไดเรกทอรีอื่น ๆ ที่ผู้ใช้สามารถเขียนได้นอกเหนือจากการเป็นเจ้าของผู้ใช้และกลุ่มและมีชุดบิตเหนียว ( o+w, +t)
  • ข้อความสีฟ้าที่มีพื้นหลังสีเขียวบ่งชี้ว่าไดเรกทอรีสามารถเขียนโดยคนอื่น ๆ นอกเหนือจากการเป็นเจ้าของและผู้ใช้กลุ่มและไม่ได้มีชุดเหนียวเล็กน้อย ( o+w, -t)

Stephano Palazzoที่Ask Ubuntuได้ทำรูปภาพที่ให้คำแนะนำเกี่ยวกับสีของแอตทริบิวต์ที่ต่างกัน:

ความหมายของสีที่ต่างกันในเครื่อง

ในฐานะที่เป็นterdondircolorsชี้ให้เห็นการตั้งค่าสีสามารถแก้ไขได้ผ่านทาง dircolors --print-databaseรายการของการตั้งค่าสีที่แตกต่างกันสามารถเข้าถึงได้ด้วย

เอาต์พุตแต่ละบรรทัดเช่นเป็นBLK 40;33;01รูปแบบ:

[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR]
  • TARGET ระบุเป้าหมายสำหรับกฎการระบายสี

  • TEXT_STYLE บ่งบอกถึงรูปแบบข้อความ:

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

    • 30 = ดำ
    • 31 = แดง
    • 32 = สีเขียว
    • 33 = สีเหลือง
    • 34 = สีน้ำเงิน
    • 35 = สีม่วงแดง
    • 36 = ฟ้า
    • 37 = สีขาว
  • BACKGROUND_COLOR ระบุสีพื้นหลัง:

    • 40 = ดำ
    • 41 = แดง
    • 42 = สีเขียว
    • 43 = สีเหลือง
    • 44 = สีน้ำเงิน
    • 45 = สีม่วงแดง
    • 46 = ฟ้า
    • 47 = สีขาว

ฟิลด์อาจถูกละเว้นเริ่มต้นจากด้านขวาดังนั้นตัวอย่างเช่น.tar 01;31หมายถึงตัวหนาและสีแดง

XTerm และเทอร์มินัลอีมูเลเตอร์สมัยใหม่ส่วนใหญ่รองรับ 256 สี

รหัสสีพื้นหน้า XTerm 256 สีเป็นของรูปแบบ:

38;5;[FOREGROUND_COLOR]

รหัสสีพื้นหลัง XTerm 256 สีอยู่ในรูปแบบ:

48;5;[BACKGROUND_COLOR]

โดยที่ทั้งสองFOREGROUND_COLORและBACKGROUND_COLORเป็นตัวเลขในช่วง 0-255 รายการรหัสสีทั้งหมดสำหรับโหมดสี 16 และ 256 แสดงอยู่ในสกรีนช็อตด้านล่าง:

รหัสสีโหมดสี 16 และ 256


5
รหัส BACKGROUND_COLOR ไม่เหมือนกับ FOREGROUND_COLOR รหัสพื้นหลังคือ 40-47
Ryan V. Bissell

38;5;เริ่ม xterm รหัสสีพื้นหน้า 256 สี 48;5;เริ่มรหัสสีพื้นหลัง xterm 256 สี สีฟ้าในผลลัพธ์ dircolors ของฉัน38;5;51 ไม่ใช่ 36ว่าผลลัพธ์จะเหมือนกัน
stevesliva

1
@stevesliva: ขอบคุณสำหรับความคิดเห็นของคุณ ฉันได้แก้ไขคำตอบเพื่อระบุรหัสสีพื้นหลังอย่างถูกต้องและอธิบายรหัสสีพื้นหน้าและสีพื้นหลัง 256 สี
Thomas Nyman

55

สีของlsสามารถเป็นตัวแทนของสิทธิ์เริ่มต้นสำหรับบางระบบคือการแสดงไดเรกทอรีที่ทุกคนมีสิทธิ์เขียนด้วยพื้นหลังสีเขียว:

ป้อนคำอธิบายรูปภาพที่นี่

คุณสามารถเปลี่ยนสีได้โดยแก้ไข$LS_COLORSตัวแปรโดยใช้dircolors(จากman ls):

   Using color to distinguish file types is disabled both by  default  and
   with  --color=never.  With --color=auto, ls emits color codes only when
   standard output is connected to a terminal.  The LS_COLORS  environment
   variable can change the settings.  Use the dircolors command to set it.

ไวยากรณ์เป็นที่น่ารำคาญ แต่คุณสามารถเปลี่ยนสีนี้ได้โดยการสร้างไฟล์ที่มีสีที่คุณต้องการและบันทึกเป็น~/.dircolors:

dircolors -p > ~/.dircolors

~/.dircolorsคำสั่งที่จะพิมพ์ลงในค่าเริ่มต้น จากนั้นคุณจะต้องแก้ไขไฟล์นั้นและเปลี่ยนบรรทัดนี้:

OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky

ตัวอย่างเช่นเพื่อทำให้เป็นข้อความสีดำบนพื้นหลังสีแดง (ดูที่นี่สำหรับรายการรหัสสี):

OTHER_WRITABLE 30;41 # dir that is other-writable (o+w) and not sticky

คุณไม่จำเป็นต้องมีค่าเริ่มต้นทั้งหมดคุณเพียงแค่สร้างไฟล์ด้วยบรรทัดเดียวแล้วกำหนดใหม่เฉพาะไฟล์ที่คุณต้องการเปลี่ยน อย่างไรก็ตามเมื่อคุณสร้างไฟล์แล้วให้โหลดด้วย:

eval "$(dircolors ~/.dircolors)";

และที่นี่มันมีการใช้งาน:

ป้อนคำอธิบายรูปภาพที่นี่

หากต้องการให้สิ่งนั้นเกิดขึ้นโดยอัตโนมัติให้เพิ่มevalคำสั่งด้านบนลงใน~/.bashrcไฟล์ของคุณ


8
สีเริ่มต้นมักจะชี้ให้เห็นผู้เขียนต้นฉบับเกลียดเราและดวงตาของเรา แต่ ...
kurtm

1
ขอบคุณ ทำไมคุณถึงเขียน ~ / .dirname และบางครั้ง ~ / dircolors และบางครั้ง ~ / .dircolors พวกเขาควรจะเหมือนกันหรือไม่
ทิม

ขอบคุณ ทำไมeval "$(dircolors ~/dircolors)";แทนที่จะเป็นทางตรงเช่นdircolors ~/dircolors?
ทิม

@Tim เนื่องจาก dircolors พิมพ์เฉพาะการตั้งค่าคุณจะต้องทำการวิเคราะห์เพื่อให้สามารถอ่านได้
terdon

สำหรับพวกเขาที่จะอ่านโดยใคร
ทิม

11

ในขณะที่คำตอบทางเทคนิคทั้งหมดเป็นจริงฉันจะพิจารณาคำเตือนอย่างไม่เป็นทางการเล็กน้อยว่าคุณได้ให้สิทธิ์สักเล็กน้อยในการเขียนหรือคัดลอกสลับ + ไขว้ ... ?)

วิธีทำให้สีน้ำเงินเป็นสีดำ ... ?

คำว่า "ดีต่อสิ่งแวดล้อม" เพื่อให้ได้รับสิทธิ์กลับคืนที่คุณต้องการมากที่สุดคือข้อความนี้:

chmod -R a-x,o-w,+X thatGreenFolderWithSubfolders/

ที่ดีที่สุดเข้าใจสิ่งที่มันทำถ้าคุณเข้าใจวัตถุประสงค์ของตัวพิมพ์ใหญ่ + X„ พิเศษเอ็กซีคิวต์“ คือดูที่Wikipedia

มันจะมีประโยชน์จริง ๆ เมื่อใช้กับ '+' และมักจะรวมกับตัวเลือก -R สำหรับให้กลุ่มหรือการเข้าถึงอื่น ๆ ไปยังแผนผังไดเรกทอรีขนาดใหญ่โดยไม่ต้องตั้งค่าการอนุญาตให้ใช้งานสำหรับไฟล์ปกติ (เช่นไฟล์ข้อความ) ซึ่งปกติจะเกิดขึ้นหาก คุณเพิ่งใช้ "chmod -R a + rx ...


8

ฉันมีคำถามเดียวกันคำตอบของ terdonนั้นดี แต่ฉันคิดว่ามีความสับสนระหว่าง dirname และ dircolors?

อย่างไรก็ตามหลังจากการวิจัยเพิ่มเติมฉันสามารถเปลี่ยนสีได้ดังนั้นฉันจึงแบ่งปันวิธีแก้ปัญหาของฉันที่นี่ มันอาจจะมีประโยชน์สำหรับใครบางคนในบางวัน!

ดังนั้น 3 ขั้นตอนง่าย ๆ :

ก่อนอื่นดังที่ terdon กล่าวให้คัดลอกสีเริ่มต้นไปยังไฟล์

dircolors -p > ~/.dircolors

จากนั้นแก้ไขไฟล์นี้ คุณสามารถค้นหาค่าบางอย่างสำหรับสีภายใน แต่ฉันพบเพิ่มเติมที่นี่ :)

และสุดท้ายเพิ่มบรรทัดต่อไปนี้ใน~/.bashrcไฟล์ของคุณเพื่อให้โหลดสีโดยอัตโนมัติเมื่อคุณเปิดเทอร์มินัล:

eval 'dircolors ~/.dircolors' > /dev/null

Voilà :)


1
สำหรับผมต้องไปด้วย~/.zshrc if [[ -f ~/.dircolors ]] ; then eval $(dircolors -b ~/.dircolors) elif [[ -f /etc/DIR_COLORS ]] ; then eval $(dircolors -b /etc/DIR_COLORS) fiขออภัยการขึ้นบรรทัดใหม่เป็นสิ่งที่น่ากลัว
Eric D. Johnson

2

ในการแก้ไขปัญหาอย่างรวดเร็ว (ทำให้ไฟล์อื่น ๆ ที่สามารถเขียนได้เป็นสีเหลืองบน Noble):

LS_COLORS+=':ow=01;33'

แทนที่33ด้วย34สำหรับสีน้ำเงินบนอันสูง ง่ายยิ่งขึ้นเพื่อทำให้เป็น nofg กับ nobg:

LS_COLORS+=:ow=

หากต้องการให้การเปลี่ยนแปลงของคุณเป็นแบบถาวรให้ผนวกเข้ากับ. profile ของคุณ:

echo "export LS_COLORS+=':ow=01;33'" >> ~/.profile

หากต้องการดูกฎที่ไม่เกี่ยวข้องกับส่วนขยายของ LS_COLORS:

echo "$LS_COLORS" | sed 's/:/\n/g' | grep -v '\*.'

sedวางแต่ละกฎในหนึ่งบรรทัดและgrepลบกฎที่เริ่มต้นด้วย*.'.


ในการสำรวจlsสีในเครื่องของคุณให้พิจารณาใช้

C="$LS_COLORS"
function sc () {
    echo "$LS_COLORS" | sed 's/:/\n/g' | grep -v '\*.'
}
function t () {
    ls /mnt # Or the path to your example directory.
}

แล้วก็

LS_COLORS="$C:ow=38;5;250;48;5;025";t

ตามที่ระบุไว้ในคำตอบอื่น (ของโทมัสนิ38;5;มัน) เป็นคำนำหน้าสำหรับ x- เทอมหน้า 256- สีและ48;5;สำหรับพื้นหลัง x- เทอม 256- สี แต่เทอร์มินัลทั้งหมดไม่รองรับ 256 สี

โปรดดูเพิ่มเติม- สีที่แตกต่างหมายถึงอะไรใน ls -บน AskUbuntu


1

นี่หมายความว่าโฟลเดอร์นี้มีสิทธิ์ใช้งานถ้าคุณเรียกใช้สิ่งนี้:

сhmod og-w AU_LI

มันจะลบ bgcolor :)


0

ในการแก้ไขปัญหานี้ให้ลองใช้พารามิเตอร์owเหนือ LS_COLORS

ตัวอย่างเช่น:

~LS_COLORS='fi=0:ln=5:pi=0:so=7:bd=5:cd=5:or=31:mi=0:ex=93:*.py=36:di=40:*.zip=33:*.tgz=33'
~ls -l

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้คุณเพิ่มตัวเลือกโอ๊ย

~export LS_COLORS='fi=0:ln=5:pi=0:so=7:bd=5:cd=5:or=31:mi=0:ex=93:*.py=36:di=40:*.zip=33:*.tgz=33:ow=0'
~ls -l

ป้อนคำอธิบายรูปภาพที่นี่


0

คุณสามารถเปลี่ยนโทนสีเขียวใน Putty เพื่อทำให้ข้อความอ่านได้

เปิด Putty และไปที่ Window \ Colors เลือก "ANSI Green" ตั้งเป็นสีเขียวเข้ม (R: 0 G: 70 B: 0)

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