Я пытаюсь получить систему oracle 6.2 (такую же, как redhat 6.2), чтобы найти всех пользователей в системе, затем взять имя пользователя каждого обнаруженного пользователя и запросить членство в группе каждого пользователя индивидуально и выводить в файл один раз в месяц , поэтому мне нужно написать команду как сценарий оболочки и запланировать
Я новичок в Linux, и, кажется, есть много способов вызвать пользователей и составить группы. В настоящее время я использую приведенный ниже список для вывода списка пользователей в файл.
getent passwd >> /home/username/users.txt
Я действительно не знаю, что делать дальше. Вывод всегда помещает имя пользователя первым, поэтому я хотел бы найти в файле первое слово каждой строки и запустить
getent group | grep %
где% - это первое слово каждой строки, и повторять этот процесс до тех пор, пока не будет достигнут конец файла, затем остановитесь и выгрузите вывод в сетевое расположение (общий ресурс Windows), который будет \ windowsserver \ share \ usersandgroups.csv поэтому я могу открыть файл в Excel и, надеюсь, иметь имя пользователя в ячейке A1, а затем каждая группа в своих ячейках (B1, C1, D1 и т. д.) с каждым пользователем в новой строке. Если getent не идеален для этого, может ли кто-нибудь предложить команду, которая выполнит эту работу? Мне нужны имена пользователей и групп, а не идентификаторы.
Мне не обязательно выводить пользователей в файл, поэтому, если этого шага можно избежать, это будет полезно.
Спасибо всем, кто может помочь.
Вот один лайнер:
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
(например).