GNU/Linux >> Linux の 問題 >  >> Linux

日付範囲に基づいてログファイルエントリをフィルタリングする方法

Linuxでログファイルを体系的に読み取る際に問題が発生した場合。その後、あなたは正しい場所にいます。単にをする ログファイルを読み取ることは、ログファイルを検査するための一種の基本的な方法です。ただし、時間に基づいて整理された方法でデータをフィルタリングする場合は、 awkを使用します 、 grep 、および sed コマンド。

awk は、ファイル内のデータを操作し、Linuxシステムの特定のパターンに基づいてレポートを生成するために使用される一般的なコマンドラインツールです。 grep は、正規表現を使用してパターンを検索するシンプルなパターンツールです。

今日は、 / var / log / syslogをフィルタリングします 両方のawkを使用した日付範囲に基づくファイル およびgrep コマンドラインツール。

Awkコマンドを使用してデータをフィルタリングする

まず、 awk を使用して、時間範囲に基づいてSyslogファイルをフィルタリングします。 示されているコマンド。

$ sudo awk -v start=07:00 -v stop=19:00 'start <= $2 && $2 < stop' /var/log/syslog
サンプル出力
Dec 11 19:39:19 LINUX dbus-daemon[2742]: [session uid=1000 pid=2742] Activating via systemd: service name='org.freedesktop.Tracker1' unit='tracker-store.service' requested by ':1.3' (uid=1000 pid=2740 comm="/usr/libexec/tracker-miner-fs " label="unconfined")
Dec 11 19:39:19 LINUX systemd[2727]: Starting Tracker metadata database store and lookup manager...
Dec 11 19:39:19 LINUX systemd[1]: session-23.scope: Succeeded.
Dec 11 19:39:19 LINUX dbus-daemon[2742]: [session uid=1000 pid=2742] Successfully activated service 'org.freedesktop.Tracker1'

start=HH:MMを置き換えます 開始時間と分、stop=HH:MM 最後の時間と分で。

ログをより簡単かつ簡単に確認したい場合は、 grepをフォローできます。 コマンドユーティリティ。

Grepコマンドを使用してデータをフィルタリングする

grepを使用したいくつかの例を示します 今日のログを確認したいので、以下のコマンドを渡します。

$ sudo grep -E " Dec 11" /var/log/syslog
サンプル出力
Dec 11 12:07:35 LINUX /usr/libexec/gdm-x-session[1231]: (==) Log file: "/var/lib/gdm3/.local/share/xorg/Xorg.0.log", Time: Fri Dec 11 12:07:35 2020
Dec 11 12:08:39 LINUX /usr/libexec/gdm-x-session[2812]: (==) Log file: "/home/shen/.local/share/xorg/Xorg.1.log", Time: Fri Dec 11 12:08:39 2020
Dec 11 12:09:04 LINUX gnome-shell[3019]: GNOME Shell started at Fri Dec 11 2020 12:08:55 GMT+0530 (IST)
Dec 11 14:24:41 LINUX /usr/libexec/gdm-x-session[1208]: (==) Log file: "/var/lib/gdm3/.local/share/xorg/Xorg.0.log", Time: Fri Dec 11 14:24:41 2020
Dec 11 14:25:13 LINUX /usr/libexec/gdm-x-session[2783]: (==) Log file: "/home/shen/.local/share/xorg/Xorg.1.log", Time: Fri Dec 11 14:25:13 2020
Dec 11 14:25:40 LINUX gnome-shell[3049]: GNOME Shell started at Fri Dec 11 2020 14:25:31 GMT+0530 (IST)

次に、このコマンドがどのように機能するかを説明します「 grep 」。 grep 提供されたファイル内の通常のパターンを検索するために使用されます。

パラメータ-E パターンを設定するために使用されるextended-regexと呼ばれ、最後に、ログファイルまたはログディレクトリを提供する必要があります。

12月1日から12月10日までのさまざまな日付の例の間のデータを取得するには 、以下のコマンドを使用してください。

$ sudo grep -E "Dec 1|Dec 10" syslog
サンプル出力
Dec 11 19:48:04 LINUX systemd[1]: Starting Hostname Service...
Dec 11 19:48:04 LINUX dbus-daemon[856]: [system] Successfully activated service 'org.freedesktop.hostname1'
Dec 11 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] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service' requested by ':1.320' (uid=1000 pid=38994 comm="/usr/bin/gnome-screenshot --gapplication-service " label="unconfined")
Dec 11 19:51:58 LINUX systemd[1]: Starting Hostname Service...
Dec 11 19:51:58 LINUX dbus-daemon[856]: [system] Successfully activated service 'org.freedesktop.hostname1'
Dec 11 19:51:58 LINUX systemd[1]: Started Hostname Service.

Sedコマンドを使用してデータをフィルタリングする

次に、 sedを使用してデータをフィルタリングする方法を説明します。 コマンドライン。 12月11日18:45:06から12月11日19:00:01までの特定の時間の例を使用して日付の範囲間のデータを取得するには 、以下のコマンドを使用してください。

$ sudo sed -n '/Dec 11 18:45:06 /,/Dec 11 19:00:01/p' /var/log/syslog
サンプル出力
Dec 11 18:45:06 LINUX dbus-daemon[856]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service' requested by ':1.301' (uid=1000 pid=35830 comm="/usr/bin/gnome-screenshot --gapplication-service " label="unconfined")
Dec 11 18:45:06 LINUX systemd[1]: Starting Hostname Service...
Dec 11 18:45:06 LINUX dbus-daemon[856]: [system] Successfully activated service 'org.freedesktop.hostname1'
Dec 11 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] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service' requested by ':1.303' (uid=1000 pid=35830 comm="/usr/bin/gnome-screenshot --gapplication-service " label="unconfined")
Dec 11 18:47:22 LINUX systemd[1]: Starting Hostname Service...
Dec 11 18:47:22 LINUX dbus-daemon[856]: [system] Successfully activated service '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: Succeeded.
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)

-n sedを指定したパラメーターは、各行の出力を出力しません。ここで、/pattern1//pattern2/ 式になります。最後の-p パラメータは、sedが特定のパターンに従って次の式を検証することを提案します。この後、ログファイルまたはログファイルの場所を指定する必要があります。

日付フィルターに関連するクエリと問題がある場合。コメント欄でお気軽にご質問ください。


Linux
  1. Linuxでログファイルを空にする方法

  2. フィールドの数値に基づいてファイルをソートする方法は?

  3. Bash/Debianでファイル作成日時を取得するには?

  1. 正しいユーザーとして ssh ログインする方法は?

  2. Linuxコマンド出力をファイルに出力するには?

  3. タイムスタンプをbashスクリプトログに追加するには?

  1. 行に基づいて単一のファイルを複数のファイルに分割する方法

  2. Linux –ファイルの作成日を見つける方法は?

  3. Linux +スペースのあるファイルを無視(フィルター)する方法は?