如何改變你的終端顏色

你可以使用特殊的 ANSI 編碼設置為 Linux 終端添加顏色,可以在終端命令或配置文件中動態添加,也可以在終端模擬器中使用現成的主題。無論哪種方式,你都可以黑色屏幕上找回懷舊的綠色或琥珀色文本。本文演示了如何使 Linux 變得豐富多彩(或單色)的方法。
終端的功能特性
現代系統的終端的顏色配置通常默認至少是 xterm-256color,但如果你嘗試為終端添加顏色但未成功,則應檢查你的 TERM
設置。
從歷史上看,Unix 終端從字面上講是:用戶可以輸入命令的共享計算機系統上實際的物理端點(終點)。它們專指通常用於遠程發出命令的電傳打字機(這也是我們今天在 Linux 中仍然使用 /dev/tty
設備的原因)。終端內置了 CRT 顯示器,因此用戶可以坐在辦公室的終端上直接與大型機進行交互。CRT 顯示器價格昂貴 —— 無論是製造還是使用控制;比擔心抗鋸齒和現代計算機專家理所當然認為的漂亮信息,讓計算機吐出原始 ASCII 文本更容易。然而,即使在那時,技術的發展也很快,很快人們就會發現,隨著新的視頻顯示終端的設計,他們需要新的功能特性來提供可選功能。
例如,1978 年發布的花哨的新 VT100 支持 ANSI 顏色,因此如果用戶將終端類型識別為 vt100,則計算機可以提供彩色輸出,而基本串列設備可能沒有這樣的選項。同樣的原則適用於今天,它是由 TERM
環境變數設定的。你可以使用 echo
檢查你的 TERM
定義:
$ echo $TERM
xterm-256color
過時的(但在一些系統上仍然為了向後兼容而維護)/etc/termcap
文件定義了終端和印表機的功能特性。現代的版本是 terminfo
,位於 /etc
或 /usr/share
中,具體取決於你的發行版。 這些文件列出了不同類型終端中可用的功能特性,其中許多都是由歷史上的硬體定義的,如 vt100 到 vt220 的定義,以及 xterm 和 Xfce 等現代軟體模擬器。大多數軟體並不關心你使用的終端類型; 在極少數情況下,登錄到檢查兼容功能的伺服器時,你可能會收到有關錯誤的終端類型的警告或錯誤。如果你的終端設置為功能特性很少的配置文件,但你知道你所使用的模擬器能夠支持更多功能特性,那麼你可以通過定義 TERM
環境變數來更改你的設置。你可以通過在 ~/.bashrc
配置文件中導出 TERM
變數來完成此操作:
export TERM=xterm-256color
保存文件並重新載入設置:
$ source ~/.bashrc
ANSI 顏色代碼
現代終端繼承了用於「元」特徵的 ANSI 轉義序列。這些是特殊的字元序列,終端將其解釋為操作而不是字元。例如,此序列將清除屏幕,直到下一個提示符:
$ printf '33[2J'
它不會清除你的歷史信息;它只是清除終端模擬器中的屏幕,因此它是一個安全且具有示範性的 ANSI 轉義序列。
ANSI 還具有設置終端顏色的序列。例如,鍵入此代碼會將後續文本更改為綠色:
$ printf '33[32m'
只要你對相同的計算機使用同一個顏色,就可以使用顏色來幫助你記住你登錄的系統。例如,如果你經常通過 SSH 連接到伺服器,則可以將伺服器的提示符設置為綠色,以幫助你一目了然地將其與本地的提示符區分開來。 要設置綠色提示符,請在提示符前使用 ANSI 代碼設置為綠色,並使用代表正常默認顏色的代碼結束:
export PS1=`printf "33[32m$ 33[39m"`
前景色和背景色
你不僅可以設置文本的顏色。使用 ANSI 代碼,你還可以控制文本的背景顏色以及做一些基本的樣式。
例如,使用 33[4m
,你可以為文本加上下劃線,或者使用 33[5m
你可以將其設置為閃爍的文本。起初這可能看起來很愚蠢,因為你可能不會將你的終端設置為所有文本帶有下劃線並整天閃爍, 但它對某些功能很有用。例如,你可以將 shell 腳本生成的緊急錯誤設置為閃爍(作為對用戶的警報),或者你可以為 URL 添加下劃線。
作為參考,以下是前景色和背景色的代碼。前景色在 30 範圍內,而背景色在 40 範圍內:
顏色 | 前景色 | 背景色 |
---|---|---|
黑色 | 33[30m | 33[40m |
紅色 | 33[31m | 33[41m |
綠色 | 33[32m | 33[42m |
橙色 | 33[33m | 33[43m |
藍色 | 33[34m | 33[44m |
品紅 | 33[35m | 33[45m |
青色 | 33[36m | 33[46m |
淺灰 | 33[37m | 33[47m |
回退到發行版默認值 | 33[39m | 33[49m |
還有一些可用於背景的其他顏色:
顏色 | 背景色 |
---|---|
深灰 | 33[100m |
淺紅 | 33[101m |
淺綠 | 33[102m |
黃色 | 33[103m |
淺藍 | 33[104m |
淺紫 | 33[105m |
藍綠 | 33[106m |
白色 | 33[107m |
持久設置
在終端會話中設置顏色只是暫時的,相對無條件的。有時效果會持續幾行;這是因為這種設置顏色的方法依賴於 printf
語句來設置一種模式,該模式僅持續到其他設置覆蓋它。
終端模擬器通常獲取使用哪種顏色的指令的方式來自於 LS_COLORS
環境變數的設置,該設置又由 dircolors
的設置填充。你可以使用 echo
語句查看當前設置:
$ echo $LS_COLORS
rs=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
[...]
這看起來很神秘。文件類型後面的第一個數字是屬性代碼,它有六種選擇:
- 00 無
- 01 粗體
- 04 下劃線
- 05 閃爍
- 07 反白
- 08 暗色
下一個數字是簡化形式的顏色代碼。你可以通過獲取 ANSI 代碼的最後一個數字來獲取顏色代碼(綠色前景為 32,綠色背景為 42;紅色為 31 或 41,依此類推)。
你的發行版可能全局設置了 LS_COLORS
,因此系統上的所有用戶都會繼承相同的顏色。如果你想要一組自定義的顏色,可以使用 dircolors
。首先,生成顏色設置的本地副本:
$ dircolors --print-database > ~/.dircolors
根據需要編輯本地列表。如果你對自己的選擇感到滿意,請保存文件。你的顏色設置只是一個資料庫,不能由 ls 直接使用,但你可以使用 dircolors
獲取可用於設置 LS_COLORS
的 shellcode:
$ dircolors --bourne-shell ~/.dircolors
LS_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
資料庫並根據你的想法對其進行自定義吧。
via: https://opensource.com/article/19/9/linux-terminal-colors
作者:Seth Kenlon 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive