我们都知道我们有系统用户和服务用户。我正在寻找一种方法将他们分为系统用户和服务用户列表。
有什么办法吗?
答案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
使用awk
with时-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