在在线命令行平台中,例如 Codecademy 上的命令行平台,当我运行
for cmd in w who whoami id
do
echo $cmd
$cmd
echo =========================
echo " "
done
我明白了
w
00:52:54 up 8 days, 14:10, 0 users, load average: 3.78, 2.98, 2.69
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
=========================
who
=========================
whoami
ccuser
=========================
id
uid=1000(ccuser) gid=1000(ccuser) groups=1000(ccuser)
=========================
注意只whoami
输出id
一些东西。当我在计算机上运行相同的操作时,我看到所有命令的类似结果。
w
为什么 Codecademy 不显示和 的用户who
?这些命令有什么不同?
答案1
id
报告- 其自身进程的当前凭据;或者
- 指定用户的凭据,如从系统账户数据库。
whoami
报告其自身进程的当前凭据。who
并w
从以下位置报告活动登录会话表登录数据库。
BSD doco 指出,它whoami
完成了 的一部分工作id
,这id
使得它变得过时。
系统不必具有活动的登录会话表。在 Linux 操作系统和 BSD 上,如果该表尚未在引导时创建,或者此后已被删除,则系统将在没有该表的情况下运行。此外,登录和注销不会在 Linux 操作系统上隐式创建它。
此外,非特权用户不需要读取该表,并且该命令who
和该w
命令都不会将此报告为错误。
进一步阅读
- 乔纳森·德博因·波拉德 (2018)。Unix 登录数据库。经常给出的答案。
- 乔纳森·德博因·波拉德 (2018)。 ”登录-更新-utmpx”。 用户命令。诺什工具集。
- 伦纳特·珀特林等人。 (2018)。
systemd-update-utmp.service
。 systemd 手册页。 Freedesktop.org。 - 登录 shell 是否需要创建 utmp 条目?
- https://unix.stackexchange.com/a/409036/5132