允许用户生成 Linux 服务器上授权用户的所有用户名列表的命令是什么?我努力了
getent passwd | cut -d : -f 1 | xargs groups
和
less /etc/passwd
和
grep 'x:0:' /etc/passwd
和
getent passwd
和
grep "/bin/bash" /etc/passwd | cut -d: -f1
但以上都没有给我我想要的东西,这只是一个用户名列表。
任何帮助将不胜感激
答案1
使用您的第一次尝试,但删除| xargs groups
.不过,实际上,这已经足够基本了,不太适合这个网站......
答案2
awk(1) 是另一个有用的工具。 awk 能够根据指定的分隔符从文本行中解析各个字段。对于 /etc/passwd,该分隔符是冒号,因此我们在 awk 命令行上传递“-F:”。同样,由于用户名是该行的第一个字段,而 awk 编号字段从 1 开始,因此我们规定“print $1”来告诉 awk 打印每行的第一个字段。
awk -F: '{ print $1 }' < /etc/passwd
这可以轻松地适应打印 passwd 文件中的任何字段。以下是每个用户名的列表(字段 1),后跟一个空格,然后是他们的登录 shell(字段 7):
awk -F: '{ print $1, $7 }' < /etc/passwd
答案3
这将按拥有 shell 的用户过滤用户:
getent passwd | egrep '(/bin/bash)|(/bin/zsh)|(/bin/sh)' | cut -f1 -d:
答案4
您已要求提供授权用户列表,并表示您的意思是将此列表作为所有用户列表的子集,但您尚未确定要使用什么标准来区分授权用户和未授权用户。
系统(Unix 和 Windows)通常带有预定义的标准内置用户:Unix 中的 、root
和bin
;、、和在 Windows 上。在 Unix 上,“真实”用户(分配给真实的人)通常具有 GID ≥ 500 和.系统用户通常不符合这两个标准。因此我们可以列出符合这些条件的用户mail
news
Administrator
SYSTEM
LOCAL SERVICE
TrustedInstaller
/home
/etc/passwd
awk -F: '$6 ~ /^\/home/ && $3 >= 500 {print $1}' /etc/passwd
如果getent passwd
产生不在 中的用户/etc/passwd
,您可以将他们连接起来:
getent passwd | awk -F: '$6 ~ /^\/home/ && $3 >= 500 {print $1}'
或将它们组合起来:
getent passwd | sort -u - /etc/passwd | awk -F: '$6 ~ /^\/home/ && $3 >= 500 {print $1}'