作者:
Thorbjørn
Ravn
Andersen,
ravn@dit.ou.dk
译者:
Chou-Kai
Wang,
stylon@ms2.hinet.net
v1.4,
7
August
1997
虽然大部份的
Linux
发行版本都附有一个用来把目录的内容列出来,而且可以利用彩色来增强输出在视觉上的效果的'ls'指令,不过要把他设定的合你意却不是件容易的事。这份文件说明了设定一些已经内附在你的
Linux
发行版本的软体,来达到这个目地的好几种不同的方法,还有在那□可以找到一些在大部份版本的
Unix
□都会用到,但是却常常不被附在
Slackware
或
RedHat
Linux
□的软体。这份文件的
HTML
版本也可以在我的原始档案这□
http://www.mip.ou.dk/~ravn/colour-ls
找的到。
1.
简介
这些年来彩色的显示器已经相当普遍,使用者也开始使用一些以彩色来表示例如:程式语言□的保留字,或是拼错的字,来给使用者一些视觉上的回馈。
自从
Linux
的文字模式控制台支援彩色後,原来的
GNU
ls
也很快的被修改成支援输出彩色的讯息而且被附在
Slackware
2.0
版□。这些改良原来版本的缀补档案已经被整合到标准版的
GNU
ls
里,现在也应该是所有新的
Linux
发行版本的一部份了。
现在这版本的文件是把最初的版本改写了许多部份後更新而来的,包括了一些关於
xterm
和
如何利用缀补档来更新核心的资讯。
这份文件里的资讯都在
Redhat
4.1
□验证过,而且主要是在Slackware
2.0.2
版及核心版本
1.1.54
的环境□搜集而来的。核心的缀补档的资讯是在
slackware
2.2.0,1.2.13
版的核心,并且以
tcsh
为预设的
shell的环境□取得的,而後来也在
2.0.27
的核心□验证过。如果你使用其它的设定或是
unix
版本,我会很感激你告诉我你的作业系统及版本,还有它是否支援彩色的显示。
2.
快速入门:给没有那麽多耐心的读者
如果你有个
新版的
Linux,对你使用者目录下的这些档案作这些修改,下次你登入的时候就会生效了。
~/.bashrc:
alias
ls="ls
‐‐color"
~/.cshrc:
alias
ls
'ls
‐‐color'
这样就好啦!
你也许还会想要作:``eval
`dircolors
$HOME/.colourrc`'',来设定你自己想要的颜色。这个档案可以用
``dircolors
-p
$HOME/.colourrc''
来制造出来,而且□面有许多的注解方便你更改设定。
3.
这样就好了吗?
首先你需要知道你使用的
ls
是不是可以适当的处理彩色输出。在
Linux
的文字模式控制台试试看这个指令(在
xterm
□也可以):
%
ls
‐‐color
(这□的
%
是
shell
的提示符号):
如果你看到了表示你的
ls
不能接受这个选项的错误讯息,那你应该安装新版本的
GNU
fileutils
软体。如果你使用的发行版本没有提供新的升级软体,那麽就从
GNU
的映射站台取得这个软体并且直接从原始码安装。
如果你并没有看到错误讯息,那麽你使用的
ls
便可以接受这个选项。但很不幸的,有一些在
Slackware
(其它的发行版本也有可能)
□附的早期版本是有臭□的。在
Redhat
4.1
□面附的
3.13
版的
ls
就没有问题。
%
ls
‐‐version
ls
-
GNU
fileutils-3.13
如果你在
Linux
的文字模式终端机□执行
``ls
‐‐
color'',那麽它的输出应该依照系统的预设值而有适当的彩色,而且你现在可以开始决定是不是需要改变任何的设定。
如果你在
xterm
□执行上面的过程,也许你还是没办法看到输出变成彩色。就跟
ls
一样,原来的
xterm
并不支援应用程式的彩色输出,而较新的版本有支援。如果你的
xterm
不支援彩色,那麽请参考这个文件的结尾拿到较新版本的
xterm,同时你也只好切换到文字模式并且继续下面的步骤。
4.
有那些颜色可以选择呢?
下面的
shell
命令稿(感谢许多把
bash
的版本寄给我的人)显示出现在使用的主控台能够支援的各种颜色组合。如果没有颜色出现,那麽你的主控台就不支援
ANSI
的颜色选择。
#!/bin/bash
#
显示
ANSI
的彩色
#
esc="\033["
echo
-n
"
_
_
_
_
_40
_
_
_
41_
_
_
_42
_
_
_
43"
echo
"_
_
_
44_
_
_
_45
_
_
_
46_
_
_
_47
_"
for
fore
in
30
31
32
33
34
35
36
37;
do
line1="$fore
"
line2="
"
for
back
in
40
41
42
43
44
45
46
47;
do
line1="${line1}${esc}${back};${fore}m
Normal
${esc}0m"
line2="${line2}${esc}${back};${fore};1m
Bold
${esc}0m"
done
echo
-e
"$line1\n$line2"
done
前景的颜色号码是在左边那一排,背景的则是在上方。如果你要粗体的字元和高亮度就在参数□加一个
"1",所以前景是白色而背景是蓝色就成了
"37;44;1"。整个的
ANSI
颜色选择序列就是
ESC
[
3
7
;
4
4
;
1
m
。
注:
背景不可以是高亮度,所以黄色(高亮度的棕色)只能用来作前景。这是硬体上的限制。
颜色代码:
0
-
黑色
4
-
蓝色
3#
是背景颜色
1
-
红色
5
-
粉红色
4#
是前景颜色
2
-
绿色
6
-
青色
3
-
黄色
7
-
白色
;1
是粗体和高亮度
5.
如何设定
ls
的彩色输出
如果你想要修改
ls
内定的标准颜色,你需要用下面的指令在你的
HOME
目录下制造这一个档案
cd
;
dircolors
-p
.coloursrc
在你编辑完这个注解的很详细的档案以後,你必需要把它读进你的环境变数
LS_COLORS
□,通常都是这样作的
eval
`dircolors
.colourrc`
然後你要把前面这一行放进你的
.bashrc
或
.cshrc
或
.tcshrc
(依照你使用的
shell
而定)□。更详细的用法请看
dircolors(1)
的使用说明。
6.
如何改变系统的预设值:
前景白色而背景是黑色
你需要告诉你的终端机驱动程式你想要的另一个预设值。要如何作并没有一个标准的方法,不过如果你是用
Linux
的话,你有
setterm
这个程式可以用。
"setterm"
使用终端机资料库□的资料来设定属性。要选择属性的话要这样作
setterm
-foreground
black
-background
white
-store
"-store"
参数把现在所作的改变设定成预设值。这需要你现在使用的的终端机种类(在
TERM
环境变数□)在
termcap
资料库□有足够详细的纪录。如果
setterm
因为某种因素不能正常的工作,你还有其它的选择。
6.1
Xterm
你要有至少一种下列的
xterm,而且要支援彩色。
xterm
-fg
white
-bg
blue4
color_xterm
-fg
white
-bg
blue4
color-xterm
-fg
white
-bg
blue4
nxterm
-fg
white
-bg
blue4
这□的
'color_xterm'
支援彩色版的
'ls'。这□的颜色选择是模彷
SGI
上面使用的颜色。
6.2
虚拟主控台
你也可以修改核心,这样就可以一劳永逸的用控制码来改变虚拟主控台的预设值。如果你自己编译核心的话,我建议利用
kernel
的缀补档。
核心的原始码是在
/usr/src/linux/drivers/char/console.c
,大概在
1940
行,这是你应该修改的地方
def_color
=
0x07;
/*
white
*/
ulcolor
=
0x0f;
/*
bold
white
*/
halfcolor
=
0x08;
/*
grey
*/
def_color
=
0x17;
/*
white
*/
ulcolor
=
0x1f;
/*
bold
white
*/
halfcolor
=
0x18;
/*
grey
*/
这边的十六进位数字是给显示卡用的:
最左边的位元(上面□例的
"1")是背景
;
最右边的位元是前景。0
=
黑色,1
=
蓝色,2
=
绿色,3
=
青色,
4
=
红色,
5
=
紫色,6
=
棕色/黄色,7
=
白色。把数字加
8
可以得到高亮度的颜色。在大部份的情况下,高亮度的背景色
==
闪烁的字加上普通的背景。由
sjlam1@mda023.cc.monash.edu.au
所提供
你也可以使用下面的
ANSI
控制码提供一个执行时期的主控台预设值。(在核心原始码□找到的)
ESC
[
8
]
这个控制码把预设值设成目前的前景及背景颜色。然後重设属性的控制码(ESC
[
m)让这预设值马上就取代黑白色成为使用中的颜色。
每次你重开机的时侯你都需要再把这些字串送给主控台。依照你的
Linux
主机用途不同,有好几个档案可以达成这个目的。