Apa yang menyebabkan latar belakang hijau ini dalam keluaran ls?

141

screencap output ls pada mesin linux

Ada dua direktori yang ditunjukkan oleh 'ls'. Biasanya direktori di mana saja berwarna biru dengan latar belakang hitam. Tetapi yang pertama berwarna biru pada hijau dan tidak mungkin dibaca. Kenapa ini? Bagaimana membuatnya biru hitam, atau setidaknya sesuatu yang terang pada sesuatu yang gelap?

Ini ada di Ubuntu 12.04, menggunakan bash di Terminal Gnome. Di Konsole, warna biru sedikit lebih gelap, dan mungkin dibaca, meskipun bisa jauh lebih baik.

DarW
sumber

Jawaban:

162

Selain mewarnai file berdasarkan jenisnya (pirus untuk file audio, merah terang untuk Arsip dan file terkompresi, dan ungu untuk gambar dan video), lsjuga mewarnai file dan direktori berdasarkan atributnya:

  • Teks hitam dengan latar belakang hijau menunjukkan bahwa direktori dapat ditulis oleh orang lain selain dari pengguna dan grup pemilik, dan memiliki set bit sticky ( o+w, +t).
  • Teks biru dengan latar belakang hijau menunjukkan bahwa direktori dapat ditulis oleh orang lain selain dari pengguna dan grup pemilik, dan tidak memiliki set bit sticky ( o+w, -t).

Stephano Palazzo di at Ask Ubuntu telah membuat gambar yang sangat instruktif ini atas berbagai warna atribut:

Apa perbedaan warna di terminal

Seperti yang ditunjukkan terdon , pengaturan warna dapat dimodifikasi melalui dircolors. Daftar pengaturan pewarnaan yang berbeda dapat diakses dircolors --print-database.

Setiap garis keluaran, seperti BLK 40;33;01, berbentuk:

[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR]
  • TARGET menunjukkan target untuk aturan pewarnaan

  • TEXT_STYLE menunjukkan gaya teks:

    • 00 = tidak ada
    • 01 = berani
    • 04 = garis bawah
    • 05 = berkedip
    • 07 = mundur,
    • 08 = disembunyikan
  • FOREGROUND_COLOR menunjukkan warna latar depan:

    • 30 = hitam
    • 31 = merah
    • 32 = hijau
    • 33 = kuning
    • 34 = biru,
    • 35 = magenta
    • 36 = cyan
    • 37 = putih
  • BACKGROUND_COLOR menunjukkan warna latar belakang:

    • 40 = hitam
    • 41 = merah
    • 42 = hijau
    • 43 = kuning
    • 44 = biru,
    • 45 = magenta
    • 46 = cyan
    • 47 = putih

Kolom mungkin dihilangkan mulai dari kanan, jadi misalnya .tar 01;31berarti tebal dan merah.

XTerm dan kebanyakan emulator terminal modern lainnya mendukung 256 warna.

Kode warna latar depan XTerm 256-warna berbentuk:

38;5;[FOREGROUND_COLOR]

Kode warna latar belakang XTerm 256 warna adalah dalam bentuk:

48;5;[BACKGROUND_COLOR]

di mana keduanya FOREGROUND_COLORdan BACKGROUND_COLORmerupakan angka kisaran 0-255. Daftar lengkap kode warna untuk 16 dan 256 mode warna ditunjukkan pada gambar di bawah ini:

16 dan 256 kode warna mode warna

Thomas Nyman
sumber
5
Kode BACKGROUND_COLOR tidak sama dengan FOREGROUND_COLOR; Kode latar belakang adalah 40-47
Ryan V. Bissell
38;5;memulai kode warna latar depan xterm 256-warna . 48;5;memulai kode warna latar belakang xterm 256 warna. Cyan dalam output dircolors saya 38;5;51 tidak 36 meskipun hasilnya sama.
stevesliva
1
@stevesliva: Terima kasih atas komentar Anda. Saya telah mengedit jawaban untuk menunjukkan kode warna latar belakang dengan benar, dan menjelaskan kode 256 warna depan dan kode warna latar belakang.
Thomas Nyman
55

Warna lsdapat mewakili izin, default untuk beberapa sistem adalah untuk menunjukkan direktori di mana setiap orang memiliki izin menulis dengan latar belakang hijau:

masukkan deskripsi gambar di sini

Anda dapat mengubah warna dengan mengedit $LS_COLORSvariabel menggunakan dircolors(dari 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.

Sintaksnya memang agak mengganggu di sini tetapi Anda dapat mengubah warna ini dengan membuat file dengan warna yang Anda inginkan dan menyimpannya sebagai ~/.dircolors:

dircolors -p > ~/.dircolors

Perintah itu akan mencetak default ke ~/.dircolors. Anda kemudian perlu mengedit file itu dan mengubah baris ini:

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

Misalnya, untuk menjadikannya teks hitam dengan latar belakang merah (lihat di sini untuk daftar kode warna):

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

Anda tidak perlu memiliki semua default, Anda juga dapat membuat file dengan satu baris, mendefinisikan ulang hanya yang ingin Anda ubah. Bagaimanapun, setelah Anda membuat file, muat dengan:

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

Dan ini dia beraksi:

masukkan deskripsi gambar di sini

Agar itu terjadi secara otomatis, tambahkan evalperintah di atas ke ~/.bashrcfile Anda .

terdon
sumber
8
Warna default sering menunjukkan bahwa penulis aslinya membenci kita dan mata kita ...
kurtm
1
Terima kasih. MENGAPA terkadang Anda menulis ~ / .dirname, dan terkadang ~ / dircolors, dan kadang ~ / .dircolors? apakah mereka seharusnya sama?
Tim
Terima kasih. Kenapa eval "$(dircolors ~/dircolors)";bukannya lebih langsung seperti itu dircolors ~/dircolors?
Tim
@Tim karena dircolors hanya mencetak pengaturan, Anda perlu mengevaluasinya agar dapat dibaca.
terdon
bagi mereka untuk dibaca oleh siapa?
Tim
11

Walaupun semua jawaban teknis itu benar, saya akan menganggapnya sebagai sedikit peringatan informal, bahwa Anda memberikan sedikit hak untuk dengan murah hati atau menyalin silang + silang ... (paling sering kita semua melakukannya, untuk membuat semuanya bekerja pada awalnya, eh ?)

Bagaimana membuatnya biru di atas hitam, ...?

"De-greener" yang baik untuk kembali ke hak yang paling Anda inginkan, adalah pernyataan ini:

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

Paling mengerti apa fungsinya, jika Anda memahami tujuan huruf besar + X "eksekusi khusus", yaitu lihat Wikipedia

Ini hanya benar-benar berguna ketika digunakan dengan '+' dan biasanya dalam kombinasi dengan opsi -R untuk memberikan grup atau akses lain ke pohon direktori besar tanpa menetapkan izin eksekusi pada file normal (seperti file teks), yang biasanya akan terjadi jika Anda baru saja menggunakan "chmod -R a + rx ...

Frank Nocke
sumber
8

Saya punya pertanyaan yang sama, jawaban terdon itu bagus tapi saya pikir ada kebingungan antara dirname dan dircolors?

Bagaimanapun, setelah beberapa penelitian lebih lanjut saya dapat mengubah warna, jadi saya membagikan solusi saya di sini. Ini mungkin berguna untuk seseorang suatu hari nanti!

Jadi, 3 langkah sederhana:

Pertama, seperti kata terdon, salin warna default ke file

dircolors -p > ~/.dircolors

Kemudian modifikasi file ini. Anda dapat menemukan beberapa nilai untuk warna di dalamnya, tetapi saya menemukan lebih banyak di sini :)

Dan akhirnya, tambahkan baris berikut ke ~/.bashrcfile Anda untuk warna yang akan dimuat secara otomatis ketika Anda membuka terminal:

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

Voilà :)

KevinG
sumber
1
karena ~/.zshrcaku harus ikut if [[ -f ~/.dircolors ]] ; then eval $(dircolors -b ~/.dircolors) elif [[ -f /etc/DIR_COLORS ]] ; then eval $(dircolors -b /etc/DIR_COLORS) fi. Maaf, break line sangat buruk
Eric D. Johnson
2

Untuk memperbaiki masalah dengan cepat, (buat file yang dapat ditulis lainnya menjadi kuning di nobg):

LS_COLORS+=':ow=01;33'

Ganti 33dengan 34biru pada nobg. Bahkan lebih sederhana, untuk membuatnya nofg di nobg:

LS_COLORS+=:ow=

Untuk membuat perubahan Anda permanen, tambahkan ke. Profil Anda:

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

Untuk melihat aturan terkait non-ekstensi LS_COLORS:

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

sedmenempatkan setiap aturan pada satu baris dan grepmenghapus aturan dimulai dengan*.'.


Untuk menjelajahi lswarna pada terminal Anda, pertimbangkan untuk menggunakan

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

Kemudian

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

Sebagaimana dinyatakan dalam jawaban lain (yaitu Thomas Nyman), 38;5;adalah awalan untuk foreground x-term 256-warna, dan 48;5;untuk latar belakang x-term 256-warna. 256-warna tidak didukung oleh semua terminal.

Lihat juga - Apa arti perbedaan warna dalam ls? - di AskUbuntu.

loxaxs
sumber
1

Nah ini berarti bahwa folder ini memiliki izin jika Anda menjalankan ini:

сhmod og-w AU_LI

itu akan menghapus bgcolor :)

Gorodeckij Dimitrij
sumber
0

Untuk memperbaikinya, coba parameter arus di atas LS_COLORS

Sebagai contoh:

~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

masukkan deskripsi gambar di sini

Sekarang Anda menambahkan opsi 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

masukkan deskripsi gambar di sini

PYK
sumber
0

Anda dapat mengubah nada hijau di Putty untuk membuat teks dapat dibaca.

Buka Putty dan pergi ke Window \ Colors, pilih "ANSI Green", set ke hijau gelap (R: 0 G: 70 B: 0).

Erhan Alankus
sumber