Điều gì gây ra nền xanh này trong đầu ra ls?


141

screencap của đầu ra ls trên máy linux

Có hai thư mục được hiển thị bởi 'ls'. Thông thường thư mục bất cứ nơi nào có màu xanh trên nền đen. Nhưng cái đầu tiên là màu xanh trên màu xanh lá cây và không thể đọc được. Tại sao lại thế này? Làm thế nào để làm cho nó có màu xanh trên nền đen, hoặc ít nhất là một cái gì đó sáng trên một cái gì đó tối?

Đây là trên Ubuntu 12.04, sử dụng bash trong Gnome Terminal. Trong Konsole, màu xanh hơi đậm hơn và có thể đọc được, mặc dù có thể tốt hơn.

Câu trả lời:


162

Ngoài các tệp màu dựa trên loại của chúng (màu ngọc lam cho tệp âm thanh, màu đỏ sáng cho Lưu trữ và tệp nén và màu tím cho hình ảnh và video), lscòn tô màu các tệp và thư mục dựa trên thuộc tính của chúng:

  • Văn bản màu đen với nền màu xanh lá cây biểu thị rằng một thư mục có thể ghi được bởi những người khác ngoài người dùng và nhóm sở hữu và có tập bit dính ( o+w, +t).
  • Văn bản màu xanh lam với nền màu xanh lục cho biết rằng một thư mục có thể ghi được bởi những người khác ngoài người dùng và nhóm sở hữu và không có tập bit dính ( o+w, -t).

Stephano Palazzo tại Ask Ubuntu đã đưa ra bức tranh rất hướng dẫn này qua các màu thuộc tính khác nhau:

Màu sắc khác nhau có nghĩa là gì trong thiết bị đầu cuối

Như terdon đã chỉ ra, các cài đặt màu sắc có thể được sửa đổi thông qua dircolors. Một danh sách các cài đặt màu khác nhau có thể được truy cập với dircolors --print-database.

Mỗi dòng đầu ra, chẳng hạn như BLK 40;33;01, có dạng:

[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR]
  • TARGET chỉ ra mục tiêu cho quy tắc tô màu

  • TEXT_STYLE cho biết kiểu văn bản:

    • 00 = không
    • 01 = đậm
    • 04 = gạch dưới
    • 05 = nháy mắt
    • 07 = ngược lại,
    • 08 = che giấu
  • FOREGROUND_COLOR chỉ ra màu nền trước:

    • 30 = đen
    • 31 = màu đỏ
    • 32 = màu xanh lá cây
    • 33 = màu vàng
    • 34 = màu xanh,
    • 35 = đỏ tươi
    • 36 = lục lam
    • 37 = trắng
  • BACKGROUND_COLOR cho biết màu nền:

    • 40 = đen
    • 41 = màu đỏ
    • 42 = màu xanh lá cây
    • 43 = màu vàng
    • 44 = màu xanh,
    • 45 = đỏ tươi
    • 46 = lục lam
    • 47 = trắng

Các trường có thể được bỏ qua bắt đầu từ bên phải, vì vậy, ví dụ .tar 01;31có nghĩa là đậm và đỏ.

Xterm và hầu hết các trình giả lập thiết bị đầu cuối hiện đại khác đều hỗ trợ 256 màu.

Mã màu tiền cảnh 256 màu của XTerm có dạng:

38;5;[FOREGROUND_COLOR]

Mã màu nền 256 màu của XTerm có dạng:

48;5;[BACKGROUND_COLOR]

trong đó cả hai FOREGROUND_COLORBACKGROUND_COLORlà một số trong phạm vi 0-255. Danh sách đầy đủ các mã màu cho chế độ 16 và 256 được hiển thị trong ảnh chụp màn hình bên dưới:

Mã màu chế độ 16 và 256


5
Mã BACKGROUND_COLOR không giống với FOREGROUND_COLOR; Mã nền là 40-47
Ryan V. Bissell

38;5;bắt đầu mã màu nền trước 256 màu xterm . 48;5;bắt đầu mã màu nền 256 màu xterm. Cyan trong đầu ra dircolors của tôi 38;5;51 không 36 mặc dù kết quả là như nhau.
stevesliva

1
@stevesliva: Cảm ơn bình luận của bạn. Tôi đã chỉnh sửa câu trả lời để chỉ ra mã màu nền chính xác và mô tả mã màu nền trước và màu nền 256 màu.
Thomas Nyman

55

Màu sắc lscó thể đại diện cho các quyền, mặc định cho một số hệ thống là hiển thị các thư mục nơi mọi người đều có quyền ghi với nền màu xanh lá cây:

nhập mô tả hình ảnh ở đây

