So finden Sie ein bestimmtes Protokoll von einem Server für eine bestimmte Zeit und komprimieren Protokolle nur für diese Zeit

So finden Sie ein bestimmtes Protokoll von einem Server für eine bestimmte Zeit und komprimieren Protokolle nur für diese Zeit

Ich habe einen Befehl für die obige Frage. Kann mir bitte jemand den folgenden Befehl erklären?

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

Antwort1

Das Skript, auf das Sie sich beziehen, ist überhaupt nicht gut geschrieben und funktioniert möglicherweise nicht wie erwartet.

Hier ist eine Aufschlüsselung seiner Funktionsweise:

DATUM=date +%m%d%Y-%H%M%S

Speichern Sie das aktuelle Datum in DATE in einem Format wie „10192016-171249“. Weitere Informationen finden Sie unter „man date“. Dies ist übrigens nicht die beste Möglichkeit, ein Datum/eine Uhrzeit zu speichern. Aus Gründen der schnellen Referenz/Sortierung ist die Verwendung des Formats JJJJMMTT für den Datumsteil viel besser.

ls -lt *.log*

Dadurch wird eine Verzeichnisliste aller Dateien im aktuellen Verzeichnis erstellt, die dem Muster „*.log*“ entsprechen. Das könnte beispielsweise so aussehen:

-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. Oktober"

Anschließend werden nur die Zeilen „extrahiert“, in denen „Oct 11“ vorkommt. Das ergibt:

-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:

Dann werden erneut nur diejenigen extrahiert, bei denen „12:“ oder „13:“ oder „14“ vorhanden ist: (auch hier sehr schlecht gemacht, da dies nicht nur auf das Stundenfeld, sondern auch auf die Minuten- und Sekundenfelder zutrifft)

-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 '{drucken $9}'

Aus den verbleibenden Zeilen wird das 9. Element (der Dateiname) extrahiert:

fontconfig.log

Zip-Protokolle_ hostname_${DATE}.zip $i

Mithilfe einer „for“-Schleife um den obigen Befehl wird jede dieser Dateien dann zu einer ZIP-Datei mit dem Namen hinzugefügt:

logs_`hostname`_${DATE}.zip

wobei hostnameder Name Ihres Hosts und „${DATE}“ das zuvor gespeicherte DATUM ist. Wenn Ihr Hostname also BLUERAY ist und Sie das oben angegebene DATUM verwenden, erhalten Sie eine Datei mit dem Namen:

logs_BLUERAY_10192016-171249.zip

Auch dieses Skript ist sehr schlecht geschrieben und Sie sollten es (oder ein anderes desselben Autors) auf keinen Fall verwenden, um das Schreiben von Skripten zu erlernen ...

verwandte Informationen