![将用户和组成员身份转储到文件中](https://linux22.com/image/649655/%E5%B0%86%E7%94%A8%E6%88%B7%E5%92%8C%E7%BB%84%E6%88%90%E5%91%98%E8%BA%AB%E4%BB%BD%E8%BD%AC%E5%82%A8%E5%88%B0%E6%96%87%E4%BB%B6%E4%B8%AD.png)
我正在尝试让 oracle 6.2 系统(与 redhat 6.2 相同)查找系统上的所有用户,然后获取发现的每个用户的用户名并分别查询每个用户的组成员身份,并每月一次输出到文件中,因此我需要将命令编写为 shell 脚本并计划
我对 Linux 还很陌生,似乎有很多方法可以调用用户和组成员身份。我目前使用下面的方法将用户列表输出到文件中。
getent passwd >> /home/username/users.txt
我真的不知道下一步该做什么。输出总是把用户名放在第一位,所以我想在文件中查找每一行的第一个单词,然后运行
getent group | grep %
其中 % 是每行的第一个字,并重复该过程直到到达文件末尾,然后停止,并将输出转储到网络位置(windows 共享),即 \windowsserver\share\usersandgroups.csv,这样我就可以在 excel 中打开文件,并希望将用户名放在单元格 A1 中,然后是每个组在他们自己的单元格(B1、C1、D1 等)中,每个用户在新行上。如果 getent 不适用于此,有人可以建议一个可以完成这项工作的命令吗?我需要用户和组的名称,而不是 ID。
我不一定需要将用户输出到文件,因此如果可以避免该步骤,那将会很有用。
感谢所有能提供帮助的人。
答案1
以下是一行代码:
getent passwd | awk -F ':' {'print $1'} | xargs -I {} groups {} | sed 's/ : /:/g' | tr ' ' ','
这将直接转储到控制台,如下所示:
pulse:pulse
shearn89:shearn89,apache,monit,wireshark
更新:要以“纯”.csv 格式获取此文件,您可以使用以下命令:
getent passwd | awk -F ':' {'print $1'} | xargs -I {} groups {} | sed 's/ : /,/g' | tr ' ' ','
这将为您提供user,group1,group2,group3
,因此对于仅在“他们”组中的用户,您将获得pulse,pulse
(例如)。