GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So filtern Sie Protokolldateieinträge basierend auf dem Datumsbereich

Wenn Sie beim systematischen Lesen von Protokolldateien unter Linux auf Schwierigkeiten stoßen. Dann sind Sie hier genau richtig. Einfach Katze machen Das Lesen einer Protokolldatei ist eine Art grundlegende Möglichkeit, eine Protokolldatei zu untersuchen. Wenn Sie Daten jedoch organisiert nach Zeit filtern möchten, verwenden wir awk , grep und sed Befehle.

Das awk ist ein beliebtes Befehlszeilentool, das verwendet wird, um Daten in Dateien zu manipulieren und einen Bericht basierend auf einem bestimmten Muster im Linux-System zu erstellen. Während grep ist ein einfaches Musterwerkzeug, das mithilfe eines regulären Ausdrucks nach Mustern sucht.

Heute werden wir /var/log/syslog filtern Datei basierend auf dem Datumsbereich unter Verwendung von awk und grep Befehlszeilentools.

Daten mit dem Awk-Befehl filtern

Zuerst filtern wir die Syslog-Datei basierend auf dem Zeitbereich mit dem awk Befehl wie gezeigt.

$ sudo awk -v start=07:00 -v stop=19:00 'start <=$2 &&$2  
Beispielausgabe
Dec 11 19:39:19 LINUX dbus-daemon[2742]:[session uid=1000 pid=2742] Aktivierung über systemd:service name='org.freedesktop.Tracker1' unit='tracker-store.service' angefordert von ':1.3' (uid=1000 pid=2740 comm="/usr/libexec/tracker-miner-fs " label="unconfined") 11. Dezember 19:39:19 LINUX systemd[2727]:Starten der Tracker-Metadaten-Datenbank Store and Lookup Manager ... 11. Dezember 19:39:19 LINUX systemd [1]:session-23.scope:Erfolgreich 2742] Der Dienst „org.freedesktop.Tracker1“ wurde erfolgreich aktiviert

Ersetzen Sie start=HH:MM mit Startstunde und -minute, stop=HH:MM mit abschließender Stunde und Minute.

Wenn Sie das Protokoll einfacher und einfacher überprüfen möchten, können Sie dem grep folgen Befehlsdienstprogramm.

Daten mit dem Grep-Befehl filtern

Ich zeige ein paar Beispiele mit grep B. Ich möchte das Protokoll für Heute überprüfen, dann übergebe ich den folgenden Befehl.

$ sudo grep -E " Dec 11" /var/log/syslog
Beispielausgabe
Dec 11 12:07:35 LINUX /usr/libexec/gdm-x-session[1231]:(==) Protokolldatei:„/var/lib/gdm3/.local/share/xorg/Xorg.0 .log", Zeit:Fr. 11. Dez. 12:07:35 2020. Dez. 11 12:08:39 LINUX /usr/libexec/gdm-x-session[2812]:(==) Protokolldatei:"/home/shen/. local/share/xorg/Xorg.1.log", Zeit:Fr 11. Dez 12:08:39 2020 11. Dez 12:09:04 LINUX gnome-shell[3019]:GNOME Shell gestartet am Fr 11. Dez 2020 12:08:55 GMT+0530 (IST)Dec 11 14:24:41 LINUX /usr/libexec/gdm-x-session[1208]:(==) Protokolldatei:„/var/lib/gdm3/.local/share/xorg /Xorg.0.log", Zeit:Fr 11. Dez 14:24:41 2020 11. Dez 14:25:13 LINUX /usr/libexec/gdm-x-session[2783]:(==) Protokolldatei:"/home /shen/.local/share/xorg/Xorg.1.log", Zeit:Fr 11. Dez 14:25:13 2020 11. Dez 14:25:40 LINUX gnome-shell[3049]:GNOME Shell gestartet am Fr 11. Dez 2020 14:25:31 GMT+0530 (IST)

Nun erklären wir Ihnen, wie dieser Befehl „grep“ funktioniert “. Ein grep wird verwendet, um regelmäßige Muster in der bereitgestellten Datei zu suchen.

Die Parameter -E wird Extended-Regex genannt, der verwendet wird, um Muster festzulegen, und schließlich müssen Sie eine Protokolldatei oder ein Protokollverzeichnis angeben.

Zum Abrufen von Daten zwischen einer Reihe von Datumsbeispielen vom 01. Dezember bis zum 10. Dezember , verwenden Sie den folgenden Befehl.

