使 Linux 變得豐富多彩(或單色)。
你可以使用特殊的 ANSI 編碼設定為 Linux 終端新增顏色,可以在終端命令或組態檔中動態新增,也可以在終端模擬器中使用現成的主題。無論哪種方式,你都可以黑色螢幕上找回懷舊的綠色或琥珀色文字。本文演示了如何使 Linux 變得豐富多彩(或單色)的方法。
現代系統的終端的顏色設定通常預設至少是 xterm-256color,但如果你嘗試為終端新增顏色但未成功,則應檢查你的 TERM
設定。
從歷史上看,Unix 終端從字面上講是:使用者可以輸入命令的共用計算機系統上實際的物理端點(終點)。它們專指通常用於遠端發出命令的電傳打字機(這也是我們今天在 Linux 中仍然使用 /dev/tty
裝置的原因)。終端內建了 CRT 顯示器,因此使用者可以坐在辦公室的終端上直接與大型電腦進行互動。CRT 顯示器價格昂貴 —— 無論是製造還是使用控制;比擔心抗鋸齒和現代計算機專家理所當然認為的漂亮資訊,讓計算機吐出原始 ASCII 文字更容易。然而,即使在那時,技術的發展也很快,很快人們就會發現,隨著新的視訊顯示終端的設計,他們需要新的功能特性來提供可選功能。
例如,1978 年發布的花哨的新 VT100 支援 ANSI 顏色,因此如果使用者將終端型別識別為 vt100,則計算機可以提供彩色輸出,而基本序列裝置可能沒有這樣的選項。同樣的原則適用於今天,它是由 TERM
環境變數設定的。你可以使用 echo
檢查你的 TERM
定義:
$ echo $TERMxterm-256color
過時的(但在一些系統上仍然為了向後相容而維護)/etc/termcap
檔案定義了終端和印表機的功能特性。現代的版本是 terminfo
,位於 /etc
或 /usr/share
中,具體取決於你的發行版。 這些檔案列出了不同型別終端中可用的功能特性,其中許多都是由歷史上的硬體定義的,如 vt100 到 vt220 的定義,以及 xterm 和 Xfce 等現代軟體模擬器。大多數軟體並不關心你使用的終端型別; 在極少數情況下,登入到檢查相容功能的伺服器時,你可能會收到有關錯誤的終端型別的警告或錯誤。如果你的終端設定為功能特性很少的組態檔,但你知道你所使用的模擬器能夠支援更多功能特性,那麼你可以通過定義 TERM
環境變數來更改你的設定。你可以通過在 ~/.bashrc
組態檔中匯出 TERM
變數來完成此操作:
export TERM=xterm-256color
儲存檔案並重新載入設定:
$ source ~/.bashrc
現代終端繼承了用於“元”特徵的 ANSI 跳脫序列。這些是特殊的字元序列,終端將其解釋為操作而不是字元。例如,此序列將清除螢幕,直到下一個提示符:
$ printf '\033[2J'
它不會清除你的歷史資訊;它只是清除終端模擬器中的螢幕,因此它是一個安全且具有示範性的 ANSI 跳脫序列。
ANSI 還具有設定終端顏色的序列。例如,鍵入此程式碼會將後續文字更改為綠色:
$ printf '\033[32m'
只要你對相同的計算機使用同一個顏色,就可以使用顏色來幫助你記住你登入的系統。例如,如果你經常通過 SSH 連線到伺服器,則可以將伺服器的提示符設定為綠色,以幫助你一目了然地將其與原生的提示符區分開來。 要設定綠色提示符,請在提示符前使用 ANSI 程式碼設定為綠色,並使用代表正常預設顏色的程式碼結束:
export PS1=`printf "\033[32m$ \033[39m"`
你不僅可以設定文字的顏色。使用 ANSI 程式碼,你還可以控制文字的背景顏色以及做一些基本的樣式。
例如,使用 \033[4m
,你可以為文字加上下劃線,或者使用 \033[5m
你可以將其設定為閃爍的文字。起初這可能看起來很愚蠢,因為你可能不會將你的終端設定為所有文字帶有下劃線並整天閃爍, 但它對某些功能很有用。例如,你可以將 shell 指令碼生成的緊急錯誤設定為閃爍(作為對使用者的警報),或者你可以為 URL 新增下劃線。
作為參考,以下是前景色和背景色的程式碼。前景色在 30 範圍內,而背景色在 40 範圍內:
顏色 | 前景色 | 背景色 |
---|---|---|
黑色 | \033[30m | \033[40m |
紅色 | \033[31m | \033[41m |
綠色 | \033[32m | \033[42m |
橙色 | \033[33m | \033[43m |
藍色 | \033[34m | \033[44m |
品紅 | \033[35m | \033[45m |
青色 | \033[36m | \033[46m |
淺灰 | \033[37m | \033[47m |
回退到發行版預設值 | \033[39m | \033[49m |
還有一些可用於背景的其他顏色:
顏色 | 背景色 |
---|---|
深灰 | \033[100m |
淺紅 | \033[101m |
淺綠 | \033[102m |
黃色 | \033[103m |
淺藍 | \033[104m |
淺紫 | \033[105m |
藍綠 | \033[106m |
白色 | \033[107m |
在終端對談中設定顏色只是暫時的,相對無條件的。有時效果會持續幾行;這是因為這種設定顏色的方法依賴於 printf
語句來設定一種模式,該模式僅持續到其他設定覆蓋它。
終端模擬器通常獲取使用哪種顏色的指令的方式來自於 LS_COLORS
環境變數的設定,該設定又由 dircolors
的設定填充。你可以使用 echo
語句檢視當前設定:
$ echo $LS_COLORSrs=0:di=38;5;33:ln=38;5;51:mh=00:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=01;05;37;41:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;[...]
或者你可以直接使用 dircolors
:
$ dircolors --print-database[...]# image formats.jpg 01;35.jpeg 01;35.mjpg 01;35.mjpeg 01;35.gif 01;35.bmp 01;35.pbm 01;35.tif 01;35.tiff 01;35[...]
這看起來很神秘。檔案型別後面的第一個數位是屬性程式碼,它有六種選擇:
下一個數位是簡化形式的顏色程式碼。你可以通過獲取 ANSI 程式碼的最後一個數位來獲取顏色程式碼(綠色前景為 32,綠色背景為 42;紅色為 31 或 41,依此類推)。
你的發行版可能全域性設定了 LS_COLORS
,因此系統上的所有使用者都會繼承相同的顏色。如果你想要一組自定義的顏色,可以使用 dircolors
。首先,生成顏色設定的本地副本:
$ dircolors --print-database > ~/.dircolors
根據需要編輯本地列表。如果你對自己的選擇感到滿意,請儲存檔案。你的顏色設定只是一個資料庫,不能由 ls 直接使用,但你可以使用 dircolors
獲取可用於設定 LS_COLORS
的 shellcode:
$ dircolors --bourne-shell ~/.dircolorsLS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;[...]export LS_COLORS
將輸出複製並貼上到 ~/.bashrc
檔案中並重新載入。或者,你可以將該輸出直接轉儲到 .bashrc
檔案中並重新載入。
$ dircolors --bourne-shell ~/.dircolors >> ~/.bashrc$ source ~/.bashrc
你也可以在啟動時使 Bash 解析 .dircolors
而不是手動進行轉換。實際上,你可能不會經常改變顏色,所以這可能過於激進,但如果你打算改變你的配色方案,這是一個選擇。在 .bashrc
檔案中,新增以下規則:
[[ -e $HOME/.dircolors ]] && eval "`dircolors --sh $HOME/.dircolors`"
如果你的主目錄中有 .dircolors
檔案,Bash 會在啟動時對其進行評估並相應地設定 LS_COLORS
。
在終端中使用顏色是一種可以為你自己提供特定資訊的快速視覺參考的簡單方法。但是,你可能不希望過於依賴它們。畢竟,顏色不是通用的,所以如果其他人使用你的系統,他們可能不會像你那樣看懂顏色代表的含義。此外,如果你使用各種工具與計算機進行互動,你可能還會發現某些終端或遠端連線無法提供你期望的顏色(或根本不提供顏色)。
除了上述警示之外,顏色在某些工作流程中可能很有用且很有趣,因此建立一個 .dircolor
資料庫並根據你的想法對其進行自定義吧。