GNU/Linux >> Znalost Linux >  >> Linux

Jak filtrovat záznamy v souboru protokolu na základě časového období

Pokud se potýkáte s potížemi při systematickém čtení souborů protokolu v Linuxu. Pak jste na správném místě. Jednoduše děláte kočku čtení souboru protokolu je základní způsob, jak zkontrolovat soubor protokolu. Pokud však chcete data filtrovat organizovaným způsobem na základě času, pak používáme awk , grep a sed příkazy.

The awk je populární nástroj příkazového řádku používaný k manipulaci s daty v souborech a generování sestav na základě daného vzoru v systému Linux. Zatímco grep je jednoduchý vzorový nástroj, který vyhledává vzory pomocí regulárního výrazu.

Dnes budeme filtrovat /var/log/syslog soubor založený na časovém období pomocí obou awk a grep nástroje příkazového řádku.

Filtrování dat pomocí příkazu Awk

Nejprve vyfiltrujeme soubor Syslog na základě časového rozsahu pomocí awk příkaz, jak je znázorněno.

$ sudo awk -v start=07:00 -v stop=19:00 'start <=$2 &&$2  
Ukázkový výstup
Dec 11 19:39:19 LINUX dbus-daemon[2742]:[session uid=1000 pid=2742] Aktivace přes systemd:service name='org.freedesktop.Tracker1' unit='tracker-store.service' požadováno ':1.3' (uid=1000 pid=2740 comm="/usr/libexec/tracker-miner-fs " label="unconfined") 11. prosince 19:39:19 LINUX systemd[2727]:Spouštění databáze metadat Tracker správce úložiště a vyhledávání...11. prosince 19:39:19 LINUX systemd[1]:session-23.scope:Succeeded.Dec 11 19:39:19 LINUX dbus-daemon[2742]:[session uid=1000 pid=2742] Úspěšně aktivovaná služba 'org.freedesktop.Tracker1'

Nahraďte start=HH:MM s počáteční hodinou a minutou, stop=HH:MM s poslední hodinou a minutou.

Pokud chcete protokol zkontrolovat snadněji a jednodušeji, můžete postupovat podle grep příkazový nástroj.

Filtrování dat pomocí příkazu Grep

Ukážu několik příkladů pomocí grep jako bych chtěl zkontrolovat protokol pro Today, pak předám níže uvedený příkaz.

$ sudo grep -E " 11. prosince" /var/log/syslog
Ukázkový výstup
Dec 11 12:07:35 LINUX /usr/libexec/gdm-x-session[1231]:(==) Soubor protokolu:"/var/lib/gdm3/.local/share/xorg/Xorg.0 .log", Čas:Pá 11. prosince 12:07:35 11. prosince 2020 12:08:39 LINUX /usr/libexec/gdm-x-session[2812]:(==) Soubor protokolu:"/home/shen/. local/share/xorg/Xorg.1.log", Čas:Pá 11. prosince 12:08:39 11. prosince 2020 12:09:04 LINUX gnome-shell[3019]:GNOME Shell byl spuštěn v pátek 11. prosince 2020 12:08:55 GMT+0530 (IST) 11. prosince 14:24:41 LINUX /usr/libexec/gdm-x-session[1208]:(==) Soubor protokolu:"/var/lib/gdm3/.local/share/xorg /Xorg.0.log", Čas:Pá 11. prosince 14:24:41 11. prosince 2020 14:25:13 LINUX /usr/libexec/gdm-x-session[2783]:(==) Soubor protokolu:"/home /shen/.local/share/xorg/Xorg.1.log", Čas:Pá 11. prosince 14:25:13 11. prosince 2020 14:25:40 LINUX gnome-shell[3049]:GNOME Shell byl spuštěn v pátek 11. prosince 2020 14:25:31 GMT+0530 (IST)

Nyní vám vysvětlíme, jak tento příkaz funguje „grep “. A grep se používá k vyhledávání pravidelných vzorů v poskytnutém souboru.

Parametry -E se nazývá rozšířený-regex, který se používá k nastavení vzorů a nakonec musíte poskytnout soubor protokolu nebo adresář protokolu.

Chcete-li získat data v rozsahu příkladů dat od 01. prosince do 10. prosince , použijte níže uvedený příkaz.

$ sudo grep -E syslog "1. prosince|10. prosince"
Ukázkový výstup
/dev/null 2>&1) 11. prosince 19:51:58 LINUX dbus-daemon[856]:[systém] Aktivace přes systemd:název služby='org. freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service' požadováno ':1.320' (uid=1000 pid=38994 comm="/usr/bin/gnome-screenshot --gapplication-service " label=" unconfined") 11. prosince 19:51:58 LINUX systemd[1]:Spouštění služby hostname... 11. prosince 19:51:58 LINUX dbus-daemon[856]:[systém] Služba 'org.freedesktop.hostname1' byla úspěšně aktivována 11. prosince 19:51:58 LINUX systemd[1]:Spuštěna služba názvu hostitele.

Filtrování dat pomocí příkazu Sed

Nyní si ukážeme, jak filtrovat data pomocí sed příkazový řádek. Chcete-li získat data mezi rozsahem dat s určitými časovými příklady od 11. prosince 18:45:06 do 11. prosince 19:00:01 , použijte níže uvedený příkaz.

$ sudo sed -n '/Dec 11 18:45:06 /,/Dec 11 19:00:01/p' /var/log/syslog
Ukázkový výstup
/dev/null 2>&1) 11. prosince 18:55:01 LINUX CRON[36206]:(shen) CMD (~/ duckdns/duck.sh>/dev/null 2>&1) 11. prosince 19:00:01 LINUX CRON[36473]:(shen) CMD (~/duckdns/duck.sh>/dev/null 2>&1)

-n parametr sed nevytiskne výstup každého řádku. Nyní /pattern1/ ,/pattern2/ bude výraz. V posledním -p parametry navrhují sed ověřit další výraz podle daného vzoru. Po tom všem musíte poskytnout soubor protokolu nebo umístění souboru protokolu.

Pokud máte jakýkoli dotaz a problém týkající se filtru Datum. Neváhejte se zeptat na svůj dotaz v sekci komentářů.


Linux
  1. Jak rozdělit jeden soubor do více souborů na základě řádků

  2. Linux – Jak zjistit datum vytvoření souboru?

  3. Jak používat Logrotate ke správě souborů protokolu

  1. Jak zkrátit soubor /var/log/lastlog

  2. Jak přidat řetězec data na každý řádek nepřetržitě zapisovaného souboru protokolu

  3. Jak získat datum/čas vytvoření souboru v Bash/Debian?

  1. Linux + Jak ignorovat (filtrovat) soubor s mezerou?

  2. syntaxe konfiguračního souboru logrotate – je možné zadat více zástupných znaků?

  3. Jak přidat časové razítko do protokolu skriptu bash?