linux极简小知识:22、如何查看linux中的用户或所有用户【详细介绍】

337 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

/etc/passwd系统用户信息

在 Linux 中,passwd 是用于保存系统账户信息的文件。通过 /etc/passwd 可以查看系统中所有的用户。

cat /etc/passwd

# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
......省略

usermod 等命令对用户的修改都会保存到 passwd 中。

/etc/group系统用户组信息

与 passwd 对应,/etc/group文件保存的是系统中用户组的信息。

cat /etc/group

# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
......省略

查询当前可用的用户

上面直接查看 passwd 会列出所有用户及相关信息,会很混乱,可以使用如下命令,查看当前在用的可登陆系统的用户:

# cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more
root|0|0
sync|5|0
syslog|995|993
root_test|1002|1002
root_test1|1003|1003
root_test2|1004|1004

此命令来源于网络。

提取 passwd 文件中的用户名(查看所有的用户名)

cut 命令可以按“列”提取文本字符,格式为“cut [参数] 文本”。

借助这个特性,可以从/etc/passwd中提取所有的用户名。

查看下passwd的结构:

# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

如上,查看前2行的内容。其用户信息通过:分割。

head 命令用于查看文件的开头部分的内容,

常用的参数 -n 表示显示行数,默认为 10,即显示 10 行的内容。

要想仅提取用户名,使用cut命令时,用 -d 设置间隔符号(此处为:);用 -f 指定查看的列数(此处用户名为第一列)。

提取以冒号(:)为间隔符号的第一列内容:

# cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
......
avahi
root_test
root_test1
root_test2

或者,使用如下命令,可以得到相同的结果:

awk -F':' '{ print $1}' /etc/passwd

具有同样效果的命令还有 compgen -u

compgen 是 bash 的内置命令,用于显示所有可用的命令、别名和函数。

查询不允许登陆系统的用户

/etc/passwd 文件保存着用户信息,可实现对用户的配置。比如,将用户的登录终端设置为 /sbin/nologin,则该用户将不允许登陆系统。

如下,查找不允许登陆系统的用户 grep /sbin/nologin /etc/passwdgrep "/sbin/nologin" /etc/passwd

# grep /sbin/nologin /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
......省略

取巧的 ls /home

要查看Linux系统所有用户及其用户名,还有一个取巧的、简单的命令:ls /home

即:home家目录下的目录名,因为家目录下一个目录名对应一个用户名。所以可以很简单的获取到有多少用户。【但是,如果用户目录特意不创建在home下,就无法查看了】。

参考

主要参考自《Linux就该这么学》、菜鸟教程等资料。