Linux 中的 Login Shell 是什么?

系统 Linux
这个解释乍一看比较简单,但仔细想想又有些模糊。为了便于理解,下面我们重新看一下 Linux 系统的登录过程。

Login shell 是登录到交互式会话(interactive session)时使用用户 ID 执行的第一个进程。

这个解释乍一看比较简单,但仔细想想又有些模糊。为了便于理解,下面我们重新看一下 Linux 系统的登录过程。

Linux 是一个多用户的操作系统,可以允许多个用户同时登录和使用系统。

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

图片

当你尝试连接到 Linux 系统(登录本地系统,或者通过 ssh 连接远程服务器)时,getty 会(通过登录程序)提示你输入用户名,输入完用户名后,又会提示你输入密码。

登录时输入的信息(用户名和密码),系统会将其根据存储在 /etc/passwd 中的信息进行验证。/etc/passwd 文件中存储的信息包含用户名、用户 ID、主目录以及登录成功后要启动的第一个程序等。

图片

如上图所示,用户 abhishek 登录时启动的第一个程序(针对 Linux 中的标准用户),是 Login Shell。

字段中也可能有其他值。比如,sshd 是一个系统用户,而不是一个真正的用户,它不能像 abhishek 这样的普通用户那样以交互方式登录系统。如下所示:

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

如果第一个程序那一列中没有信息,那么默认为 /bin/sh,即标准 shell。

Login shell 和 non-login shell

我们登录到一个系统,知道它是一个 login shell,那么这意味着什么呢?是不是还有其他 shell 呢?

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

图片

从技术角度讲,这些都是子 shell。

shell 的配置文件和 RC 文件

login shell 从 /etc/profile 和主目录中的配置文件中读取环境变量和其他配置,这得以让我们可以使用 tab 补全键、设置彩色输出以及其他内容(比如 umask)等。

你可能知道在 Linux 系统中可用不止一个 shell,大多数 Linux 发行版都默认使用 bash shell,你也可以安装其他的 shell,比如 zsh 或者 Fish shell

如果你的 login shell 是 bash,那么其配置文件为 /etc/profile~/.bash_profile,如果是 zsh,它的配置文件为 /etc/zprofile~/.zprofile

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

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

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

对于bash shell,通常是 /etc/bash.bashc 和 ~/.bashrc 文件,而对于zsh shell,则是 /etc/zshrc ~/.zshrc 文件。

看下面的例子:

图片

上图中,shell 读取 /etc/bash.bashrc 文件后,其提示符变成了绿色。Ubuntu 在该文件中添加了其他参数,颜色设置是其中之一。

概况一下:

  • 配置文件用于交互式 login shell,rc 文件用于交互式 non-login shell;
  • 首先执行/etc/directory中的文件,然后执行home目录中的文件;
  • 配置文件和 rc 文件同时作用于非交互式的 non-login shell。

如何查看当前是否在 login shell 中?

这非常简单,至少对于 bash shell 来说是这样。对于 login shell,shell 可执行文件的名称以 - 开头。对于non-login shell,它只是 shell 的名称。

图片

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

责任编辑:庞桂玉 来源: TIAP
相关推荐

2022-08-21 16:27:36

LinuxShell

2023-03-02 08:48:43

Linuxsubshell

2022-04-03 13:17:21

Linux黑话解释GRUB

2023-11-22 10:51:25

LinuxSuper

2012-01-18 10:46:33

ibmdw

2022-11-16 08:43:56

Linux/etc/hosts文件

2020-12-15 09:08:40

LinuxShell

2009-09-29 10:45:17

UnixLinuxshell

2023-05-18 22:51:08

2009-10-23 13:24:20

linux Shell

2021-04-26 07:51:00

JavaScript方法函数

2022-09-15 09:54:34

nullPython字符

2010-06-29 13:58:17

SNMPMIB

2022-11-14 15:07:09

Linux管道

2023-05-05 08:18:38

Linuxsource命令

2023-08-29 09:50:42

Unix shellLinux

2021-10-09 07:10:32

Shell脚本linux

2023-03-28 07:03:15

gRPCMetadata

2022-06-29 08:37:03

事件循环JS 语言

2021-12-03 18:29:31

GoAny 泛型
点赞
收藏

51CTO技术栈公众号