![登录 shell 是否需要创建 utmp 条目?](https://linux22.com/image/116802/%E7%99%BB%E5%BD%95%20shell%20%E6%98%AF%E5%90%A6%E9%9C%80%E8%A6%81%E5%88%9B%E5%BB%BA%20utmp%20%E6%9D%A1%E7%9B%AE%EF%BC%9F.png)
我的观察:
如果我打开一个新终端(侏儒/lx):
- 新的/dev/pts/X用来
who
没有列出这些- 第一个字符
echo $0
不是-
,因此它不是登录 shell。
如果我
ssh
使用同一用户进入同一台机器- 新的/dev/pts/X用来
who
列出这些- 第一个字符
echo $0
是-
,所以它是一个登录 shell。
如果我打开一个新的终端 (ctrl-alt-Fxx)
- 新的/dev/ttyXX用来
who
列出这些- 第一个字符
echo $0
是-
,所以它是一个登录 shell。
如果我跑
su -
- 相同的/dev/pts/X用来(在哪里
su -
发行) who
没有列出这些- 第一个字符
echo $0
是-
,所以它是一个登录 shell。
- 相同的/dev/pts/X用来(在哪里
结论:
- 创建新的 pty 不会自动在 utmp 中创建条目(?)
问题:
- 如果
who
显示当前登录用户的列表,那么它应该显示每个登录 shell 的条目(?)。但它不显示root用户登录的条目su -
,为什么?
编辑:此时我可以得出的另一件事是:“它必须是一个新的 pty/tty 和一个登录 shell,然后才在 utmp 中创建一个新条目”
答案1
首先,who
不关心登录 shell 或类似的东西。它只是转储utmp
条目。非登录终端可以有入口;对于图形会话;用于 FTP 连接(具有完全虚构的 tty“线路”名称);几乎任何事情。
二、创建utmp条目手动– 只有当处理您的登录的程序调用 时,您才会获得一个条目pututline(…)
。例如,sshd 总是这样做,终端模拟器经常这样做(但并非总是如此),并且su
从不这样做。
(请记住,它su
不会分配新的 pty,因此它也无法添加 utmp 条目 - 否则您最终会得到同一个 tty 的多个条目,这可能会混淆一些程序。)