Fork me on GitHub

【问题】统计系统上有多少个用户

今天突发奇想冒出这么个问题,觉得很有必要写篇文章纪念一下。

以前我都是tail /etc/passwd,手动去查有多少个用户(包括活跃的 和 不活跃的),但是这种方法太蠢了。于是解决问题的漫长之旅开始了。。。。。。

按照由简到难的顺序展开

统计当前系统有多少活跃用户(没登陆的不算)

借助who命令

who显示登陆到Linux的每个会话

[root@localhost ~]# who
root     pts/0        2018-06-13 21:29 (192.168.80.1)
root     pts/1        2018-06-13 21:47 (192.168.80.1)
lfs      pts/2        2018-06-13 21:53 (192.168.80.1)
[root@localhost ~]# who -H
NAME     LINE         TIME             COMMENT
root     pts/0        2018-06-13 21:29 (192.168.80.1)
root     pts/1        2018-06-13 21:47 (192.168.80.1)
lfs      pts/2        2018-06-13 21:53 (192.168.80.1)

但是如果一个用户开启了多个xshell远程链接,就会有多个会话,需要过滤一下

[root@localhost ~]# who | cut -d " " -f 1|sort -u
lfs
root

然后在统计个数

[root@localhost ~]# who | cut -d " " -f 1|sort -u | wc -l
2

还有个参数-q,可以显示当前会话个数,以及用户名。但是这个参数也有个必断,如果一个用户开启了多个xshell远程链接,就会有多个会话,会产生多个相同用户名

[root@localhost ~]# who -q
root root lfs
# users=3

借助w命令

w不仅显示登陆用户详细信息,还能看到他们在干什么

[root@localhost ~]# w -h | cut -d " " -f 1 | sort -u |wc -l
2

借助ps命令

[root@localhost ~]# ps -eaho user
root
root
root
root
root
lfs
root

This command says, "show information for every process owned by any user, do not show headers, and print only the name of the user."

who仅仅显示登录到终端会话的用户,而ps会列出拥有正在允许进程的所有用户,即使他们没有打开终端。ps会包含root用户,还有可能包含其他系统用户

[root@localhost ~]# ps -eaho user | sort -u
lfs
root
[root@localhost ~]# ps -eaho user | sort -u | wc -l
2

另一个路子

[root@localhost ~]# echo $(wc -l < /etc/passwd)
22

这种方法会把所有用户(包括系统用户)统计出来

 

统计当前系统有多少用户

这个暂时想不到好方法,只能自己cat /etc/passwd来目查了。。。。

 

posted @ 2018-06-13 21:32  克拉默与矩阵  阅读(2131)  评论(0编辑  收藏  举报