Shell 启动类型与配置文件#
1. Shell 的启动类型#
Shell 的启动类型可以从登录状态和交互状态两个维度分类:
- 登录状态
- 登录 Shell (Login Shell):需要完整用户认证(需要输入用户名/密码登录);
- 非登录 Shell (Non-login Shell):无需登录过程,在已有会话中启动。
- 交互状态
- 交互式 (Interactive Shell):等待用户输入命令,有提示符;
- 非交互式 (Non-interactive Shell):执行脚本或命令,无提示符。
综合来说分为以下四类:
- 非交互式非登录 Shell:
- 执行脚本的场景;
ssh user@host 'cmd',可以理解为 SSH 登录后执行/bin/bash -c 'cmd'。
- 交互式非登录 Shell:在终端中执行
bash、su user命令或在图形界面启动新终端。 - 交互式登录 Shell:
su -或sudo -i切换用户;- SSH 交互式登录:
ssh user@host(不带命令)。
- 非交互式登录 Shell:指定
--login, -l选项的场景,如bash -l script.sh等,该场景较少见;
2. Shell 的配置文件#
- 非登录场景,仅加载以下配置文件:
/etc/bash.bashrc(部分发行版为/etc/bashrc)~/.bashrc
- 登录场景,加载顺序如下。
/etc/profile/etc/profile.d/*.sh- 加载下方第一个存在的配置文件:
~/.bash_profile~/.bash_login~/.profile
Login Shell 不会读取
~/.bashrc。 为了让 Login Shell 也加载.bashrc,常见做法是在 ~/.bash_profile 中显式添加:if [ -f ~/.bashrc ]; then . ~/.bashrc fi