您可以使用特殊的 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 `\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 环境变量的设置中获取关于使用什么颜色的指令,而 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 隐藏
下一个数字是简化形式的颜色代码。您可以通过获取 ANSII 代码的最后一位数字来获得颜色代码(绿色前景色为 32,绿色背景色为 42;红色为 31 或 41,依此类推)。
您的发行版可能会全局设置 LS_COLORS,因此您系统上的所有用户都继承相同的颜色。如果您想要自定义的颜色集,您可以使用 dircolors 来实现。首先,生成颜色设置的本地副本
$ dircolors --print-database > ~/.dircolors
根据需要编辑您的本地列表。当您对您的选择感到满意时,保存文件。您的颜色设置只是一个数据库,不能直接被 ls 使用,但您可以使用 dircolors 来获取 shellcode,您可以使用它来设置 LS_COLORS
$ 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 数据库并根据您的喜好进行自定义。
7 条评论