单独的系统用户和服务用户
我们都知道我们有系统用户和服务用户。 我正在寻找一种方法将它们分离为系统用户和服务用户列表。
有什么办法吗?
基于gid
,系统用户和服务用户可以分开如下,
/etc/passwd
包含所有用户的列表以及一些其他信息。 服务用户或真实用户的gid
大于或等于1000.因此,可以获得真实用户列表,
awk -F: '($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd
系统用户列表( gid
<1000)也可以提取为,
awk -F: '($3<1000){print $1}' /etc/passwd
这个怎么运作
/etc/passwd
的内容是这样的,
root:x:0:0:root:/root:/bin/bash ... souravc:x:1001:1001:Souravc:/home/souravc:/bin/bash
当使用带-F:
awk
时-F:
它将一行的内容分成几个字段,处理:
作为字段分隔符。 第一个字段包含用户名,第三个字段包含gid
。
因此,提取真实用户awk
只是检查第三个字段的值大于等于1000并且它不是没有用户并且打印第一个字段即用户名。
要列出所有系统用户,只需检查gid
小于1000并打印用户名。
编辑
如您想在真实用户列表中列出root
(gid = 0)。 获得真正的用户,
awk -F: '($3==0)||($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd
获取系统用户,
awk -F: '($3<1000)&&($1!="root"){print $1}' /etc/passwd
注意我总是忽略nobody
用户。
列出本地(系统用户)而不是可以登录并且homedir和GID小于1000
cat /etc/passwd | cut -d: -f 1,3,6 | grep "[1-9][0-9][0-9][0-9]" | grep "/home" | cut -d: -f1
列出所有其他用户:(主要是系统用户并且GID小于1000):
cat /etc/passwd | cut -d: -f 1,3,6 | grep -v "[1-9][0-9][0-9][0-9]" | cut -d: -f1