При обработке файлов журналов, некоторые из них в конечном итоге, как gzipped файлы, logrotate
а другие нет. Поэтому, когда вы пытаетесь что-то вроде этого:
$ zcat *
в итоге вы получите командную строку, zcat xyz.log xyz.log.1 xyz.log.2.gz xyz.log.3.gz
а затем:
gzip: xyz.log: not in gzip format
Есть ли инструмент, который будет принимать волшебные байты, аналогично тому, как file
работает, и использовать zcat
или в cat
зависимости от результата, чтобы я мог, например, направить вывод grep
?
NB: я знаю, что могу написать сценарий, но я спрашиваю, есть ли уже инструмент.
text-processing
cat
gzip
0xC0000022L
источник
источник
Попробуйте это с помощью
-f
или--force
:Так
zcat
как это простой скрипт, который запускаетсяс длинными вариантами, которые будут переводить в
и согласно
man gzip
(подчеркните мое):Также:
Вы можете использовать
zgrep
для этого:хотя см. комментарий Стефана ниже.
источник
zless
решению. Ницца и +1.zless
иzgrep
являются сценариями, которые вызываютgzip -cdfq
(то естьzcat -fq
).Я использую точно для той же цели:
источник
Для ztools (zcat, zgrep, ..) существует встроенная замена zutils, которая объединяет все инструменты декомпрессии независимо от серверной части. Таким образом, с помощью одной и той же команды вы можете прозрачно читать обычные, lzma, gzipped, xz файлы.
Он доступен в Debian Wheezy или новее, вероятно, в Redhat / Centos.
Страница проекта находится здесь nongnu.org
Сообщение в блоге, объясняющее использование утилиты здесь ( noone.org )
источник
Это прекрасно работает в RHEL 5.x, где zcat - бинарный файл. Сбой в RHEL 6.x (и Ubuntu 12.x), где zcat - это скрипт. Это используется для работы в порядке.
Я бы вообще не использовал zcat, но zgrep также не будет правильно обрабатывать несжатые файлы.
источник
Открывается как сжатый, так и несжатый, в хронологическом порядке.
источник
ls -rv
чтобы избежатьtac
. Для файлов журналов,less $(ls -rv syslog*)
с вашим установленнымLESSOPEN
env var правильно работает. Вы можете выполнять поиск по файлам,esc-n
чтобы найти следующее совпадение, игнорируя границы файлов.zsh
:zcat -f syslog*(nOn)
Как насчет обертки?
источник
Скопируйте и вставьте (или поместите в конец
~/.bashrc
файла) эту функцию bash :Теперь вы можете ввести, например ,
logs /var/log/syslog
или ,logs /var/log/nginx/access.log
чтобы увидеть все те системный журнал или Nginx лог сообщений от старых к новым с менее .Затем вы можете искать что-то набрав
/something
и нажавn
для следующего .источник
Существует прекрасный Perl-скрипт, который точно делает это. Это logresolvemerge.pl из проекта awstats: http://www.awstats.org/docs/awstats_tools.html
Logresolvemerge позволяет получить один уникальный выходной файл журнала, отсортированный по дате, построенный из определенных источников:
Вывод находится на STDOUT, так что вы можете использовать его в дополнительных процессах.
источник
Основываясь на ответе @ Ryan, следующее получит все отсортированные файлы, отсортированные по алфавиту, затем получит текущий файл, разархивирует его, если необходимо, и
less
их:cat <(ls mylog.log-* | sort) <(ls mylog.log) | xargs zcat -f | less
или если вы хотите получить их все в виде непрерывного потока, вы можете
tail
их и, необязательно, направить в другой процессcat <(ls mylog.log-* | sort | xargs zcat -f) <(tail -f -n +0 mylog.log)
Я должен отметить, что это предназначено для журналов, которые чередуются ежедневно с датой, добавленной в конец файла. Если ваши журналы регистрируют нас в другом формате, вам придется изменить первую часть
cat
заявления, чтобы она соответствовала вашим требованиям .источник