$ sudo grep -E "Dec 1|Dec 10" Syslog
Beispielausgabe
11. Dez 19:48:04 LINUX systemd[1]:Hostname Service wird gestartet...11. Dez 19:48:04 LINUX dbus-daemon[856]:[system] Service 'org.freedesktop.hostname1' erfolgreich aktiviert 11. Dezember 19:48:04 LINUX systemd[1]:Started Hostname Service.Dec 11 19:48:34 LINUX systemd[1]:systemd-hostnamed.service:Succeeded.Dec 11 19:50:01 LINUX CRON[39178] :(shen) CMD (~/duckdns/duck.sh>/dev/null 2>&1)Dec 11 19:51:58 LINUX dbus-daemon[856]:[system] Aktivierung über systemd:service name='org. freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service' angefordert von ':1.320' (uid=1000 pid=38994 comm="/usr/bin/gnome-screenshot --gapplication-service " label=" unconfined")Dec 11 19:51:58 LINUX systemd[1]:Hostname Service wird gestartet...Dec 11 19:51:58 LINUX dbus-daemon[856]:[system] Service 'org.freedesktop.hostname1' erfolgreich aktiviert 11. Dezember 19:51:58 LINUX systemd[1]:Started Hostname Service.

Daten mit dem Sed-Befehl filtern

Jetzt zeigen wir Ihnen, wie Sie Daten mit sed filtern Befehlszeile. Um Daten zwischen einem Datumsbereich mit bestimmten Zeitbeispielen von 11. Dez. 18:45:06 bis 11. Dez. 19:00:01 abzurufen , verwenden Sie den folgenden Befehl.

$ sudo sed -n '/Dec 11 18:45:06 /,/Dec 11 19:00:01/p' /var/log/syslog
Beispielausgabe
Dec 11 18:45:06 LINUX dbus-daemon[856]:[system] Aktivierung über systemd:service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service' angefordert von ':1.301' (uid=1000 pid=35830 comm="/usr/bin/gnome-screenshot --gapplication-service " label="unconfined")11. Dez 18:45:06 LINUX systemd[1]:Starten des Hostnamen-Dienstes ... 11. Dezember 18:45:06 LINUX dbus-daemon[856]:[system] Erfolgreich aktivierter Dienst 'org.freedesktop.hostname1' 11. Dezember 18:45:06 LINUX systemd[1]:Started Hostname Service.Dec 11 18:45:36 LINUX systemd[1]:systemd-hostnamed.service:Succeeded.Dec 11 18:47:22 LINUX dbus-daemon[856]:[system] Aktivierung über systemd:service name='org.freedesktop.hostname1 ' unit='dbus-org.freedesktop.hostname1.service' angefordert von ':1.303' (uid=1000 pid=35830 comm="/usr/bin/gnome-screenshot --gapplication-service " label="unconfined") 11. Dez 18:47:22 LINUX systemd[1]:Hostname Service wird gestartet... 11. Dez 18:47:22 LINUX dbus-daemon[856]:[system] Service erfolgreich aktiviert e 'org.freedesktop.hostname1'Dec 11 18:47:22 LINUX systemd[1]:Started Hostname Service.Dec 11 18:47:52 LINUX systemd[1]:systemd-hostnamed.service:Erfolgreich.Dec 11 18:50:01 LINUX CRON[36057]:(shen) CMD (~/duckdns/duck.sh>/dev/null 2>&1)Dec 11 18:55:01 LINUX CRON[36206]:(shen) CMD (~/ duckdns/duck.sh>/dev/null 2>&1)Dec 11 19:00:01 LINUX CRON[36473]:(shen) CMD (~/duckdns/duck.sh>/dev/null 2>&1) 

Das -n Parameter mit sed wird nicht die Ausgabe jeder Zeile drucken. Nun das /pattern1/ ,/pattern2/ wird der Ausdruck sein. Im letzten -p Parameter schlagen vor, dass sed den nächsten Ausdruck nach einem bestimmten Muster überprüft. Danach müssen Sie die Protokolldatei oder den Speicherort der Protokolldatei angeben.

Wenn Sie Fragen und Probleme im Zusammenhang mit dem Datumsfilter haben. Fühlen Sie sich frei, Ihre Frage im Kommentarbereich zu stellen.


Linux
  1. So teilen Sie eine einzelne Datei basierend auf Zeilen in mehrere Dateien auf

  2. Linux – Wie finde ich das Erstellungsdatum der Datei?

  3. So leeren Sie eine Protokolldatei unter Linux

  4. So verwenden Sie Logrotate zum Verwalten von Protokolldateien

  5. So kürzen Sie /var/log/lastlog-Datei

So erhalten Sie das aktuelle Datum und die aktuelle Uhrzeit in Python

So vermeiden Sie doppelte Einträge im Bash-Verlauf unter Linux

So ändern Sie die Standard-Sudo-Protokolldatei in Linux

So finden Sie Dateien basierend auf dem Zeitstempel in Linux

So reparieren Sie Dateisystemfehler in Debian-basierten Systemen

Wie füge ich einen Zeitstempel zum Bash-Skriptprotokoll hinzu?