在旧的 GNU/Linux Ubuntu 机器上,我看到类似
lorenzo@metropolis:~
$ w
09:58:18 up 651 days, 19:30, 5 users, load average: 0.28, 0.30, 0.24
问题是,我登录了其他三个会话。数量应该是四个,而不是五个。有没有什么线索可以解释为什么报告的用户数量更高?
然而,检查 lastlog 返回了正确的值:
lorenzo@metropolis:~
$ sudo last -ain 7 | grep 'still logged in' | wc -l
4
[编辑] 这是的输出who
,在另一个场合拍摄,但仍然显示两个用户,以及三个报告者w
lorenzo@metropolis:~
$ who
lorenzo pts/0 Dec 28 13:10 (XXX)
lorenzo pts/1 Dec 28 13:07 (XXX)
lorenzo@metropolis:~
$ w
13:11:15 up 651 days, 22:43, 3 users, load average: 0.49, 0.40, 0.31
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
lorenzo pts/0 XXX 13:10 0.00s 0.11s 0.00s w
lorenzo pts/1 XXX 13:07 3:09m 0.13s 0.13s -bash
我的偏执感开始发作。
[编辑] 请求更多命令
$ cat /etc/issue
Ubuntu 8.04 \n \l
$ dpkg-query -S /usr/bin/w.procps
procps: /usr/bin/w.procps
$ dpkg-query -S /usr/bin/who
coreutils: /usr/bin/who
答案1
w
使用/var/run/utmp
和/proc
文件系统(在 Linux 上),记录当前登录的用户。
last
使用/var/log/wtmp
(和/var/log/btmp
),显示如何登录。但是,并非每个程序都会正确更新这些文件,在某些系统上这些文件甚至可能不存在。
例如,在我的系统上,w
单个 GNU 屏幕会话中有 5 个登录会话:
$ w | 尾部-n +3 | wc -l 5 $ last | grep -c still\ 已记录 1
但last
只记录了一个积极的会话。deflogin=off
在 GNU screen 中设置时,甚至w
会丢失活动登录会话的跟踪并继续显示 5 个会话,尽管我刚刚在同一个 screen 会话中打开了另外 5 个窗口。
换句话说:使用例如ps
来找出有多少用户“在线”,有多少个 shell 是打开的等等。它将提供更准确的结果,因为它不依赖于(陈旧的)统计文件/var/log/utmp
。
答案2
在我的例子中,w
返回 Xsession 加上打开的终端
$ w
12:05:40 up 3:47, 2 users, load average: 0.02, 0.15, 0.16
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
userXX tty7 :0 08:18 3:47m 13:41 0.00s /bin/sh /etc/xdg/xfce4/xinitrc -- /etc/X11/xinit/xserverrc
userXX pts/0 :0.0 12:03 0.00s 0.11s 0.00s w
这就是为什么多了一个用户。你有同样的情况吗?w
如果不是这样,你能给出完整的结果吗?
答案3
当仅使用“w”时,它将显示标题加上您当前正在启动的命令,因此它将始终显示您的用户执行“w”的附加行,然后它将始终显示另一行。