登录Shell和非登录Shell、相关配置文件调用

1、定义和示例

登录 shell 和非登录 shell 是 Unix/Linux 系统中两种不同类型的 shell 会话。它们的主要区别在于它们的启动方式以及环境变量的设置方式。

1.1 登录shell

定义: 登录 shell 是当用户登录到 Unix/Linux 系统时启动的 shell。这通常发生在用户使用命令行界面(CLI)访问系统时,或通过 SSH 登录远程系统。

特征:

  • 登录 shell 会读取特定的配置文件,以设置用户环境和变量。

  • 通常会读取以下文件(根据使用的 shell 不同):

    • Bash shell:
      • /etc/profile (系统范围的配置)
      • ~/.bash_profile
      • ~/.bash_login
      • ~/.profile
    • Zsh shell:
      • /etc/zsh/zprofile
      • ~/.zprofile
      • ~/.zlogin
  • 在用户登录时,登录 shell 会执行这些文件中的命令和设置环境变量。

1.2  非登录shell

定义: 非登录 shell 是在用户已经登录后,打开的新 shell 会话。它通常用于交互式命令行操作,如 Terminal 中打开的新标签页或新窗口。

特征:

  • 非登录 shell 通常不会读取登录 shell 需要的配置文件,而是读取另一组配置文件。
  • 例如,Bash shell 会读取以下文件:
    • ~/.bashrc
  • 非登录 shell 通常用于终端中的命令行操作。

1.3 总结

特性登录 Shell非登录 Shell
启动方式用户登录系统时已登录用户打开新终端时
读取配置/etc/profile~/.bash_profile/etc/bashrc~/.bashrc
通常用例远程 SSH 登录,控制台登录终端中新窗口/标签的 shell

2、判断方法

输入以下命令:

echo $0

如果输出结果为 -bash(对于 Bash),则表示这是一个登录Shell。若结果为 bash(没有前面的连字符),则是非登录Shell。

3、相关配置文件关系

3.1 文件介绍

  • /etc/profile:

    • 适用于所有用户,是系统范围的配置文件。
    • 用于设置环境变量和启动其他配置。
  • /etc/bashrc:

    • 也是系统范围的,但专门针对交互式非登录Shell。
    • 定义了Shell的行为,以及一些功能和提示符设置。
  • ~/.profile:

    • 用户级别的登录Shell配置文件。
    • 加载用户的环境变量和启动程序。比较通用,适用于sh和bash等多种Shell。
  • ~/.bashrc:

    • 用户级别的交互式非登录Shell配置文件。
    • 主要用于设置Shell的功能,比如别名、函数等。
  • ~/.bash_profile:

    • 仅在bash的登录Shell中使用的文件。
    • 通常用来调用~/.bashrc,并设置用户环境。

3.2 调用顺序

  • 对于登录 shell,首先会加载 /etc/profile,然后是用户级别的配置文件(如 ~/.bash_profile 或 ~/.profile),最后可能调用 ~/.bashrc(通常在 ~/.bash_profile 中调用)。
  • 对于非登录 shell,通常只直接加载 ~/.bashrc。有些系统在读取 ~/.bashrc 之前会读取 /etc/bashrc

4、测试

4.1 shell类型测试

4.2 配置文件执行顺序测试

/etc/profile中本身就会默认调用/etc/bash.bashrc,此处的/etc/bash.bashrc和/etc/bashrc相对应,只是名称略有区别在最后面我们追加一行内容:

同样在/etc/bash.bashrc中最后追加一行内容:

在root家目录下修改.proflle文件,其默认会调用家目录下的.bashrc,在最后面追加一行内容:

在~/.bashrc中追加一行内容:

重新登录ssh到终端,查看/home/filetest内容:

由于我们每个文件追加的打印内容在文件最后,但是profile中调用bashrc位于脚本的中间位置,所以出现上述顺序,实际上登录型shell调用顺序是/etc/profile--->/etc/bash.bashrc--->~/.profile--->~/.bashrc。

执行bash命令启用一个非登录shell,再查看文件,发现新增了两行,即非登录shell只会调用etc/bash.bashrc--->~/.bashrc

5、总结

本文讲解了登录Shell和非登录Shell一般定义,说明了/etc/profile、etc/bashrc、~/.profile、~/.bashrc、~/.bash_profile等文件的作用和调用关系。

根据上述测试测试,针对系统级的一些环境设置等操作建议在/etc/bashrc中修改,针对用户级的建议在~/bash.bashrc中修改,因为无论登录shell还是非登录shell都会调用这两个文件。

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值