Как отслеживать файл журнала по времени?

Я не соглашаюсь, что это невозможно, просто очень очень трудно, и, и при этом я никогда не делал этого от Linux:

Когда файлы удалены, они на самом деле не удалены. То, что происходит, - то, что пространство, что они были на жестком диске, является видом сброса, так, чтобы, если компьютер пытается записать данные там, ничто не жаловалось. Обычно данные по Вашему жесткому диску, Вы думали, что удалили, могут быть там почти год спустя. Или по крайней мере, это - мой опыт в машине Windows. Работает ли это тот же путь от командной строки на Linux, я не уверен, но Вам, вероятно, был бы нужен отдельный Живой CD для открытия раздела как этот, и нет также никакой гарантии, которая файлы все еще там. Я сделал это на Windows XP несколько раз с помощью Нулевого Восстановления Предположения. Я уверен, что существует подобный инструмент вокруг, если Вы выглядите достаточно твердыми.

6
06.08.2015, 20:06
2 ответа

Вы можете просто использовать комбинацию grep и tail в oneliner.

grep "2014-01-01 21:" log.txt; tail -f log.txt

Он напечатает все, начиная с этого часа, и продолжит следить.

или вы также можете использовать awk, чтобы распечатать все от начала определенного часа до конца файла, и продолжать следить за ним, это позволит вам отслеживать последние несколько часов, если необходимо.

awk '/2014-01-01 21:/' log.txt; tail -f log.txt
4
27.01.2020, 20:28
onehourago=$(date --date='1 hours ago' +"%b%e %H:%M:%S") 
echo $onehourago | cat /var/log/auth.log - | sort | sed "1,/$onehourago/d"

Промежуточный вывод без команды sed:

Aug  7 00:00:03 thinkpux CRON[25475]: pam_unix(cron:session): session closed for user stefan
Aug  7 00:17:01 thinkpux CRON[25504]: pam_unix(cron:session): session closed for user root
Aug  7 00:17:01 thinkpux CRON[25504]: pam_unix(cron:session): session opened for user root by (uid=0)
Aug 7 00:19:33
Aug  7 01:00:02 thinkpux CRON[25652]: pam_unix(cron:session): session opened for user stefan by (uid=0)
Aug  7 01:00:03 thinkpux CRON[25652]: pam_unix(cron:session): session closed for user stefan
Aug  7 01:17:01 thinkpux CRON[25885]: pam_unix(cron:session): session closed for user root
Aug  7 01:17:01 thinkpux CRON[25885]: pam_unix(cron:session): session opened for user root by (uid=0)

Вывод:

Aug  7 01:00:02 thinkpux CRON[25652]: pam_unix(cron:session): session opened for user stefan by (uid=0)
Aug  7 01:00:03 thinkpux CRON[25652]: pam_unix(cron:session): session closed for user stefan
Aug  7 01:17:01 thinkpux CRON[25885]: pam_unix(cron:session): session closed for user root
Aug  7 01:17:01 thinkpux CRON[25885]: pam_unix(cron:session): session opened for user root by (uid=0)

Примечание. Сначала я построил дату с + "% b% e% H:% M: % S "(обратите внимание на пробел между% b и% e, но echo сжимает два пробела в один. Кажется, что поиск с помощью sed ищет два пробела и не находит выражения, поэтому как-то сложно определить, был ли день месяц имеет две или одну цифру. Однако сортировка кажется агностической в ​​отношении лишнего / отсутствующего пробела. Может быть, есть переключатель bash для предотвращения сжатия? Однако - ваш формат даты отличается, и поэтому вы не пострадали, но мне пришлось проверить это как-то приблизиться, и ученики могут попасть в ту же ловушку.

Таким образом, общая идея состоит в том, чтобы получить дату / время 1 час назад, отформатировать ее, как в файле журнала, добавить чистую дату в файл журнала и отсортировать это сочетание, а затем удалить с помощью sed все, что угодно до чистой даты.

Не смешно запоминать и печатать, но вы можете поместить это в сценарий и / или функцию.

1
27.01.2020, 20:28

Теги

Похожие вопросы