login shell和nologin shell
取得shell的时候需要输入账号密码(完整流程)就是login shell,剩下的就是non-login shell.
二者获得shell后读取的配置文件不同
所以在图形化界面直接打开终端是non-login,直接执行bash获得的终端也是。
先sudo init 3,然后登录shell,那绝对是login shell实锤。
non-login shell
先/etc/bash.bashrc后读取~/.bashrc
login shell
- 先读取 /etc/profle
- 在~中找 .bash_profile,然后找.bash_login,然后找.profile。
这三个文件,就按照这个顺序找。找到一个之后就不往下找了。就是说这三个文件只有一个会被执行。 - 但是这三个文件里面,一般都会再次调用~/.bashrc
场景分析
在我的ubuntu 22.04当中
登录shell
- /etc/bash.bashrc
- /etc/profile
- ~/.bashrc
- ~/.profile
non-login shell
- /etc/bash.bashrc
- ~/.bashrc
常见设置
- 一般的使用情况不需要严格区分login shell和non-login shell
- 给个人设置环境变量,在~/.bashr就够用
- 设置全局环境变量,一般用/etc/environment 。
注意了,environment不是shell脚本,只能定义,不具有执行功能,就是别引用变量扩展(刀了符号)和export关键字等
扩展
- .bash_history 历史命令
- .bash_logout 登出的时候执行