为什么我的登录用户数比实际用户数多?

为什么我的登录用户数比实际用户数多?

在旧的 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”的附加行,然后它将始终显示另一行。

相关内容