Bạn có thể thay đổi màu sắc bằng cách chỉnh sửa $LS_COLORSbiến của mình bằng cách sử dụng dircolors(từ 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.

Cú pháp được thừa nhận là loại gây phiền nhiễu ở đây nhưng bạn có thể thay đổi màu này bằng cách tạo một tệp có màu bạn muốn và lưu nó dưới dạng ~/.dircolors:

dircolors -p > ~/.dircolors

Lệnh đó sẽ in mặc định thành ~/.dircolors. Sau đó, bạn sẽ cần chỉnh sửa tệp đó và thay đổi dòng này:

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

Ví dụ: để làm cho văn bản màu đen trên nền đỏ (xem ở đây để biết danh sách mã màu):

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

Bạn không cần phải có tất cả các giá trị mặc định, bạn cũng có thể chỉ cần tạo một tệp với một dòng duy nhất, xác định lại chỉ là tệp bạn muốn thay đổi. Dù sao, một khi bạn đã tạo tệp, tải nó bằng:

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

Và đây là hành động:

nhập mô tả hình ảnh ở đây

Để điều đó xảy ra tự động, hãy thêm evallệnh ở trên vào ~/.bashrctệp của bạn .


8
Màu sắc mặc định dường như thường cho thấy tác giả ban đầu ghét chúng ta và đôi mắt của chúng ta mặc dù ...
kurtm

1
Cảm ơn. Tại sao đôi khi bạn viết ~ / .dirname và đôi khi ~ / dircolors và đôi khi ~ / .dircolors? họ có giống nhau không?
Tim

Cảm ơn. Tại sao eval "$(dircolors ~/dircolors)";thay vì cách trực tiếp hơn như dircolors ~/dircolors?
Tim

@Tim vì dircolors chỉ in các cài đặt, bạn cần phải đánh giá nó để chúng được đọc.
terdon

cho họ được đọc bởi ai?
Tim

11

Mặc dù tất cả các câu trả lời kỹ thuật là đúng, tôi sẽ coi đó là một cảnh báo không chính thức, rằng bạn đã bỏ qua một chút quyền để hào phóng hoặc sao chép criss + cross ... (hầu hết chúng ta đều làm, để mọi thứ ban đầu hoạt động, eh ?)

Làm thế nào để làm cho nó có màu xanh trên nền đen, ...?

Một tuyên bố tốt nhất để lấy lại các quyền mà bạn rất muốn, là tuyên bố này:

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

Hiểu rõ nhất những gì nó làm, nếu bạn hiểu mục đích của chữ hoa + X thực thi đặc biệt, tức là xem Wikipedia

Nó chỉ thực sự hữu ích khi được sử dụng với '+' và thường kết hợp với tùy chọn -R để cấp cho nhóm hoặc quyền truy cập khác vào cây thư mục lớn mà không thiết lập quyền thực thi trên các tệp thông thường (như tệp văn bản), điều này thường xảy ra nếu bạn vừa sử dụng "chmod -R a + rx ...


8

Tôi đã có cùng một câu hỏi, câu trả lời của terdon rất hay nhưng tôi nghĩ có sự nhầm lẫn giữa dirname và dircolors?

Dù sao, sau một số nghiên cứu sâu hơn tôi có thể thay đổi màu sắc, vì vậy tôi đang chia sẻ giải pháp của mình ở đây. Nó có thể hữu ích cho một số người một ngày nào đó!

Vì vậy, 3 bước đơn giản:

Đầu tiên, như terdon đã nói, sao chép các màu mặc định vào một tệp

dircolors -p > ~/.dircolors

Sau đó sửa đổi tập tin này. Bạn có thể tìm thấy một số giá trị cho màu sắc bên trong, nhưng tôi tìm thấy nhiều hơn ở đây :)

Và cuối cùng, thêm dòng sau vào ~/.bashrctệp của bạn để màu được tự động tải khi bạn mở thiết bị đầu cuối:

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

Võngà :)


1
~/.zshrctôi phải đi cùng if [[ -f ~/.dircolors ]] ; then eval $(dircolors -b ~/.dircolors) elif [[ -f /etc/DIR_COLORS ]] ; then eval $(dircolors -b /etc/DIR_COLORS) fi. Xin lỗi ngắt dòng là khủng khiếp
Eric D. Johnson

2

Để nhanh chóng khắc phục sự cố, (làm cho các tệp có thể ghi khác có màu vàng trên nobg):

LS_COLORS+=':ow=01;33'

Thay thế 33bằng 34màu xanh trên nobg. Thậm chí đơn giản hơn, để làm cho nó nofg trên nobg:

LS_COLORS+=:ow=

Để thay đổi vĩnh viễn, hãy thêm nó vào .profile của bạn:

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

Để xem các quy tắc không liên quan đến tiện ích mở rộng của LS_COLORS:

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

sedđặt mỗi quy tắc trên một dòng và greploại bỏ các quy tắc bắt đầu bằng*.'.


Để khám phá lsmàu sắc trên thiết bị đầu cuối của bạn, hãy xem xét sử dụng

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.
}

Sau đó

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

Như đã nêu trong một câu trả lời khác (đó là của Thomas Nyman), 38;5;là tiền tố cho 256 màu tiền cảnh x và thuật ngữ 256 màu 48;5;nền. Mặc dù vậy, 256 màu không được hỗ trợ bởi tất cả các thiết bị đầu cuối.

Cũng xem - Các màu khác nhau có ý nghĩa gì trong ls? - trên AskUbfox.


1

Vâng, điều này có nghĩa là thư mục này có hoán vị nếu bạn chạy nó:

emhmod og-w AU_LI

nó sẽ loại bỏ bgcolor :)


0

Để khắc phục điều này, hãy thử tham số ow qua LS_COLORS

Ví dụ:

~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

nhập mô tả hình ảnh ở đây

Bây giờ bạn thêm tùy chọn ow

~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

nhập mô tả hình ảnh ở đây


0

Bạn có thể thay đổi tông màu xanh lục trong Putty để làm cho văn bản có thể đọc được.

Mở Putty và đi tới Window \ Colors, chọn "ANSI Green", đặt nó thành màu xanh đậm hơn (R: 0 G: 70 B: 0).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.