![为什么当我使用 who | wc -l 时终端会响应“2”](https://linux22.com/image/1119869/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%BD%93%E6%88%91%E4%BD%BF%E7%94%A8%20who%20%7C%20wc%20-l%20%E6%97%B6%E7%BB%88%E7%AB%AF%E4%BC%9A%E5%93%8D%E5%BA%94%E2%80%9C2%E2%80%9D.png)
标题说明了一切。我是计算机上的唯一用户,但当我输入 who | wc -l 时,它响应 2。这是为什么?
答案1
这是因为打开一个终端(物理或虚拟)就算是一个用户登录。所以当你登录账户时,你就登录了一次,当你打开终端时,无论是使用Ctrl++ (以下称为虚拟终端)还是使用Alt++ (以下称为物理终端),你每次登录时都需再次登录一次。tCtrlAltF{1-7}
这在 的输出中清晰地显示出来who
。第二列显示用户如何登录。如果您使用虚拟终端登录,您将看到pts/<no>
您使用哪些代表/dev/pts
登录,哪些代表使用虚拟终端登录。如果您使用物理终端登录,您将看到tty<no>
,这代表您使用/dev/tty
哪些代表登录。
为了澄清这一点,请看以下情况:
我使用图形界面登录过一次,使用虚拟终端登录过一次,使用物理终端登录过一次,所以输出是:
jobin tty1 2014-03-31 18:05
jobin :0 2014-03-31 16:58 (:0)
jobin pts/1 2014-03-31 17:25 (:0)
第一行表示物理终端登录,第二行表示图形终端登录,第三行表示虚拟终端登录。
所以您看到“2”的原因是因为您已经登录到图形界面以及终端(不太确定您拥有的是物理终端还是虚拟终端)。
答案2
who
每行显示当前登录用户的详细信息,如下所示
aditya@aditya-desktop:~$ who
aditya tty7 2014-03-31 16:45 (:0)
aditya pts/2 2014-03-31 17:51 (:0)
aditya@aditya-desktop:~$
wc -l
给出的行数。who|wc -l
我们已经将命令通过管道传输。也就是说,我们将的输出转发给who
命令wc -l
。wc -l
将测量命令给出的输出中的行数who
,即 2。
aditya@aditya-desktop:~$ who|wc -l
2
aditya@aditya-desktop:~$
欲了解更多信息,您可以输入以下代码阅读手册man who
:man wc
答案3
从info coreutils 'who invocation'
:
If given no non-option arguments, `who' prints the following information for each user currently logged on: login name, terminal line, login time, and remote hostname or X display.
因此,如果您登录了多个地方,而没有其他人登录,则 的输出who | wc -l
将是您登录的地方的数量。如果您打开更多终端窗口,您将看到这个数字会增加。如果您在终端窗口中打开更多选项卡,情况也是如此。
如果您是计算机上的唯一用户,并且想要查看系统中当前登录的唯一用户数量,您可以使用:
who is using_my_pc | wc -l
不,这是个玩笑(这很有趣,因为在这种情况下它起作用了)。看看它info coreutils 'who invocation'
到底是什么意思。查看系统中当前登录的唯一用户数量的正确方法是:
who | cut -d' ' -f1 | uniq | wc -l
答案4
who
命令显示有关当前登录的用户的信息。
avinash@avinash-Lenovo-IdeaPad-Z500:~$ who
avinash tty7 2014-03-31 16:52 (:0)
avinash pts/1 2014-03-31 17:59 (:0)
tty7
代表上述用户正在运行 X GUI 会话。第二个pts/1
代表上述用户也在运行 gnome-terminal 会话。
就像@Aditya 所说的那样,wc -l
计算标准输入中的行数。who | wc -l
在这个命令中,who 命令的输出被作为第二个wc -l
命令的输入。因此,依次wc -l
计算标准输入中存在的行数(2)并显示(stdout)最终结果。
要查看已登录的用户数量,请运行带有以下参数的who
命令。-q
avinash@avinash-Lenovo-IdeaPad-Z500:~$ who -q
avinash avinash avinash
# users=3
从man who
-q, --count
all login names and number of users logged on