用户登录系统或使用su -命令 切换用户时(注意不要漏掉这里的“-”),会先执行/etc/profile 文件,这是一个全局配置文件,一般把对所有用户都要设置的环境变量放置在这个文件中。然后执行用户主目录下的.bash_profile,而在.bash_profile 中又会执行.bashrc文件,一般把只对用户设置的特定环境变量放置在.bash_profile 文件中,而在.bashrc文件中仿制用户登录时要自动执行的一些其他命令,如设置命令别名(alias)。另外用户在bash shell 中输入bash 启动一个新的shel(也称为子shell)时,也会执行.bashrc中的内容。这可以使得用户分别设置登录时要执行的命令以及启动子shell时要执行的命令。
当用户退出时,会执行用户主目录下的.bash_logout文件。如果要清楚当前账户创建的临时文件或给出当前用户登录系统的总时间,可以在这个文件中附加相应命令。
.bash_profile 、.bashrc、.bash_logout都是隐藏文件,要使用ls -a命令才能看到。
修改这几个文件后,如果要使其立即生效,可以使用source命令或使用source命令的同义词“.”,使用“.”时,要注意和文件名称以空格分隔:
$source .bash_profile
$. .bash_profile
与.bash_profile有相同作用的还有另外两个文件:.bash_login以及.profile,.bash_login 的名称来自于C shell 的.login 文件,.profile的名称来自于Bourne shell和Korn shell 的.profile文件,这些文件在各自的shell中,与.bash_profile有类似作用。当用户登录时,只读取三者之一,如果.bash_profile不存在,则寻找.bash_login,若.bash_login 再不存在,则寻找.profile。
可以在/etc/profiles、.bash_profile、.bashrc这几个文件中添加适当的内容,以测试在默认情况下,用户登录时执行这些文件的次序。如在/etc/profiles中的开始添加:echo “get into /etc/profiles”,在其末尾添加:echo “leave /etc/profiles”,对其他的文件也以相同的方式添加类似内容,得到如下结果:
#su -oracle
get into /etc/profiles
leave /etc/profiles
get into /home/oracle/.bash_profile
get into /home/oracle/.bashrc
leave /home/oracle/.bashrc
leave /home/oracle/.bash_profile
看以上结果可以得知这几个文件的执行顺序。