1. 比喻法讲解
想象你要进入一座神秘的城堡(系统),有两种不同的入口通道,分别对应登录 Shell 和非登录 Shell。
登录 Shell 就像是城堡的主大门入口。当你通过主大门进入城堡时(通过登录 Shell 启动会话),城堡会对你进行全面的身份验证和准备工作,比如检查你的通行证(用户凭证),为你分配专门的房间(初始化环境变量),给你发放城堡地图和各种必要工具(加载启动脚本),让你能够以正式成员的身份在城堡中活动。这是一个相对完整、全面的进入流程,适用于你首次进入城堡(登录系统)的场景。
而非登录 Shell 则好比城堡内部的一个侧门。当你已经在城堡内,从这个侧门进入另一个区域时(启动非登录 Shell),城堡不会再次进行全面的身份验证等复杂流程,因为它认为你已经是城堡的合法成员了。你可以直接进入,并且使用之前主大门进入时所获得的各种资源和配置,只是不会重复那些首次进入时的初始化步骤。这种方式更快捷、轻便,适用于你在城堡内临时需要执行一些小任务(在已登录系统中执行特定命令或脚本)的场景。
2. 内在化引导
结合你在办公室工作的场景来理解。假设办公室是一个系统,登录 Shell 就像你早上来上班,刷卡进入办公室(登录系统)。此时,公司会给你分配当天的工作任务(初始化环境变量),打开你的专属办公软件和文档(加载启动脚本),为你一天的工作做好全面准备。
而非登录 Shell 则像你在办公室里面,中途打开一个新的应用程序窗口来完成某项特定任务。你不需要再次刷卡确认身份(无需重复登录验证),并且可以直接使用已经准备好的办公环境(继承登录 Shell 的环境配置),快速开始工作。
3. 流程记事(对比步骤)
- 启动方式:
- 登录 Shell:通常在用户登录系统时启动。例如,在 Linux 系统中,通过控制台登录、SSH 远程登录等方式,输入用户名和密码成功登录后,启动的就是登录 Shell。它会读取并执行一系列与用户登录相关的启动脚本。
- 非登录 Shell:在已经登录系统的会话中启动。比如在 Linux 终端中输入
bash命令,就会启动一个非登录 Shell。它不会重复登录时的验证过程,而是基于当前已有的登录环境运行。
- 配置文件加载:
- 登录 Shell:在 Linux 系统中,登录 Shell 会依次读取
/etc/profile以及用户主目录下的~/.bash_profile、~/.bash_login、~/.profile(按顺序查找,找到一个就停止)等配置文件。这些文件用于设置系统级和用户级的环境变量、别名、启动脚本等,为用户的整个会话环境进行初始化配置。 - 非登录 Shell:非登录 Shell 一般会读取
~/.bashrc文件(在某些系统中,也可能会读取/etc/bashrc,但这通常由系统管理员配置决定)。这个文件主要用于设置一些局部的、交互式 shell 的配置,如命令提示符样式、自定义函数等,它是在已有的登录环境基础上进行补充配置。
- 登录 Shell:在 Linux 系统中,登录 Shell 会依次读取
- 环境变量处理:
- 登录 Shell:会根据上述配置文件全面初始化环境变量。例如,设置
PATH变量来指定命令的搜索路径,以便用户可以方便地执行系统命令和自己安装的软件命令。这些环境变量在整个登录会话期间都有效。 - 非登录 Shell:会继承登录 Shell 已经设置好的环境变量,然后再根据
~/.bashrc文件中的设置进行局部调整。例如,如果在~/.bashrc中添加了新的PATH路径,只会在当前非登录 Shell 会话中生效,对其他非登录 Shell 或登录 Shell 会话无影响。
- 登录 Shell:会根据上述配置文件全面初始化环境变量。例如,设置
- 应用场景:
- 登录 Shell:适用于用户首次登录系统,需要全面初始化工作环境的场景。例如,系统管理员登录后可能需要加载特定的管理工具和环境配置,以便进行系统维护和管理任务。
- 非登录 Shell:常用于用户在已登录系统中,临时需要执行一些特定命令或脚本的情况。比如,你在已经登录的系统中,想要快速测试一个新写的 shell 脚本,启动一个非登录 Shell 来执行脚本会更加便捷,因为它不需要重复登录的过程和全面的初始化配置。
4. 画图表法
以下用表格对比展示登录 Shell 和非登录 Shell 的主要区别:
| 对比项目 | 登录 Shell | 非登录 Shell |
|---|---|---|
| 启动时机 | 用户登录系统时 | 在已登录系统的会话中手动启动 |
| 启动方式示例 | 通过控制台登录、SSH 远程登录 | 在终端输入 bash 命令 |
| 配置文件加载 | /etc/profile 及用户主目录下的 ~/.bash_profile、~/.bash_login、~/.profile(三选一) | ~/.bashrc(可能读取 /etc/bashrc) |
| 环境变量处理 | 全面初始化环境变量 | 继承登录 Shell 的环境变量并局部调整 |
| 应用场景 | 用户首次登录系统,全面初始化工作环境 | 在已登录系统中临时执行特定命令或脚本 |
通过这个表格,可以清晰地看到登录 Shell 和非登录 Shell 在各个方面的差异,帮助你更好地理解和区分它们,从而在实际使用中根据需求选择合适的 Shell 类型。
1005

被折叠的 条评论
为什么被折叠?



