单独的系统用户和服务用户

我们都知道我们有系统用户和服务用户。 我正在寻找一种方法将它们分离为系统用户和服务用户列表。

有什么办法吗?

基于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