分离系统用户和服务用户

rɑː*_*dʒɑ 8 user-management

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

有什么办法吗?

sou*_* c. 7

基于gid,系统用户和服务用户可以分离如下,

/etc/passwd包含所有用户的列表以及一些其他信息。服务用户或真实用户gid大于或等于1000。因此可以得到真实用户列表为,

awk -F: '($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd
Run Code Online (Sandbox Code Playgroud)

gid可以提取系统用户列表(<1000),

awk -F: '($3<1000){print $1}' /etc/passwd
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

的内容/etc/passwd就像,

    root:x:0:0:root:/root:/bin/bash
    ...
    souravc:x:1001:1001:Souravc:/home/souravc:/bin/bash
Run Code Online (Sandbox Code Playgroud)

awk-F:它一起使用时,将一行的内容拆分为多个字段,:作为字段分隔符。第一个字段包含用户名,第三个字段包含gid.

因此,要提取真实用户,awk只需检查第三个字段的值是否大于等于 1000,并且它不是没有人用户并打印第一个字段,即用户名。

要列出所有系统用户,它只检查gid小于 1000 并打印用户名。

编辑

如您想root在真实用户列表中列出(gid = 0)。获得真正的用户,

    root:x:0:0:root:/root:/bin/bash
    ...
    souravc:x:1001:1001:Souravc:/home/souravc:/bin/bash
Run Code Online (Sandbox Code Playgroud)

获取系统用户,

awk -F: '($3==0)||($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd
Run Code Online (Sandbox Code Playgroud)

注意我总是忽略nobody用户。