今天突发奇想冒出这么个问题,觉得很有必要写篇文章纪念一下。
以前我都是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来目查了。。。。