Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Скрипт чтения  (Прочитано 933 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн prodvi

  • Автор темы
  • Активист
  • *
  • Сообщений: 433
  • Баян он и есть баян
    • Просмотр профиля
Скрипт чтения
« : 18 Октября 2013, 12:54:13 »
Добрый день, форумчане ;)
Нужно сделать такую задачу:
имеется файл со списком юзеров в системе, типа
юзер1
юзер2
...
юзерN
задача такая, что нужно создать список, когда они последний раз заходили, читая лог.
Проще всего это сделать через скрипт, т.к. юзеров много, но вот сижу и ломаю голову как? Разобью попунктно:
1 - прочитать первую строку из файла users
2 - сделать поиск по выводу команды 1 по файлу access
3 - взять последнюю строку из найденного (т.к. найденного будет много)
4 - добавить эту строку в файл out.users
5 - далее читается вторая строка и выполняются задания 2, 3, 4, и так далее, пока файл users не закончится.
Когда закончится, вывести к примеру OK и прервать задачу.
1ую команду вижу так:
sed '1!D'
или
head -1 users |tail -1
2ую, 3ю и 4ую так:
grep -w 'вывод из 1ой команды' access |tail -1 >>out.usersКогда файл заканчивается, выполнить к примеру
echo OKНо всего этого не достаточно, так как непонятно, как будет делаться цикл на следующую строку, порошу помочь  :idiot2:
« Последнее редактирование: 18 Октября 2013, 13:00:20 от prodvi »

Советское значит лучшее

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Скрипт чтения
« Ответ #1 : 18 Октября 2013, 14:01:31 »
задача такая, что нужно создать список, когда они последний раз заходили, читая лог.
Код: (bash) [Выделить]
awk -F: '{print $1}' /etc/passwd | xargs -i last -n1 {} | grep -Ev '^wtmp begins |^$'

Оффлайн prodvi

  • Автор темы
  • Активист
  • *
  • Сообщений: 433
  • Баян он и есть баян
    • Просмотр профиля
Re: Скрипт чтения
« Ответ #2 : 19 Октября 2013, 17:21:35 »
задача такая, что нужно создать список, когда они последний раз заходили, читая лог.
Код: (bash) [Выделить]
awk -F: '{print $1}' /etc/passwd | xargs -i last -n1 {} | grep -Ev '^wtmp begins |^$'
В данном случае эта команда бесполезна.
Она подходит для просмотра системных учёток, но не подходит к примеру для просмотра учёток postfix'a по логу.

Уточню - юзеров я взял к примеру, не обязательно, что мне нужно именно юзеров системы смотреть.
Хотелось бы скрипт такой: он читает 1ую строку из файла А, ищет считанное в файле В, берет из найденного последнюю строку и кладёт её в файл С, и эту операцию проделывает, пока файл А не заканчивается.
В итоге я имею файл С, в котором все найденные отфильтрованные данные.
« Последнее редактирование: 19 Октября 2013, 17:26:03 от prodvi »

Советское значит лучшее

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Скрипт чтения
« Ответ #3 : 19 Октября 2013, 18:11:56 »
...к примеру для просмотра учёток postfix'a по логу...
Уточню - юзеров я взял к примеру, не обязательно, что мне нужно именно юзеров системы смотреть.
Хотелось бы скрипт такой: он читает 1ую строку из файла А, ищет считанное в файле В, берет из найденного последнюю строку и кладёт её в файл С, и эту операцию проделывает, пока файл А не заканчивается.
В итоге я имею файл С, в котором все найденные отфильтрованные данные.
Код: (bash) [Выделить]
USERS="/etc/postfix/vmailbox" ; LOG="/var/log/maillog" ; LASTLOGIN="/tmp/lastlogin" ; awk -F@ '{print $1}' "$USERS" | while read USERNAME ; do grep -i "Login: user=<$USERNAME>" "$LOG" | sort | tail -n1 ; done >"$LASTLOGIN"

Оффлайн prodvi

  • Автор темы
  • Активист
  • *
  • Сообщений: 433
  • Баян он и есть баян
    • Просмотр профиля
Re: Скрипт чтения
« Ответ #4 : 19 Октября 2013, 22:00:25 »
Спасибо! это уже похоже на то, что нужно!
Сейчас тестирую, пока что не получается, - создаётся пустой файл.
Но чувствую, что готовый скрипт уже где-то рядом..

Советское значит лучшее

Оффлайн prodvi

  • Автор темы
  • Активист
  • *
  • Сообщений: 433
  • Баян он и есть баян
    • Просмотр профиля
Re: Скрипт чтения
« Ответ #5 : 06 Декабря 2013, 23:24:20 »
В итоге скрипт вышел в таком варианте:
#!/bin/sh
LOG="dovecot.log"
mbox='mysql -u root -p 123456 -s -N -e "SELECT username FROM postfix.mailbox"'
for i in $mbox
do grep -i "IMAP($i)" "$LOG" | sort | tail -n1 ; done > LASTLOGIN
Поясню: указываем файл лога авторизации, далее использована база данных вместо файла. Читаем юзернейм, грепаем по файлу с вычитанными данными, сортируем найденное, отрезаем последнюю строку, и так, пока не кончатся ящики в БД, когда закончатся, отрабатывается конец - все "отрезанные" tail'ом данные записываются в файл.
« Последнее редактирование: 16 Декабря 2013, 12:54:09 от prodvi »

Советское значит лучшее

 

Страница сгенерирована за 0.017 секунд. Запросов: 22.