Linux 中的登录 Shell 是什么?

登录 shell 是您登录交互式会话时使用您的用户 ID 执行的第一个进程。

这在表面上看起来很简单,但如果你深入挖掘,它可能会有点混乱。 为了理解,让我们回顾一下 Linux 系统中的登录过程。

Linux是一个多用户系统,多个用户可以同时登录和使用系统。

Linux 系统中的第一个进程,无论是 init 还是 systemd,都会启动一个 盖蒂计划. 这个 getty 是“get tty”的缩写(tty 表示物理或虚拟终端),负责保护系统免受未经授权的访问。

当您尝试直接(如果您在本地系统上安装了服务器)或通过 SSH(如果您的服务器位于远程位置)连接到 Linux 系统时,getty 会提示您(通过登录程序)输入您的用户名当输入用户名时,它会提示输入密码。

您的输入将根据 /etc/passwd 文件中存储的信息进行验证。 /etc/passwd 文件中的条目包含一些信息,例如用户名、用户 ID、主目录和登录成功后应该启动的第一个程序。

如上图所示,用户 abhishek 登录时启动的第一个程序。对于 Linux 中的标准用户,它是登录 shell。

该字段中也可能有其他值。 为了 examplesshd 是系统用户,不是真实用户,它不能像 abhishek 这样的普通用户交互登录系统。

sshd:x:110:65534::/run/sshd:/usr/sbin/nologin

如果第一个程序/登录shell的列中没有条目,则默认为/bin/sh,即标准shell。

我希望这不是太多的信息。

登录外壳与非登录外壳

好的,所以你登录了一个系统并知道它是一个登录 shell。 但是这是什么意思? 还有其他贝壳吗? 他们在哪?

在 Linux 中,当您运行 shell 脚本时,它会在自己的 shell(非交互式 shell)中运行。 您可以从当前的 shell(交互式 shell)启动一个新的 shell。

在 Linux 中更改 shell

用技术术语来说,这些都是子shell,但稍后会更多地讨论这个主题。 现在让我们关注登录shell。

shell 的配置文件和 RC 文件

登录 shell 从 /etc/profile 和主目录中的配置文件读取环境变量和其他配置。 这使您可以进行制表符补全、彩色输出并设置其他内容,例如 umask 等。

您可能知道 Linux 系统有不止一种 shell 可用。 大多数 Linux 发行版使用 bash 默认情况下为 shell,但您可以安装不同的 shell,例如 zsh 或鱼壳。

如果您的登录外壳是 bash,它从 /etc/profile 和 ~/.bash_profile 文件中读取。 如果您的登录 shell 是 zsh,它会从 /etc/zprofile 和 ~/.zprofile 读取。

/etc 目录中的文件为系统上的所有用户设置各自的 shell 配置。 这通常由系统管理员设置。

显然,用户主目录中的文件是特定于用户的。 这允许用户为常用命令创建别名或为程序使用自定义 PATH 变量。

非登录 shell 源自登录 shell,因此它通过配置文件获取登录 shell 设置的所有环境。 除此之外,非登录的交互式 shell 可以通过 /etc 或主目录中的 rc(资源配置)文件定义自己的环境变量。

为了 bash shell,通常是 /etc/bash.bashrc 和 ~/.bash_rc 文件,而对于 zsh shell,它是 /etc/zshrc 和 ~/.zshrc。

让我用一个实际的例子来说明区别 example.

请注意 shell 提示符如何变为绿色? 这是因为它读取 /etc/bash.bashrc 文件,Ubuntu 在这个文件中添加了额外的参数。 彩色提示就是其中之一。

总结一下:

  • 配置文件用于交互式登录 shell。 rc 文件用于交互式非登录 shell。
  • 首先执行 /etc 目录中的文件,然后执行主目录中的文件。
  • 非登录的交互式 shell 受益于配置文件和 rc 文件。

如何知道您是否在登录 shell 中?

这实际上非常简单,至少对于 bash 贝壳。 对于登录 shell,shell 可执行文件的名称以 -. 对于非登录 shell,它只是 shell 的名称。

你知道如何检查外壳,对吧? 您检查参数 0 的值。

检查它是否是登录shell

在桌面 Linux 上,您不使用登录 shell。 您的登录由显示管理器管理。 这就是为什么当你在 Linux 桌面上打开一个终端时,你会看到即使在终端中运行的第一个 shell 也不是登录 shell。

我试图在这里澄清有关登录 shell 的信息。 但是,如果您从未想过这些事情,可能会留下一些悬而未决的问题。 随时在评论部分提问,我会尽力回答。

如果您是阅读本文的专家用户并发现技术上不正确或缺少某些重要点,请在评论中告诉我。