как найти определенный журнал на сервере за определенное время и архивировать журналы только за это время

как найти определенный журнал на сервере за определенное время и архивировать журналы только за это время

У меня есть команда для вышеуказанного вопроса. Может ли кто-нибудь объяснить мне следующую команду?

DATE=`date +%m%d%Y-%H%M%S` ; for i in `ls -lt *.log* | grep "Oct 11" | grep -E '12:|13:|14:' | awk '{print $9}'`; do zip logs_`hostname`_${DATE}.zip $i; done

решение1

Скрипт, на который вы ссылаетесь, написан не очень хорошо и может работать не так, как вы ожидаете.

Вот как это делается:

ДАТА=date +%m%d%Y-%H%M%S

Сохраните текущую дату в DATE в формате типа "10192016-171249". Подробности см. в "man date". Кстати, это не лучший способ сохранить дату/время. Использование формата YYYYMMDD для части даты гораздо предпочтительнее для быстрой справки/сортировки.

ls -lt *.log*

Это возвращает список всех файлов, соответствующих шаблону "*.log*" в текущем каталоге. Например, это может быть что-то вроде:

-rw-r--r-- 1 root root  174106 Sep 30 17:28 dpkg.log.1
-rw-r--r-- 1 root root    1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm   272254 Oct 11 11:28 kern.log.4.gz
-rw-r----- 1 root adm   272254 Oct 11 17:14 kernXX.log.1.gz
-rw-r----- 1 root adm      414 Sep 29 18:09 user.log.4.gz
-rw-r--r-- 1 root root     209 Sep 26 14:18 chipsee_clone.log
-rw-r--r-- 1 root root    1333 Apr  9  2015 pm-powersave.log.1

grep "11 окт"

Затем он «извлекает» только те строки, где присутствует «11 октября», что дает:

-rw-r--r-- 1 root root    1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm   272254 Oct 11 11:28 kern.log.4.gz
-rw-r----- 1 root adm   272254 Oct 11 17:14 kernXX.log.1.gz

grep -E '12:|13:|14:

Затем он снова извлекает только те, где присутствуют «12:» или «13:» или «14»: (опять же очень плохо сделано, поскольку это относится не только к полю часов, но и к полям минут и секунд)

-rw-r--r-- 1 root root    1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm   272254 Oct 11 17:14 kernXX.log.1.gz

awk '{print $9}'

Из оставшихся строк он извлекает 9-й элемент (имя файла):

fontconfig.log

zip-логи_ hostname_${ДАТА}.zip $i

Используя цикл «for» вокруг указанной выше команды, каждый из этих файлов затем добавляется в zip-файл с именем:

logs_`hostname`_${DATE}.zip

где hostname- имя вашего хоста, а "${DATE}" - это ДАТА, сохраненная ранее. Так что если имя вашего хоста - BLUERAY и используя ДАТУ выше, вы получите файл с именем:

logs_BLUERAY_10192016-171249.zip

Опять же, этот сценарий написан очень плохо, и вам определенно не следует использовать его (или любой другой сценарий, написанный тем же автором) для обучения написанию сценариев...

Связанный контент