分离系统用户和服务用户

分离系统用户和服务用户

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

有什么办法吗?

答案1

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

使用awkwith时-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用户。

答案2

列出可以登录且主目录和 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

答案3

nix 系统上的实际用户(root 除外)应该有一个已识别的主目录。因此,要查找所有这些用户和 root:

cat /etc/passwd | egrep '/root|/home' | cut -d":" -f1

相关内容