Помогите с выводом в файл)
-
- Интересующийся
- Сообщения: 2
- Зарегистрирован: 10 ноя 2013, 22:10
- Контактная информация:
Помогите с выводом в файл)
Пропарсить файлы /etc/passwd, /etc/shadow, /etc/group так, чтоб в конечном файле можно было увидеть следующее (разделитель — Tab):
Name Password(хеш) Group HOMEDIR SHELL
User1 12 group1 /home/user1 /bin/bash
User2 334 group2 /home/uesr2 /bin/sh
Daemon * daemon /usr/sbin /bin/sh
Sshd * nougroup /var/run/sshd /usr/sbin/nologin
Name Password(хеш) Group HOMEDIR SHELL
User1 12 group1 /home/user1 /bin/bash
User2 334 group2 /home/uesr2 /bin/sh
Daemon * daemon /usr/sbin /bin/sh
Sshd * nougroup /var/run/sshd /usr/sbin/nologin
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Помогите с выводом в файл)
1. Пропарсить - это пользуясь чем?: bash, Python, Perl, C, ... на чём собираетесь делать?Zeus_Faber писал(а):Пропарсить файлы /etc/passwd, /etc/shadow, /etc/group так, чтоб в конечном файле можно было увидеть следующее (разделитель — Tab):
Name Password(хеш) Group HOMEDIR SHELL
User1 12 group1 /home/user1 /bin/bash
User2 334 group2 /home/uesr2 /bin/sh
Daemon * daemon /usr/sbin /bin/sh
Sshd * nougroup /var/run/sshd /usr/sbin/nologin
2. Во 2-й колонке для User1 и User2 - это у вас пароли (в открытом виде)? И откуда вы их собираетесь взять?
3. Пароли в /etc/shadow представлены как следы свёртки, что-то такое вида (это с реального компьютера):
Код: Выделить всё
olej:$6$/tZmrrcO$b1S4Bhu5Fn7fgAIVIGKfH23OY1nylz8AohMNoKDrgo6QF0rToEu1nhiOuh.ZXHdza.mqD6NgechUkPDJ22NBq1:15991:0:99999:7:::
-
- Интересующийся
- Сообщения: 2
- Зарегистрирован: 10 ноя 2013, 22:10
- Контактная информация:
Re: Помогите с выводом в файл)
пароли - хеш, делать - в линукс минт, в терминале
чем - bash
вывести в файл в виде таблицы
чем - bash
вывести в файл в виде таблицы
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Помогите с выводом в файл)
Собственно, задача то ваша очень простая, хоть и хлопотная и возни требует на доводку...Zeus_Faber писал(а):Пропарсить файлы /etc/passwd, /etc/shadow, /etc/group так, чтоб в конечном файле можно было увидеть следующее (разделитель — Tab):
Name Password(хеш) Group HOMEDIR SHELL
User1 12 group1 /home/user1 /bin/bash
User2 334 group2 /home/uesr2 /bin/sh
Daemon * daemon /usr/sbin /bin/sh
Sshd * nougroup /var/run/sshd /usr/sbin/nologin
К большому упрощению вашей задачи, строки в /etc/passwd и /etc/shadow совпадают не только по числу, но и по порядку расположения (по пользователям):
Код: Выделить всё
olej@notebook:~$ cat /etc/passwd | wc -l
33
olej@notebook:~$ sudo cat /etc/shadow | wc -l
33
- для N-й строки /etc/passwd взять (просто сдвинуться) такую же строку N-ю /etc/shadow;
- разделить (регулярными выражениями) строки на поля ... к упрощению, во всех файлах разделитель один - ':';
- по 4-му полю (ключу) строки /etc/passwd найти M-ю строку в /etc/group с совпадающим 3-м полем (это и есть GID) - вот это самый противный шаг, если уж вам так надо вместо GID иметь именно имя группы ... и если уж это так сильно надо, я бы делал всё в 2 прохода по итоговому файлу (см. ниже).
- и компонуйте строку в свой результирующий файл ... с разделителем TAB или каким вздумается :
- N-я строка вашего файла:
<поле #1 из N-строки /etc/passwd> + <поле #2 из N-строки /etc/shadow> + <поле #1 из M-строки /etc/group> + <поле #6 из N-строки /etc/passwd> + <поле #7 из N-строки /etc/passwd>
Но эффективный алгоритм (без поиска) был бы в 2 прохода:
1. сформировать 1-й промежуточный файл - тупым циклом по строкам /etc/passwd + /etc/shadow записать строки:
<поле #1 из /etc/passwd> + <поле #2 из /etc/shadow> + <поле #4 из /etc/passwd> (это GID) + <поле #6 из /etc/passwd> + <поле #7 из /etc/passwd>
2. 2-м проходом в простом цикле по строкам /etc/group все строки вашего 1-го промежуточного файла, где поле #3 совпадает с полем #3 из /etc/group, заменить это поле (переписывая в 2-й выходной файл) на значение поля #1 из /etc/group
Всё это элементарно просто, но долбанины будет много
Я бы это писал на Python а не bash - это будет заметно проще ... но всё зависит, конечно, от владения инструментами.
P.S. Весь ваш такой скрипт может совершенно "рассыпаться" в зависимости от дистрибутива Linux и его версии - никто не регламентировал строго назначение и порядок полей - это сохраняется только как традиция, любой дистрибьютор может это поменять (особенно во всяких новомодных Ubuntu или Mint ).
Кто сейчас на конференции
Сейчас этот форум просматривают: FAST WebCrawler [Crawler] и 4 гостя