bashrc和profile

交互式shell:shell等待你的输入,并且执行你提交的命令。
非交互式shell:读取存放在文件中的命令,执行它们。

bashrc 与 profile都用于保存用户的环境变量,都是交互式。但bashrc用于交互式non-loginshell,profile用于交互式login shell。

bashrc和profile

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d目录的配置文件中搜集shell的设置,
/etc/bashrc:为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取。
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。

看上面的信息都有点懵,只知道/etc/profile是登录就会执行,/etc/bashrc是每个用户运行bash shell时都会运行,~/.bashrc是登录用户使用bash shell时才会运行。

首先看下/etc/profile里都写着什么,除了PATH,变量设置,路径设置就是遍历/etc/profile.d下的shell脚本和导入/etc/bashrc

bashrc和profile

bashrc和profile

再看下/etc/bashrc,也是调用了/etc/profile.d目下的sh脚本

bashrc和profile

总结起来就是如下

bashrc和profile

看下~/.bash_profile,,可以知道调用了~/.bashrc

bashrc和profile

~/.bashrc里则是调用了/etc/bashrc

bashrc和profile

总结起来就是如下

bashrc和profile

其实启动一个ssh连接全部都有调用,如果单独运行bash shell就只是运行/etc/bashrc和~/.bashrc,要注意的是第二点会先去调用~/.bash_profile,如果有并且可读才会执行,否则去找~/.bash_login,如果还没有就找~/.profile,我的centos 8中并没有~/.profile,最后 login shell退出时读取并执行~/.bash_logout中的命令。

以上截图都是在centos 8中查看