如何在 UNIX 系统中列出所有用户及其用户名和组名?
我要获取报告表格/etc/passwd
文件和/etc/group
文件
在 passwd 文件中,我只会获得 GIDS,但我也想从 获得组名/etc/group
,它应该出现在一份报告中,就像我想在下面提到的 Fotomat 一样
用户名(用户ID),组名,
答案1
与单awk
命令:
awk -F':' 'NR==FNR{ a[$3]=$1; next }{ print $1", "a[$4] }' /etc/group /etc/passwd
-F':'
- 字段分隔符NR==FNR{ a[$3]=$1; next }
- 处理第一个输入文件(即/etc/group
):a[$3]=$1
- 捕获团队名字$1
使用组标识符$3
作为数组a
键next
- 跳转到下一条记录
{ print $1", "a[$4] }
- 第二个输入文件的操作(即/etc/passwd
):$1
- 第一个字段;表明用户名a[$4]
- 得到团队名字按组 ID(由 field 表示$4
)
答案2
以下对 GID 上的两个文件进行关系 JOIN,并输出用户名和组名以及:
中间值:
join -t : -1 4 -2 3 -o 1.1,2.1 \
<( sort -t : -k4,4 /etc/passwd ) \
<( sort -t : -k3,3 /etc/group )
GID 位于passwd
文件的第 4 列和文件的第 3 列中group
。
使用-1
和-2
指定两个输入文件中的连接字段,使用-o
指定要从每个文件输出的字段(每个文件的第一个字段)。
连接字段上每个文件的排序是join
工作所必需的。
为了得到这个精确的格式要求,只需通过管道传输即可,sed 's/:/, /'
用逗号和空格替换冒号。