Shell登录模式及其相应配置文件的区别

 

Shell登录模式

交互式登陆shell 当一个用户登陆Linux系统时,首先会检查/etc/profile文件(也会根据该文件的设置检查/etc/profile.d目录下的所有文件),/etc/profile文件是系统上默认的bash shell主启动文件,每个登录用户都会执行这个启动文件。然后检查/.bash_profile目录下的文件。

交互式非登陆shell 当你的shell不是登陆系统时启动的(比如在系统内输入bash命令启动的子shell),此时启动的shell则成为交互式shell,因为该shell同样可以提供一个命令提示符来输入命令。此时与登陆shell的区别在于:不会检查/etc/profile文件和/etc/profile.d目录下的所有文件。只会检查 ~/.bashrc

非交互式shell 系统在执行脚本时用到的就是这种shell,此时的环境变量则为继承父shell的(脚本是当前shell中启动的一个子进程),需要注意的是:如果父shell中定义但未导出的环境变量属于局部变量,子shell不能继承。

配置文件

  • /etc/profile:全局环境变量,为系统的每个用户设置环境信息和启动程序,当用户第一次登录时,该文件被执行,其配置对所有登录的用户都有效。当被修改时,必须重启才会生效。

  • /etc/bashrc:全局环境变量,为每个运行 bash shell 的用户执行该文件,当 bash shell 打开时,该文件被执行,其配置对所有使用bash的用户打开的每个bash都有效。当被修改后,不用重启只需要打开一个新的 bash 即可生效,也就是source /etc/bashrc

  • /.bash_profile:为当前用户设置专属的环境信息和启动程序,当用户登录时该文件执行一次。默认情况下,它用于设置环境变量,并执行当前用户的 .bashrc 文件。理念类似于 /etc/profile,只不过只对当前用户有效,也需要重启才能生效。

  • ~/.bashrc:为当前用户设置专属的 bash 信息,当每次打开新的shell时,该文件被执行。理念类似于/etc/bashrc,只不过只对当前用户有效,不需要重启只需要打开新的shell即可生效,也就是source ~/.bashrc