Linux配置文件加载顺序及修改Shell命令提示符及颜色

环境变量初始化与文件对应的生效顺序

在登录Linux系统并启动一个bash shell时,默认情况下bash会在若干个文件中查找环境变量的设置。这些文件统称为系统环境文件。bash检查的环境变量文件的情况取决于系统运行的shell方式。系统运行shell方式一般为3中:

  • 通过系统用户登录默认运行的shell
  • 非登录交互式运行shell
  • 执行脚本运行非交互式shell

如何判断是否为交互式 Shell? 有两种方式

1、 查看特殊变量 - ,如果值包含 i,则是交互式,否则是非交互式

$ echo $-

2、 查看变量 PS1 是否为空,如果不为空,则是交互式,否则为非交互式

$ echo $PS1

判断是否为登录式 Shell ?

取得 bash 是需要完整的登入流程,就称为 login shell,取得 bash 接口的方法不需要重复登入的操作就称为non-login shell。
执行命令

shopt login_shell

如果值为 on 表示登录式(login shell),为 off 表示非登录式(non-login shell)。

同时判断交互式和登录式

$ echo $PS1; shopt login_shell
————————————————

当用户登录linux时,shell会作为登录shell启动。此时的登录shell加载环境变量的顺序如图所示


 

用户登录系统后首先会加载/etc/profile全局环境变量文件,这是Linux系统上默认的shell主环境变量文件。系统上每个用户登录后都会加载这个文件。

当加载完/etc/profile文件后,才会执行/etc/profile.d目录下的脚本文件,这个目录下脚本有很多。

之后开始运行$HOME/.bash_profile(用户环境变量文件),在这个文件中,又会去找$HOME/.bashrc(用户环境变量文件),如果有,则执行 ,如果没有,则不执行。在$HOME/.bashrc文件中又会去找/etc/bashrc(全局环境变量文件),如果有,则执行 ,如果没有,则不执行。

如果用户的shell不是登录时启动的(比如手动敲下bash时启动或者其他不需要输入密码的登录以及远程ssh链接情况),那么这种非登录shell只会加载$HOME/.bashrc(用户环境配置文件),并会去找/etc/bashrc(全局环境变量文件)。因此如果希望在非登录shell下也可读到设置的环境变量等内容,就需要将变量设定等写入$HOME/.bashrc或者/etc/bashrc,而不是$HOME/.bash_profile或者/etc/profile

Linux修改Shell命令提示符及颜色

Shell命令提示符及颜色是由PS1来配置:

1 [root@localhost ~]$ echo $PS1
2 \[\e[32;40m\][\u@\h \W]$\e[m

其中PS1常用的参数含义如下:

\d :#代表日期,格式为weekday month date,例如:"Mon Aug 1"
\H :#完整的主机名称
\h :#仅取主机的第一个名字
\t :#显示时间为24小时格式,如:HH:MM:SS
\T :#显示时间为12小时格式
\A :#显示时间为24小时格式:HH:MM
\u :#当前用户的账号名称
\v :#BASH的版本信息
\w :#完整的工作目录名称
\W :#利用basename取得工作目录名称,所以只会列出最后一个目录
\# :#下达的第几个命令
\$ :#提示字符,如果是root时,提示符为:# ,普通用户则为:$

3. 颜色值设置

PS1中设置字符颜色的格式为:\[\e[F;Bm\],其中“F“为字体颜色,编号为30-37,“B”为背景颜色,编号为40-47。用 \e[m 结束颜色设置,颜色表如下:
 

F       B
30    40     黑色
31    41     红色
32    42     绿色
33    43     黄色
34    44     蓝色
35    45     紫红色
36    46     青蓝色
37    47    白色 

代码 意义
-------------------------
0 OFF
1 高亮显示
4 underline
5 闪烁
7 反白显示
8 不可见

根据颜色表,套用入字符颜色设置格式中,就可以对linux终端命令行颜色进行个性化设置了。比如要设置命令行的格式为绿字黑底,显示当前用户的账号名称、
主机的第一个名字、完整的当前工作目录名称、24小时格式时间,就可以使用如下的命令:
# PS1='[\[\e[32;40m\]\u@\h \w \t]\$'
~/.bashrc配置
 1 [root@localhost ~]$ cat ~/.bashrc
 2 # .bashrc
 3 
 4 # User specific aliases and functions
 5 
 6 alias rm='rm -i'
 7 alias cp='cp -i'
 8 alias mv='mv -i'
 9 
10 PS1="\[\e[32;40m\][\u@\h \W]\$\e[m "
11 
12 # Source global definitions
13 if [ -f /etc/bashrc ]; then
14     . /etc/bashrc
15 fi

重新加载下~/.bashrc即可生效:

[root@localhost ~]$ source ~/.bashrc
 
 
 

猜你喜欢

转载自www.cnblogs.com/bz310/p/12006596.html