トラブルシューティングのために巨大なログ ファイルを表示することは、システム管理者やプログラマーにとって日常的なタスクです。
この記事では、10 の素晴らしい例を使用して、巨大なログ ファイルを効果的に表示および操作する方法を確認しましょう。
例 1:sed コマンドを使用してファイルの特定の行を (行番号に基づいて) 表示する
行番号で言及されている特定の行のみを表示します。
Syntax: $ sed -n -e Xp -e Yp FILENAME
- sed :デフォルトですべての行を出力する sed コマンド。
- -n :出力を抑制します。
- -e CMD :実行するコマンド
- Xp:行番号 X を表示
- Yp:行番号 Y を表示
- FILENAME :処理するファイルの名前。
以下の例では、syslog の 120、145、1050 行を出力します。
$ sed -n -e 120p -e 145p -e 1050p /var/log/syslog
次の例では、var/log/cron の行番号 101 から 110 までの内容を表示できます。
- M – 開始行番号
- N – 終了行番号
Syntax: sed -n M,Np FILENAME $ sed -n 101,110p /var/log/cron
例 2:head コマンドを使用してファイルの最初の N 行を表示する
この例では、/var/log/maillog ファイルの最初の 15 行のみを表示します。 15 を 10 に変更して、ログ ファイルの最初の 10 行を表示します。
Syntax: head -n N FILENAME $ head -n 15 /var/log/maillog
例 3:head コマンドを使用してファイルの最後の N 行を無視する
この例は、最後の N 行を無視し、ファイルの先頭から残りの行のみを表示する方法を示しています。
次の例は、最後の 250 行を除く /var/log/secure のすべての行を表示します。
Syntax: head -n -N FILENAME $ head -n -250 /var/log/secure
例 4:tail コマンドを使用してファイルの最後の N 行を表示する
この例では、/var/log/messages ファイルの最後の 50 行のみを表示します。 50 を 100 に変更して、ログ ファイルの最後の 100 行を表示します。
Syntax: tail -n N FILENAME $ tail -n 50 /var/log/messages
例 5:tail コマンドを使用してファイルの最初の N-1 行を無視する
この例は、最初の N-1 行を無視し、残りの行のみを表示する方法を示しています。
次の例では、コメントのみを含む /etc/xinetd.conf の最初の 4 行を無視します。
Syntax: tail -n +N FILENAME $ tail -n +5 /etc/xinetd.conf defaults { instances = 60 log_type = SYSLOG authpriv log_on_success = HOST PID log_on_failure = HOST cps = 25 30 } includedir /etc/xinetd.d
例 6:tail コマンドを使用して、増大するログ ファイルをリアルタイムで表示
これはおそらく、システム管理者が最もよく使用するコマンドの 1 つです。増大するログ ファイルを表示し、新しい内容のみを表示するには、以下に示すように tail -f を使用します。
次の例は、/var/log/syslog コマンドの内容をリアルタイムで示しています。
Syntax: tail -f FILENAME $ tail -f /var/log/syslog
例 7:head および tail コマンドを使用してファイルの特定の行 (行番号に基づく) を表示する
以下の例では、/var/log/anaconda.log ファイルの行番号 101 ~ 110 が表示されます
- M – 開始行番号
- N – 終了行番号
Syntax: cat file | tail -n +N | head -n (M-N+1) $ cat /var/log/anaconda.log | tail -n +101 | head -n 10
- cat :ファイル全体を stdout に出力します。
- tail -n +101 :指定された行番号までの行を無視し、指定された番号以降の行の出力を開始します。
- head -n 10 :最初の 10 行、つまり 101 から 110 を出力し、残りの行は無視します。
例 8:パターンに一致する行と、一致に続くいくつかの行を表示します。
次の例は、/var/log/dmesg から「Initializing CPU」に一致する行と、この一致の直後の 5 行を表示しています。
# grep "Initializing CPU#1" /var/log/dmesg Initializing CPU#1 [Note: The above shows only the line matching the pattern] # grep -A 5 "Initializing CPU#1" dmesg Initializing CPU#1 Calibrating delay using timer specific routine.. 3989.96 BogoMIPS (lpj=1994982) CPU: After generic identify, caps: bfebfbff 20100000 00000000 00000000 CPU: After vendor identify, caps: bfebfbff 20100000 00000000 00000000 monitor/mwait feature present. CPU: L1 I cache: 32K, L1 D cache: 32K [Note: The above shows the line and 5 lines after the pattern matching]
以前の記事を参照してください。 – grep コマンドの使用方法を説明する 15 の実用的な grep コマンドの例
以前の grep コマンドの記事で説明したように、次の操作が可能です。
- grep のデフォルト機能である、パターンによって識別される特定の行を表示します。
- 一致した文字のみを表示する
- -A オプションを使用して、一致後に N 行を表示します。
- -B オプションで試合前の N 行を表示
- -C オプションを使用して、試合の周りの N 行を表示します。
例 9:ファイルから特定のバイトを表示する
次の例は、ファイルの上位 40 バイトまたは末尾 30 バイトを表示する方法を説明しています。
syslog の最初の 40 バイトを表示します。
$ head -c40 /var/log/syslog
syslog の最後の 30 バイトを表示します。
$ tail -c30 /var/log/syslog
例 10:圧縮されたログ ファイルの表示
特定の時間が経過すると、すべてのシステム ログ ファイルがローテーションされ、圧縮されます。オンザフライで解凍し、出力を別の UNIX コマンドにパイプして、以下で説明するようにファイルを表示できます。
以前の記事「Z コマンドの威力 – Zcat、Zless、Zgrep、Zdiff の例」を参照してください
- 圧縮ファイルの最初の N 行を表示します。
$ zcat file.gz | head -250
- 圧縮ファイルの最後の N 行を表示します。
$ zcat file.gz | tail -250
- 圧縮ファイルの最後の N 行を無視します。
$ zcat file.gz | head -n -250
- 圧縮ファイルの最初の N 行を無視します。
$ zcat file.gz | tail -n +250
- パターンに一致する行を表示する
$ zcat file.gz | grep -A2 'error'
- 行番号で識別される特定の範囲の行を表示します。
$ zcat file.gz | sed -n -e 45p -e 52p
戻る必要がある場合は、del.icio.us でこのページをブックマークして、参照できるようにしてください。