登录LInux系统(RHEL 7系统)时,bash shell会作为登录shell启动。登录shell会从5个不同的启动文件里读取命令:
- /etc/profile(/etc:etcetera附加物,存放系统配置文件,类似于windows系统的system目录)
- $HOME/.bash_profile(.代表隐藏文件)
- $HOME/.bash_login
- $HOME/.profile(profile:配置文件)
- $HOME/.bashrc(rc结尾:resource configuration资源配置)
login shell:取得bash时需要完整的登录流程的,就称为login shell(比如登录系统时输入用户名与密码取得的bash shell),读取两个配置文件:/etc/profile、~/.bash_profile或~/.bash_login或~/.profile(按顺序三选一)(~/.bashrc文件通过~/.bash_profile调用读取)
non-login shell(交互式shell进程):取得bash接口的方法不要重复登录的举动(如如在命令行提示符下/终端接口下输入bash时启动的环境),不会访问/etc/profile文件,只会检查~/.bashrc文件。
- (login shell)/etc/profile:系统上默认的bash shell的主启动文件,系统整体的设置(最好不要修改此文件)。每个用户登录时都会执行这个启动文件,而/etc/profile再去调用其他的配置文件,如/etc/profile.d/*.sh。
/etc/profile文件的全部内容(RHEL 7系统):
/etc/profile文件设定的主要变量:
/etc/profile.d目录下放置了许多特定的应用程序启动文件(扩展名为.sh供bash shell使用,而.csh文件是供c shell使用的),如bash操作接口的颜色、语系、vi的命令别名、which的命令别名等,当用户登录时,shell会通过/etc/profile的调用来执行这些文件。
(全用户永久性保留自定义的全局环境变量和命令别名:最好在/etc/profile.d目录中新建一个.sh结尾的文件,把新设置放在这个.sh文件中。不建议写入/etc/profile文件中:/etc/profile文件会随着系统更新而更新,所以里面的内容也会重置,新定制过的设置也就没有了)
- (login shell)bash shell在读完了整体环境设置的/etc/profile(并借此调用其他配置文件后),接下来则是会读取用户的个人配置文件。并且会按照下列顺序,运行第一个被找到的文件,余下的则被忽略(三个配置文件中只会读取其中一个):
- $HOME/.bash_profile:.bash_profile启动文件会先去检查HOME目录中是否存在.bashrc的启动文件,如果存在,会先执行这个.bashrc启动文件里的命令。
soure(源):读入环境配置文件。格式:source 配置文件名。利用sourece或小数点(.)都可以将配置文件的内容读进目前的shell环境中。(由于/etc/profile与~/.bash_profile都是在取得login shell的时候才会读取的配置文件,所以自己新写入的偏好设置通常需要注销用户再重新登录后才会生效,而通过source命令可以直接读取配置文件)
- $HOME/.bash_login
- $HOME/.profile
- (login shell、non-login shell)$HOME/.bashrc(login shell:通过调用运行,no-login shell:直接读取运行):①.查看/etc目录下通用的bashrc文件;②.为用户提供一个定制的命令别名和私有脚本函数的地方(个人用户自定义的命令别名、全局环境变量在注销bash后就会失效,可将设置写入配置文件~/.bashrc启动文件中,使其效果在此用户下永久化(更换用户后也会失效))。
root的~/.bashr中规范了较为保险的命令别名(与一般用户的不同)
/etc/bashrc文件的部分内容(/etc/bashrc文件是RHEL/CentOS特有的):
作用:①.依据不同的UID规定umask的值;②.依据不同的UID规定提示符(PS1变量);③.调用/etc/profile.d/*.sh的设定
个人用户自定义的命令别名、全局变量在注销bash后就会失效(个人永久性保留设置:将设置写入配置文件$HOME/.bashrc启动文件中)(全用户永久性保留设置:若希望更换用户后配置也仍然生效,则最好在/etc/profile.d目录中新建一个.sh结尾的文件,把新设置放在这个.sh文件中)