背景
当我们使用终端登陆Centos时,就自动打开了ssh终端。这个终端的命令提示符一般是这样的:
这个以#号结束的一行字,就是我们说的命令提示符了。
这个是腾讯云的服务器的提示符,可以看到主机名是VM-4-7-centos。
但是这个看起来好难受,怎么办?
那就改一下呗。
分析
这个命令提示符是可以自定义的。目前默认显示的格式,是由系统的环境变量PS1定义的,配套的还有PS2。PS2是用于定义使用反斜杠转义后第二行开始显示的前缀。
我们可以打印出来这个变量的值:
echo $PS1
echo $PS2
结果:
[root@VM-4-7-centos ~]# echo $PS1
[\u@\h \W]\$
[root@VM-4-7-centos ~]# echo $PS2
>
我们可以看到变量的值:[\u@\h \W]\$
那么这里面\u、\h、\W和\$是四个特殊的定义,为了可以自由定义格式,我们需要一起了解一下可用定义的清单。
\s :终端的名称
\d :显示【星期 月 日】的日期格式,如:"Mon Jun 26"
\H :完整的主机名
\h :仅取主机名在第一个小数点之前的名字
\t :显示时间,为 24 小时格式的【HH:MM:SS】
\T :显示时间,为 12 小时格式的【HH:MM:SS】
\A :显示时间,为 24 小时格式的【HH:MM】
\@ :显示时间,为 12 小时格式的【am/pm】样式
\u :目前使用者的账号名称
\v :BASH 的版本信息
\w :完整的工作目录名称,由根目录写起的目录名称。但家目录会以 ~ 取代
\W :利用 basename 函数取得工作目录名称,所以仅会列出最后一个目录名
\# :下达的第几个指令
\$ :提示字符,如果是 root 时,提示字符为 # ,否则就是 $
示例:
直接在命令行修改PS1的值即可生效。
不过,退出后再登陆又复原了。如何永久生效呢?
全局修改
默认在/etc/bashrc文件中定义了PS1变量的值,其中一行是这样的:
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
这里把PS1最终定义为"[\u@\h \W]\\$ ",也就是我们登陆进去的默认显示格式。
这一行的意思是,如果已经定义了像下面这样的格式:
-bash-4.2#
这样的提示符,则替换为现在默认看到的格式。
这个是系统级的全局配置,修改之后,所有的登陆用户全部都会应用,修改需要谨慎哈!
修改方法很简单,直接vim打开这个文件,然后把后面的定义修改一下即可。出了反斜杠定义的几个变量外,其他字符都是直接显示的。
需要注意的是,$前必须是两个反斜杠,否则\$不生效。\$是一个特殊的变量,所以前面的反斜杠需要多加一个反斜杠。
单用户修改
因为前面是系统全局的,所以不管是登陆用户,还是应用程序,只要会加载/etc/bashrc的程序都会生效。如果你不想影响其他用户,那么就在自己的用户配置里改就行了。
在自己的目录下(cd ~),然后ls -al可以看到.bashrc这个文件。我们在这个文件最底下添加一个变量定义即可。
这样设置后,不需要退出,直接:
source .bashrc
立即就生效了。当然以后登陆系统,也会生效。这样也不影响其他人。
最终我这样定义:
PS1="[\u@\A \W]\\$ "
显示的效果如下:
[root@20:30 work]#
这样我始终知道现在的时间,所在的目录以及当前的用户名。这样不是比默认的提示符爽太多了。当然你还可以加入更多好玩的文字,让提示变得更有温度。
当然啦,你还可以修改PS2来定义使用反斜杠来输入多行的提示哦,修改方法和PS1一样。
优先级
对单用户设置的优先级高于全局设置的,也就是说,如果你在.bashrc文件设置了PS1,尽管系统的配置文件/etc/bashrc也设置了,但是对于你这个用户来讲,你的用户的配置文件的优先级更高,直接可以无视系统的设置。但是如果你不设置,那就使用系统的设置了。
总结
命令提示符是我们和Linux打交道对多的东西,定义一个称心如何的提示符是不是非常爽。
来源: 自定义Centos的终端的命令提示符-七秒鱼笔记