Suche nach Dateien mit dem Zeitbereich fileA und fileB

Suche nach Dateien mit dem Zeitbereich fileA und fileB

Ich arbeite an einem Skript, in dem ich Eingaben wie Zeit und Ordnername erhalte. Ich muss eine Datei (snort.log.*) finden, die in den von meinem Benutzer eingegebenen Zeitraum fällt (er sieht den fettgedruckten Zeitstempel der Warndatei und gibt diese Zeit für die eigentliche Datei snort.log.** ein, die die Details des Angriffs enthält, und die Warndatei enthält nur die Metadaten). Hier ist ein Verzeichnisbeispiel

[jump1@widids01 snort-3]# ls -ltr | Schwanz -6
-rwxr-x--- 1 schnauben schnauben 301731 2. Feb 18:18 snort.log.1517557015
-rwxr-x--- 1 schnauben schnauben 5720853 5. Feb. 21:11 snort.log.1517563475
-rwxr-x--- 1 schnauben schnauben 3566073 7. Feb. 16:00 snort.log.1517832965
-rwxr-x--- 1 schnauben schnauben 18999 7. Feb. 20:46 snort.log.1518003111
-rwxr-x--- 1 schnauben schnauben 20705098 Feb 15 19:00 snort.log.1518004113
-rw------- 1 schnauben schnauben 357271 15. Feb 22:22 snort.log.1518688923
-rwxr-x--- 1 schnauben schnauben 50782147 Feb 15 22:22 Alarm
[jump1@widids01 snort-3]# tail -3 Alarm
15.02.-18:22:02.204655   [1:2403380:38412] ET CINS Active Threat Intelligence Schlechte Reputation IP TCP-Gruppe 41 [Klassifizierung: Sonstiger Angriff] [Priorität: 2] {TCP} 
15.02.-22:22:03.335107 [1:2403408:38412] ET CINS Active Threat Intelligence Schlechte Reputation IP TCP-Gruppe 55 [Klassifizierung: Sonstiger Angriff] [Priorität: 2] {TCP} 
15.02.-22:22:03.335107   [1:2403408:38412] ET CINS Active Threat Intelligence Schlechte Reputation IP TCP-Gruppe 55 [Klassifizierung: Sonstiger Angriff] [Priorität: 2] {TCP}

Ich stehe vor den Problemen hier, das snort.log.[epoch]heißt [epoch], die Datei wird generiert, wenn der Benutzer also

Testfall1:

time:2015-02-15-22:28:02 

wie man ihm die Übereinstimmung snort.log.filemit den Angaben gibt, die die Angriffsdaten enthalten

Testfall2:

time:2015-02-15-18:22:02

wie man ihm die Übereinstimmung snort.log.filemit den Angaben gibt, die die Angriffsdaten enthalten

Ich habe es versucht, aber find . -newermt "2018-02-15 18:38:00" ! -newermt "2018-02-15 18:39:00"ich bekomme keine richtige Ausgabe.

Antwort1

Angenommen, Sie haben eine Eingabe wie diese:

time="time:2015-02-15-18:22:02"

Anschließend können Sie es in einen Unix-Zeitstempel (Sekunden seit Epoche) umwandeln und mit folgendem Befehl in einer Variablen speichern timestamp:

time=$(date -d$(<<<"$time" sed 's/time:\(.*\)-/\1T/') +%s)

Ich verwende sedhier, um das Präfix loszuwerden time:und den Doppelpunkt zwischen Datum und Uhrzeit zu ändern in T(ISO 8601), datewird dann verwendet, um den Zeitstempel in Sekunden seit Epoche umzurechnen.

Je nachdem, was dieser Zeitstempel darstellt, können Sie dann findden Dateinamen des Protokolls ausgeben:

  • Wenn der Dateiname bereits den Zeitstempel enthält, können Sie snort.log.$timedirekt verwenden

  • wenn es die Änderungszeit der Datei ist:

    find . -type f -name "*snort.log.*" -newermt @$(($time-1)) ! -newermt @$time
    

    Dadurch werden alle Protokolldateien mit einer Änderungszeit zwischen time-1 Sekunde und gefunden time.

  • Wenn Sie die älteste Protokolldatei nach dem angegebenen Zeitstempel suchen müssen, können Sie sortund verwenden head:

    find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -print0 | sort -z | head -zn1
    
  • wenn Sie die Protokolldatei finden müssen, die (auf irgendeine Weise)enthältden angegebenen Zeitstempel verwenden grep:

    grep -l $time *
    

    Wenn Sie viele lange Protokolldateien haben, kombinieren Sie dies möglicherweise mit findund/oder parallelum es schneller zu machen, z. B.:

    find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -exec grep -l $time {} +
    

verwandte Informationen