$ 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 会话的用户。当然这取决于终端应用程序。