如何改變你的終端顏色
使 Linux 變得豐富多彩(或單色)。
你可以使用特殊的 ANSI 編碼設置為 Linux 終端添加顏色,可以在終端命令或配置文件中動態(tài)添加,也可以在終端仿真器中使用現(xiàn)成的主題。無論哪種方式,你都可以黑色屏幕上找回懷舊的綠色或琥珀色文本。本文演示了如何使 Linux 變得豐富多彩(或單色)的方法。
終端的功能特性
現(xiàn)代系統(tǒng)的終端的顏色配置通常默認至少是 xterm-256color,但如果你嘗試為終端添加顏色但未成功,則應檢查你的 TERM 設置。
從歷史上看,Unix 終端從字面上講是:用戶可以輸入命令的共享計算機系統(tǒng)上實際的物理端點(終點)。它們專指通常用于遠程發(fā)出命令的電傳打字機(這也是我們今天在 Linux 中仍然使用 /dev/tty 設備的原因)。終端內置了 CRT 顯示器,因此用戶可以坐在辦公室的終端上直接與大型機進行交互。CRT 顯示器價格昂貴 —— 無論是制造還是使用控制;比擔心抗鋸齒和現(xiàn)代計算機專家理所當然認為的漂亮信息,讓計算機吐出原始 ASCII 文本更容易。然而,即使在那時,技術的發(fā)展也很快,很快人們就會發(fā)現(xiàn),隨著新的視頻顯示終端的設計,他們需要新的功能特性來提供可選功能。
例如,1978 年發(fā)布的花哨的新 VT100 支持 ANSI 顏色,因此如果用戶將終端類型識別為 vt100,則計算機可以提供彩色輸出,而基本串行設備可能沒有這樣的選項。同樣的原則適用于今天,它是由 TERM 環(huán)境變量設定的。你可以使用 echo 檢查你的 TERM 定義:
$ echo $TERMxterm-256color
過時的(但在一些系統(tǒng)上仍然為了向后兼容而維護)/etc/termcap 文件定義了終端和打印機的功能特性?,F(xiàn)代的版本是 terminfo,位于 /etc 或 /usr/share 中,具體取決于你的發(fā)行版。 這些文件列出了不同類型終端中可用的功能特性,其中許多都是由歷史上的硬件定義的,如 vt100 到 vt220 的定義,以及 xterm 和 Xfce 等現(xiàn)代軟件仿真器。大多數(shù)軟件并不關心你使用的終端類型; 在極少數(shù)情況下,登錄到檢查兼容功能的服務器時,你可能會收到有關錯誤的終端類型的警告或錯誤。如果你的終端設置為功能特性很少的配置文件,但你知道你所使用的仿真器能夠支持更多功能特性,那么你可以通過定義 TERM 環(huán)境變量來更改你的設置。你可以通過在 ~/.bashrc 配置文件中導出 TERM 變量來完成此操作:
export TERM=xterm-256color
保存文件并重新載入設置:
$ source ~/.bashrc
ANSI 顏色代碼
現(xiàn)代終端繼承了用于“元”特征的 ANSI 轉義序列。這些是特殊的字符序列,終端將其解釋為操作而不是字符。例如,此序列將清除屏幕,直到下一個提示符:
$ printf '\033[2J'
它不會清除你的歷史信息;它只是清除終端仿真器中的屏幕,因此它是一個安全且具有示范性的 ANSI 轉義序列。
ANSI 還具有設置終端顏色的序列。例如,鍵入此代碼會將后續(xù)文本更改為綠色:
$ printf '\033[32m'
只要你對相同的計算機使用同一個顏色,就可以使用顏色來幫助你記住你登錄的系統(tǒng)。例如,如果你經(jīng)常通過 SSH 連接到服務器,則可以將服務器的提示符設置為綠色,以幫助你一目了然地將其與本地的提示符區(qū)分開來。 要設置綠色提示符,請在提示符前使用 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 |
| 回退到發(fā)行版默認值 | \033[39m | \033[49m |
還有一些可用于背景的其他顏色:
| 顏色 | 背景色 |
|---|---|
| 深灰 | \033[100m |
| 淺紅 | \033[101m |
| 淺綠 | \033[102m |
| 黃色 | \033[103m |
| 淺藍 | \033[104m |
| 淺紫 | \033[105m |
| 藍綠 | \033[106m |
| 白色 | \033[107m |
持久設置
在終端會話中設置顏色只是暫時的,相對無條件的。有時效果會持續(xù)幾行;這是因為這種設置顏色的方法依賴于 printf 語句來設置一種模式,該模式僅持續(xù)到其他設置覆蓋它。
終端仿真器通常獲取使用哪種顏色的指令的方式來自于 LS_COLORS 環(huán)境變量的設置,該設置又由 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[...]
這看起來很神秘。文件類型后面的第一個數(shù)字是屬性代碼,它有六種選擇:
- 00 無
- 01 粗體
- 04 下劃線
- 05 閃爍
- 07 反白
- 08 暗色
下一個數(shù)字是簡化形式的顏色代碼。你可以通過獲取 ANSI 代碼的最后一個數(shù)字來獲取顏色代碼(綠色前景為 32,綠色背景為 42;紅色為 31 或 41,依此類推)。
你的發(fā)行版可能全局設置了 LS_COLORS,因此系統(tǒng)上的所有用戶都會繼承相同的顏色。如果你想要一組自定義的顏色,可以使用 dircolors。首先,生成顏色設置的本地副本:
$ dircolors --print-database > ~/.dircolors
根據(jù)需要編輯本地列表。如果你對自己的選擇感到滿意,請保存文件。你的顏色設置只是一個數(shù)據(jù)庫,不能由 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 而不是手動進行轉換。實際上,你可能不會經(jīng)常改變顏色,所以這可能過于激進,但如果你打算改變你的配色方案,這是一個選擇。在 .bashrc 文件中,添加以下規(guī)則:
[[ -e $HOME/.dircolors ]] && eval "`dircolors --sh $HOME/.dircolors`"
如果你的主目錄中有 .dircolors 文件,Bash 會在啟動時對其進行評估并相應地設置 LS_COLORS。
顏色
在終端中使用顏色是一種可以為你自己提供特定信息的快速視覺參考的簡單方法。但是,你可能不希望過于依賴它們。畢竟,顏色不是通用的,所以如果其他人使用你的系統(tǒng),他們可能不會像你那樣看懂顏色代表的含義。此外,如果你使用各種工具與計算機進行交互,你可能還會發(fā)現(xiàn)某些終端或遠程連接無法提供你期望的顏色(或根本不提供顏色)。
除了上述警示之外,顏色在某些工作流程中可能很有用且很有趣,因此創(chuàng)建一個 .dircolor 數(shù)據(jù)庫并根據(jù)你的想法對其進行自定義吧。


























