
我了解ls
用於dircolors
顯示彩色輸出。dircolors
具有與檔案副檔名關聯的預設顏色資料庫,可以使用命令列印
dircolors --print-database
據man dir_colors
我了解,系統範圍的資料庫應該位於/etc/DIR_COLORS
.但這個文件在我的系統(Debian)上並不存在。如何修改 的系統範圍顏色設定dircolors
?當不存在檔案時,該命令dircolors --print-database
從哪裡獲取設定。
我知道用戶可以使用~/.dircolors
他的設定擁有特定於用戶的文件,但這不適合我,因為我需要更改每個人的設定。
第二個問題是,是否可以使用 8 位元顏色作為 dircolors。我的終端是xterm-256color
.
答案1
ls
從環境變數中取得顏色設定LS_COLORS
。dircolors
只是產生此環境變數的便捷方法。若要使該環境變數在系統範圍內生效,請將其放入 shell 的啟動檔案中。
對於bash
,您可以將其放入/etc/profile
:
# `dircolors` prints out `LS_COLORS='...'; export LS_COLORS`, so eval'ing
# $(dircolors) effectively sets the LS_COLORS environment variable.
eval "$(dircolors /etc/DIR_COLORS)"
對於zsh
,您可以將其放入/etc/zshrc
或安排在啟動時zsh
讀取/etc/profile
。您的發行版可能已經zsh
這樣做了。我只是想指出,dircolors
每個人的設定都取決於他們使用的 shell。
至於dircolors
從哪裡獲取其設置,當您不指定文件時,它只會使用一些內建預設值。
您可以xterm
在 dircolors 檔案中使用 256 種顏色轉義程式碼,但請注意它們僅適用於xterm
相容的終端。例如,它們無法在 Linux 文字控制台上運行。
256 色轉義碼的格式適用38;5;colorN
於前景色和48;5;colorN
背景色。例如:
.mp3 38;5;160 # Set fg color to color 160
.flac 48;5;240 # Set bg color to color 240
.ogg 38;5;160;48;5;240 # Set fg color 160 *and* bg color 240.
.wav 01;04;05;38;5;160;48;5;240 # Pure madness: make bold (01), underlined (04), blink (05), fg color 160, and bg color 240!
答案2
簡答題
dircolors
(目錄顏色的縮寫)不能用於全域修改顏色。 為此,您可能需要調整終端模擬器中的調色板。
例如,dircolors
不用於調整grep
、vi
、tmux
或 所要求的顏色man
。
dircolors
用於調整命令ls
和的顏色tree
要求待顯示顯示您的檔案名稱時。
我強調請求顯示,因為命令請求的顏色只是發送到終端模擬器的顏色。然後,您的終端模擬器可以選擇顯示與所要求的顏色不同的顏色。所要求的內容以及最終輸出到您將看到的終端螢幕的內容可以是兩組不同的顏色。
色彩處理概述
1) 任何基於文字的程式或內建 shell,可依設計輸出ANSI(美國國家標準協會)顏色要求轉義碼。這裡我強調一下,這些只是對終端的請求,如何顯示它們有最終決定權。 ANSI 顏色代碼系統是一個非常古老的系統,最初起源於獨立的硬體終端。
彩色文字請求看起來像:
<requested-color><text-to-be-displayed-in-that-color><next-requested-color><next-text...
不顯示“要求的顏色”部分。相反,終端模擬器使用它來讓螢幕以請求的顏色顯示「要以該顏色顯示的文字」。
程式可以呼叫[ncurses][1]
將 ANSI 程式碼輸出到終端模擬器。您基本上有 8 種標準顏色,以及可以要求的 8 種更大膽/明亮的顏色。 (ncurses 是 New Curses 的縮寫,其中「curses」是遊標優化的雙關語,或是用於將基於文字的高效輸出到終端螢幕的軟體庫。)
許多常見的基於文字的命令可以配置為輸出 ANSI 顏色代碼要求它們的輸出由終端著色。例有:ls
、tree
、vim
、grep
、tmux
和man
。
這些輸出顏色代碼(轉義前綴控製代碼)要求在輸出下一個文字之前將顯示更改為給定的顏色組合(前景、背景和屬性)。同樣,這些轉義碼實際上並不能決定您看到的顏色。相反,他們指定特定的調色板選擇。
過去有一個標準的調色板。如果您要求綠色,那麼您會看到綠色。
但是終端模擬器(例如GNOME Terminal
)可以改變這種行為。例如,如果一個程式請求綠色的,透過 ANSI 綠色轉義碼,您可以決定將其顯示在櫻桃紅在你的螢幕上。 重要的是要記住,這意味著:全部在每個終端程式中請求的綠色將轉換為紅色。 換句話說,您不能像grep
這樣只調整一個特定程式的輸出顏色。
ls
2A)和等目錄指令tree
有些特殊,因為它們可以由使用者配置為根據您的規範按檔案名稱類型對檔案名稱進行著色。man
例如,這與除黑色和白色外還使用一組固定的替代顏色不同。
例如,資料夾可能被要求以海軍藍色顯示,而連結被要求以淺藍色顯示。
您可以為指定的終端格式(如 ansi 或 putty)、檔案基本類型(如資料夾、區塊或黏性)和/或相符的檔案副檔名(如 *.sh 或 *.png)請求顏色。這是透過使用 LS_COLORS 環境變數給出的設定按檔案名稱類型更改 ANSI 輸出顏色代碼來完成的。請參閱下文以了解具體方法。
2B)還有一些特殊的配色方案vim
例如使用:colorscheme default
. (改天再說。)
3)您的終端(以我為例,GNOME 終端)然後解釋任何 ANSI 程式碼以產生您看到的實際顯示顏色。
在終端模擬器中全域調整顏色
如果您調整(或可能支援此功能的任何終端模擬器)中的顏色設置GNOME Terminal
,它將影響輸出 ANSI 顏色代碼的任何和所有文字程式的可觀察顏色。這些顏色變化將在所有開啟的終端視窗上同時調整(假設您對所有視窗使用相同的終端模擬器)。
如果您使用 2 個不同的終端模擬器(例如GNOME Terminal
和XTerm
),那麼每個模擬器都可以以不同的方式調整最終輸出顏色。
透過 GNOME 終端首選項,您可以將系統範圍的「調色板」(即基於文字的應用程式可用的 16 種顏色集)微調為您自己的自訂顏色集。
GNOME Terminal
幫助說:
傳統上,終端模擬器提供 16 種調色板,您可以在此處進行更改。終端機支援擴充的 256 種顏色,但無法在此處編輯額外的 240 種顏色。終端甚至可以直接存取超過 1600 萬種顏色,稱為“真彩色”模式。
如果您對調色板所做的更改似乎沒有效果,那麼您看到的內容可能是由此類擴展調色板顏色或真實顏色組成,而不是 16 種基色。
使用雙色
其工作原理如下:
a) Run $ dircolors -p >/etc/DIR_COLORS # to produce DIR_COLORS template file
b) Hand edit /etc/DIR_COLORS to adjust ANSI color codes that will be output
for various things to display. For example, any filenames like *.png can
request a particular ANSI color combination. (ANSI color codes are escape
prefixes.)
c) Run dircolors again, this time in both
/etc/profile (for logins) and
/etc/bash.bashrc (for terminal windows)
to read DIR_COLORS and create and export the LS_COLORS
environment variable, like this:
$ eval "$(dircolors -b /etc/DIR_COLORS)"
我dircolors
很早就打電話給我/etc/profile
,我用它來設定和匯出LC_COLORS
。
# === Create DEFAULT LS_COLORS ENVIRONMENT VARIABLE ===========================
# /etc/DIR_COLORS is a data file from: $ dircolors -p > /etc/DIR_COLORS
eval "$(dircolors -b /etc/DIR_COLORS)" # This reads /etc/DIR_COLORS
# and then runs these two commands:
#
# $ LS_COLORS=... # <-- where this value is created from /etc/DIR_COLORS
# $ export LS_COLORS
作為參考,我如何在 /etc/profile 中的各種命令中啟用顏色(每當登入完成時都會讀取,(包括$ bash --login
))如下,位於本答案的最底部。
請注意,有一些反向視訊資料夾和檔案顯示得很有趣ls
(例如 DOS 備份檔案)。 GNOME 終端機(如下)中的任何混亂似乎都不會影響這些顏色。但您可以編輯 DIR_COLORS 使用dircolors
(請參閱上面的註解)來調整 LS_COLORS 的內容。
有關如何調整您自己的系統顏色的提示
從 GNOME 終端機選單中選擇Edit
| Preferences
。在左側窗格中選擇要調整的設定文件,然後在右側窗格中選擇選項卡Colors
。
!!在繼續之前,我強烈建議您備份現有的首選項。 螢幕截圖會很好。請參閱下面我的螢幕截圖。
使用最基本的預設設置,但您想要一個黑色的工作背景和彩色的bash
, vim
, grep
, ls
, ... 應用程序,然後嘗試像這樣設定顏色:
我發現這個顏色對話框一開始有點令人困惑,但一旦你弄清楚它就很合乎邏輯了。最大的問題是我所有的文字應用程式共享相同的調色板,但它們使用它的方式略有不同,尤其是ls
.
這是我使用的確切顏色:
black aqua green orange light yellow purple blue, primary gray (X) <-- X=Don't care
#000000 #01B9E0 #389400 #FF8A00 #F4FF92 #C401C4 #005EEA #AAAAAA
0 1 2 3 4 5 6 7
------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ <-- 1st set are "normal colors"
------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ <-- 2nd set are the "brighter colors" (for check box below)
8 9 10 11 12 13 14 15
#555555 #FF5555 #55FF55 #FFFF55 #5397FE #FF55FF #55FFFF #D6D6D6
dark gray (X) red/orange lime yellow (X) blue, medium pink aqua, bright light gray (X) <-- X=Don't care
了解 GNOME 終端機「首選項 - 設定檔」對話框
頂部和底部部分(Text and Background Color
和Palette
)似乎幾乎完全獨立運行,除了Palette
選擇是位於(即進一步修改)頂部設定之上的一層Text and Background Color
。 (此外,即使Use colors from system theme
選中,Show bold text in bright colors
底部仍然很重要,至少對於 而言ls
。)
首先讓我們搞亂Text and Background Color
設定。
這些決定基本顏色、非特殊顏色Text
和Background
顏色的預設顏色。如果您願意,您也可以為Bold
或Highlight
文字以及固定遊標顏色選擇可選修飾符,例如亮橙色可能會讓某些人感到高興。
該Use colors from system theme
複選框似乎決定您是否要繼承顏色設定或自行定義它們。當您取消選取它時,您可以從下拉清單中選擇內建或自訂方案。
您選擇的內容將被填入下面的Text
和Background
樣本中,除了Custom
。
請注意,您在此處的選擇不會影響其下方的其他 3 個複選框。
另請注意,如果您首先單擊Text
或Background
樣本,您將獲得一個顏色選擇器,一旦您Select
在其中選擇,它會將Built-in schemes
下拉式選單設為「自訂」。
如果您檢查Bold color
並設定顏色,則由程式指定為粗體的文字將覆蓋此顏色。
如果選中Cursor color
,則可以為遊標選擇固定顏色。 (注意,您必須將遊標移到文字上才能看到它的變化。)如果沒有選取此選項,遊標似乎會隨著文字顏色的變化而變化。
如果您選中Highlight color
,您將看到這兩個樣本的效果,例如在 vim 中拖曳滑鼠複製某些文字時。
現在是時候搞亂Palette
設定了。
與上方類似,下拉式選單將一組顏色放入其下方的樣本中。您會注意到有兩行,每行 8 個。
重要的是要看到,您可以將這些樣本設定為微妙的顏色變化。
您在此處所做的更改還會影響所有或大部分啟用了顏色的基於文字的程式。 所以這裡要小心。 (我不能告訴你如何首先備份它,因為我還不知道。至少拍一張螢幕截圖。)
雖然我不知道所有這些樣本的用途是什麼,但一些實驗得出了以下結論。
在開始測試之前,請從以下位置開啟一些內容GNOME Terminal
:vim
的程式碼編輯會話bash
、主目錄的另一個程式碼編輯會話、c
執行和會話。當您更改下面的內容時,您將能夠更好地看到發生了什麼變化。ls
tree
tmux
首先嘗試做一些小的改變。請務必點擊並取消點擊底部的複選框(下面將進一步解釋)。
警告:如果您將 設為Palette
,Custom
然後按照我的建議手動設置 16 種顏色樣本,請小心,因為如果您再次在 中選擇其他內容Built-in schemes:
,它將清除您之前的Palette
設置,如果您再次需要,Custom
您將需要重新開始這是一種痛苦。 (似乎沒有辦法保存您的自訂顏色設置,除非使用螢幕截圖或將它們一一寫下來。)
Built-in schemes:
Custom
--Color palette:
設定
tmux status text status-backgr
tmux vi literals flow (orange) comments&fcns $names var names ?
vi C - literals types flow (brown) comments&fcns macros - ?
vi Bash - literals - flow (brown) comments&fcns Environ var names ? flow: brown (can't change with gnome)
Bash - user@dir $
Bash ls - Reverse-backg Reverse-foregr
gcc
black aqua green orange dark yellow purple blue, primary gray (X) <-- X=Don't care
#000000 #01B9E0 #389400 #FF8A00 #C6CF76 #C401C4 #005EEA #AAAAAA
0 1 2 3 4 5 6 7
------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ <-- 1st set are "normal colors"
------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ <-- 2nd set are the "brighter colors" (for check box below)
8 9 10 11 12 13 14 15
#555555 #FF5555 #55FF55 #FFFF55 #5397FE #FF55FF #55FFFF #D6D6D6
dark gray (X) red/orange lime yellow (X) blue, medium pink aqua, bright light gray (X) <-- X=Don't care
tmux ? ? ?
tmux vi ? ? ?
vi C ? ? ?
vi Bash ? ? ?
Bash ? root@dir # ? ?
Bash ls ? x.sh ? directories media files links ?
gcc ? errors ? ?
最後,在底部有一個Show bold text in bright colors
複選框。 GNOME 幫忙說:
明亮的顏色用於粗體文本
傳統上,終端並沒有明確區分粗體字體粗細和濃重顏色,通常兩者都是一起啟用的。最近的改進,例如引入真彩色支援和某些配色方案(例如 Solarized),使得需要將兩個概念分開,即使亮度獨立於字體粗細。
…
Disable Show bold text in bright colors for the new default behavior, the complete separation of color intensity and font weight;
或啟用此選項以提高向後相容性。
選取後,它將採用頂行中顯示的顏色,並顯示底行的顏色。如果你檢查這個,你會注意到有些名字的ls
顏色會稍微改變。我認為它與 ISO 6429 顏色序列 #1 相關,“為了更明亮的顏色” $ man dir_colors
。看來這影響主要ls
而不是vim
。
內建方案的顏色是什麼樣的
當built-in schemes
被測試時 使用此處描述的顏色測試實用程序我看到以下結果(提示編譯並連結到此$ gcc -Wall -lcurses color-demo.C
):
請注意Show bold text in bright colors
複選框被選取。未經檢查,高強度和低強度顏色是相同的。
Linux console
(似乎是原始的 CGI 顏色集):
xterm
:
rxvt
(亂序,因為這更接近上面的內容):
Tango
(亂序,因為這更接近下面的 Solarized):
Solarized
:
如何配置我的命令以顏色顯示?
在你的/etc/.bashrc.shared
(由~/.bashrc
and調用)中,或者如果你的and/root/.bashrc
中沒有:~/.bashrc
/root/.bashrc
# === ADD COLOR UNLESS DUMB TERMINAL ========================================
if [ "$TERM" != "dumb" ]; then
# ENVIRONMENT:
# You can turn off these colorizing aliases in the interactive environment by invoking
# shell with TERM="dumb bash".
# Assume LS_COLORS is already set by dircolors in /etc/profile. It can be adjusted later.
# 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.
export COLOR_MODE='--color=auto'
# The use of alias limits color effects to the interactive command usage.
# It has advantage over exporting environment variable "export COLOR_MODE='--color=auto'"
# since color can be seen under pager programs such as less(1). If you wish to suppress
# color when piping to other programs, use "--color=auto" instead in the above example
# for "~/.bashrc".
# !! NOTE - alias is very picky about extra spaces around = sign
# --- grep
# Surround the matched (non-empty) strings, matching lines, context lines, file names,
# line numbers, byte offsets, and separators (for fields and groups of context lines)
# with escape sequences to display them in color on the terminal.
# The colors are defined by the environment variable GREP_COLORS, (plural).
# See grep man page for GREP_COLORS instructions.
alias grep=' grep ${COLOR_MODE}'
alias egrep='egrep ${COLOR_MODE}'
alias fgrep='fgrep ${COLOR_MODE}'
alias zgrep='zgrep ${COLOR_MODE}'
# --- ls ------------------------
alias ls='ls ${COLOR_MODE}'
# These next two use the ls alias above, i.e. the first one below is really 'ls ${LS_OPTS} -l'
alias ll='ls -l' # -l = long
alias l='ls -lA' # -A = amost all (.*, but not . nor ..)
# --- tree ----------------------
alias tree='tree -C' # -C adds color to tree
# --- less ----------------------
alias less='less -R' # Output raw control chars for ANSI colors
# --- man -----------------------
# ref: http://www.tuxarena.com/2012/04/tutorial-colored-man-pages-how-it-works/
# NOTE these seem to use TERMCAP which is obsolite.
# ANSI "color" escape sequences are sequences of the form: ESC [ ... m
export LESS_TERMCAP_mb=$(printf '\e[01;31m') # enter blinking mode
export LESS_TERMCAP_md=$(printf '\e[01;38;5;75m') # enter double-bright mode
export LESS_TERMCAP_me=$(printf '\e[0m') # turn off all appearance modes (mb, md, so, us)
export LESS_TERMCAP_so=$(printf '\e[01;33m') # enter standout mode
export LESS_TERMCAP_se=$(printf '\e[0m') # leave standout mode
export LESS_TERMCAP_us=$(printf '\e[04;38;5;200m') # enter underline mode
export LESS_TERMCAP_ue=$(printf '\e[0m') # leave underline mode
fi
答案3
當不存在檔案時,該命令
dircolors --print-database
從哪裡獲取設定。
根據手動的,它在沒有檔案的情況下使用預編譯的資料庫。
如果指定了 file,dircolors 會讀取它以確定對哪些檔案類型和副檔名使用哪些顏色。否則,將使用預編譯的資料庫。有關這些文件格式的詳細信息,請運行“
dircolors --print-database
”。
為了更改每個人的設置,您可以建立一個/etc/dircolors
文件並將以下內容添加到/etc/bashrc
:
d=/etc/dircolors
test -r $d && eval "$(dircolors $d)"
答案4
Linux 用 dircolors 設定控制台背景顏色:
您的 dircolors 檔案控制透過 ls 在控制台上顯示的單字的顏色。找到.dircolors
適合您的發行版的此文件,幫助連結:
http://www.linuxfromscratch.org/blfs/view/svn/postlfs/profile.html
對於 Fedora 17 上的我來說,我的 dircolors 檔案是:/etc/DIR_COLORS
複製/etc/DIR_COLORS
到您的/home/el/.dircolors
目錄中。如果不存在則創建它。
編輯 /home/el/.dircolors,尋找文字「dir」。
改變這個:
DIR 01;34 # directory
對此:
DIR 01;36 # directory
儲存並關閉並重新啟動 shell。目錄從黑底深藍色(不可讀)到黑底亮青色(可讀)。