当前位置: 首页 > news >正文

如何理解 Linux 中的 登录shell 和 非登录shell,两者又有什么区别

如何理解 Linux 中的 登录shell 和 非登录shell,两者又有什么区别

登录 SHELL: 就是使用 用户名/密码 登录系统的时候,此时会自动启动一个 shell 交互式命令行,这个就是登录shell。

场景 是否登录 shell 原因
ssh user@host sshd 启动 login shell 给你
控制台输入用户名密码登录 标准的 login shell
su - username - 表示 login 模式
bash -l -l = login 模式

例如:使用ssh客户端工具 xshell 远程连接到服务器,此时会启动一个shell终端,这就是登录shell。


非登录 SHELL:就是已经进入系统了,然后又重新开了一个新shell环境,这就是非登录shell。

场景 是否非登录 shell 原因
在已登录环境中执行 bash 开了一个子 shell
图形界面点击 Terminal(Ubuntu 桌面等) 默认不会走 login shell
脚本执行:bash xxx.sh 脚本运行不会创建 login shell

例如:我在操作系统图形化界面上,点击 Terminal 图标,启动的就是一个非登录的shell。


例如:我已经使用 xshell 等ssh客户端工具连接到服务器了,然后我再 执行 bash 命令系统的shell,这就是一个非登录shell。


如何区分登录SHELL 和 非登录shell:

在当前终端上执行 echo $0,如果是 - 开头,说明登录 shell,如果没有就说明是非登录shell。


登录shell 和 非登录shell 的区别:

  • 登录 shell:会加载加载全局配置和用户级配置。如:/etc/profile、~/.profile等。

  • 非登录 shell:只会读取 ~/.bashrc,其他的配置不再重新加载,而是继承父 shell 的变量