“登录用户”到底是什么?

“登录用户”到底是什么?
$ users
vorac


# Non-login shell, /root/.profile not sourced.
$ su
$ users
vorac

# Login shell, /root/.profile sourced.
$ su -
$ users
vorac

因此,我们在上一个示例中以另一个用户身份启动登录 shell,但仍然只有原始用户“登录”。 “登录用户”的概念是如何定义的?

答案1

Unix/Linux 系统在文件中维护当前登录用户的数据库/var/run/utmp(在某些 Unix 变体中还有一个并行utmpx文件,但它们都有相同的用途)。该login程序控制物理控制台上的登录,具有 X 服务器的计算机的 ssh 守护程序或 GUI 登录程序会在用户登录或注销时更新该文件中的信息。who命令从该数据库读取信息。

您启动的 shellsu -是一个“登录”shell,因为它的行为方式与login程序或 ssh 守护程序启动的登录 shell 相同(执行相同的初始化文件等),但它不会在utmp文件中记录登录,因此您在命令的输出中看不到这些 shell who

另一方面,如果你例如。启动一个screen会话,screen在文件中记录一个条目utmp,您可以在命令的输出中看到该会话who

此外,在某些图形 DE 中,您打开的每个新终端窗口都被视为一次新登录并记录在 中utmp,而在另一些图形 DE 中则不然 - 只有一个主条目utmp用于登录到整个 DE 会话的用户。当然这取决于终端应用程序。

相关内容