Linux给人最大的享受就是可以根据个人喜好去定制令自己舒服的系统配置,像终端颜色的设置就是一个典型的例子。
图1 系统默认状态下的终端显示
在没有经过自定义配置的终端下工作久了,难免容易疲劳,因为所有输入输出都是一个颜色,对查找一些命令的执行结果很不方便。除了颜色,默认终端配置下的长长的路径名也是一个让人比较蛋疼的地方。经过网上一番资料查找,才知道,原来对终端的配置,可以写到不同的文件之中,例如:~/.bashrc、/etc /bash.bashrc、/etc/profile这几个文件。但是,这些文件的作用又不尽相同,用户在进行配置之前必须先了解各个文件的作用时机:
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc /profile.d目录的配置文件中搜集shell的设置.此文件默认调用/etc/bash.bashrc文件。
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时, 该
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc:该文件包含专用于你的bash shell的bash信息。
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.
弄清楚几个文件的相互关系以及各自作用后,我们可以明白的是:针对于用户的配置,应该将配置信息写入~/.bashrc文件。我个人认为默认终端配置的不足之处有两个:1.没有使用不同的颜色以突出不同的内容;2.路径名太长导致有的时候输入的命令需要在新的一行显示。以下就通过解决这两个问题来完成本文。
1.颜色配置
为了设置终端颜色,我们需要对~/.bashrc文件中的PS1变量进行定制。首先通过“gedit ~/.bashrc“命令打开文件,找到PS1变量所在位置:
图2 .bashrc文件中的PS1变量
这几句代码相信大家不难理解吧,简单地说就是:在颜色模式打开的情况下,PS1变量代表的内容就是用户名+主机名+路径名(长路径)+ $。
以下对PS1变量的设置进行具体分析:
首先我们要知道如下几张表:
前景 背景 颜色
---------------------------------------
30 40 黑色
31 41 紅色
32 42 綠色
33 43 黃色
34 44 藍色
35 45 紫紅色
36 46 青藍色
37 47 白色
1 透明色
代码 意义
-------------------------
0 OFF
1 高亮显示
4 underline
5 闪烁
7 反白显示
8 不可见
序列说明
\a ASCII响铃字符(也可以键入 \007)
\d "Wed Sep 06"格式的日期
\e ASCII转义字符(也可以键入 \033)
\h 主机名的第一部分(如 "mybox")
\H 主机的全称(如 "mybox.mydomain.com")
\j 在此 shell中通过按 ^Z挂起的进程数
\l 此 shell的终端设备名(如 "ttyp4")
\n 换行符
\r 回车符
\s shell的名称(如 "bash")
\t 24小时制时间(如 "23:01:01")
\T 12小时制时间(如 "11:01:01")
\@ 带有 am/pm的 12小时制时间
\u 用户名
\v bash的版本(如 2.04)
\V Bash版本(包括补丁级别) ?/td>;
\w 当前工作目录(如 "/home/drobbins")
\W 当前工作目录的“基名 (basename)”(如 "drobbins")
\! 当前命令在历史缓冲区中的位置
\# 命令编号(只要您键入内容,它就会在每次提示时累加)
\$ 如果您不是超级用户 (root),则插入一个 "$";如果您是超级用户,则显示一个 "#"
\xxx 插入一个用三位数 xxx(用零代替未使用的数字,如 "/007")表示的 ASCII 字符
\\ 反斜杠
\[这个序列应该出现在不移动光标的字符序列(如颜色转义序列)之前。它使 bash能够正确计算自动换行。
\] 这个序列应该出现在非打印字符序列之后。
在对以上知识有了基本了解之后,我们就可以进行实际操作了。首先在终端中使用命令“cp ~/.bashrc ~/.bashrc.backup”对配置文件进行备份(这里提醒各位,在Linux中,如果需要对配置文件之类的东西进行修改的话,最好进行备份,以防出错之后导致系统无法登录之类的问题),然后“gedit ~/.bashrc"打开文件,找到PS1变量设置的代码,注释之(在每一行代码前插入注释符号”#“)。在文件的末尾加上”PS1='\u@\h:\w\$ '“(这是终端的默认设置,即不加任何颜色):
完成以上操作后保存并退出GEdit编辑器,回到终端后输入“source ~/.bashrc”,发现显示用户信息的地方没什么变化,说明刚才的设置与默认终端设置一致。
而接下来,我们就需要对显示的信息的字体颜色进行设置,首先看一下颜色是如何设置的:
颜色的设置公式
颜色=\033[代码;前景;背景m
如:\033[1;32;40m表示高亮显示字体为绿色,背景色为黑色(颜色定义见本文前面的表格)
注意:要将全部非打印字符用专用的 bash 转义序列 "\["和 "\]"括起来。这两个序列通知 bash,被括起来的字符不占用行上的任何空间,这样就使自动换行能够继续正常工作。
这点很关键要不然等你设好了颜色,你的终端换行会乱七八糟
现在对上边的PS1变量进行颜色的设置,即在需要更改颜色的地方插入颜色值,比如我们让用户名以红色显示的命令应该是:
PS1='\[\033[1;31;40m\]\u@\h:\w\$ '
同样对.bashrc文件进行修改后source一下,应该看到的结果如下:
事实上我们并不是想要所有信息的显示颜色都一样,所以我们要想办法让信息显示以不同颜色展示。这里大家可能会注意到,颜色设置的作用范围是从当前设置命令到下一颜色设置命令的,也就是说,如果我们只在\u前设置了颜色,那么终端的字体应该都是红色的,就像下边一样,不仅信息项是红色的,就连输入命令都是红色的:
为此,我们需要在@符号前面插入新的颜色值以防止整个信息项以红色显示,修改后的PS1变量为:
PS1='\[\033[1;31;40m\]\u\[\033[00m\]@\h:\w\$ '
同样source一下,结果出来了:
明白了对PS1变量进行设置的原理之后,用户就可以根据自己的需要随心所欲地设置PS1变量了,比如在PS1变量中插入字符串,或者为每个信息项设置不同的颜色,或者控制信息栏显示的内容:
我们可以让用户名带下划线,路径以白色显示,并且美元符号以绿色显示,命令则以蓝色显示:
PS1='\[\033[4;31;40m\]\u\[\033[00m\]@\h:\[\033[37;40m\]\w\[\033[32;40m\]\$ \[\033[34;40m\]'
source一下,效果如下:
至此,终端的颜色设置问题已经解决,以下解决路径名问题。
2.终端中长路径名问题
有时候在终端需要连续打开几层的文件夹才能访问到我们所需的文件,而这个时候在终端中显示的路径名就像是一条长长的尾巴,有没有什么好的办法使终端只显示用户当前的工作目录的名字呢?其实在前边的序列说明中已经提及,我们可以在PS1变量设置终端只显示工作目录的基名,即将PS1变量中的\w的小写的w换成大写的W,修改后的PS1变量为:
PS1='\[\033[4;31;40m\]\u\[\033[00m\]@\h:\[\033[37;40m\]\W\[\033[32;40m\]\$ \[\033[34;40m\]'
下面通过图片说明二者的效果:
可以发现,经过修改PS1变量的值之后,终端将只显示当前工作目录的基名了~。
最后,综合以上所说,分享一下我的PS1变量,我的变量里边是设置为不显示主机名并且显示短路径名的:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;04;32m\]\u\[\033[00m\]:\[\033[01;37m\]\W\[\033[31m\]\$ \[\033[00m\]'
最后,可能各位还会发现,如果打开新的终端,用户定义的配置并没有显示出来,而还是显示默认的配置。
这个时候可以通过source 命令去手动加载.bashrc文件,这时候,我们所设置的配置又回来了。
当然,终端作为我们在系统之中常用的工具之一,如果每次打开终端都要source一次,那岂不是蛋疼死了?回到文章开头的地方,我们说/etc/profile文件从 /etc/profile.d目录的配置文件中搜集shell的设置.此文件默认调用/etc/bashrc文件,于是我们可以打开profile文件看一看:
“sudo gedit /etc/bashrc”(注意这里需要加上sudo!)
可以看到,在文件中有一句调用/etc/bash.bashrc文件的代码,所以可以推断,前文所说的profile文件自动加载bash.bashrc 文件,事实上就是由代码实现的,于是我们同样地可以在这里添加一句新的代码,以使profile自动加载用户的.bashrc文件,以此实现我们不需每次打开终端都要source的需求。
保存之后关闭编辑器,新打开一个终端,可以发现,我们之前的配置已经能够自动加载了。
3.ls命令设置
在终端一个常用的命令就是ls命令了,我们可以通过在.bashrc文件中设置alias以实现ls命令的一些自定义设置:
alias其实是相当于一个命令引用的东西,例如最后一句,每当你在终端里边输入ls命令,终端会根据.bashrc文件中的alias的设置查找到引用的命令:ls --color=auto,所以你每次输入“ls”其实就相当于输入了“ls --color=auto”,而这句命令的作用是显示当前目录的可见文件,并且以颜色区分不同类型的文件,比如文件夹和普通文件。
最后一个值得一提的就是一个小建议了,之前看到的我的终端都是黑底的,其实用户可以直接在终端中设置首选项以实现半透明背景,或者是以一张图片作为背景也可以:
本人使用:
PS1='${debian_chroot:+($debian_chroot)}\[\033[00;00;32m\]\u\[\033[00m\]:\[\033[00;04;32m\]\w\[\033[00;01;34m\]\$ \[\033[00;00;36m\]'
作者:柒月