Linux tail コマンド:ファイルの末尾を表示する

LinuxBeginner
オンラインで実践に進む

はじめに

このチュートリアルでは、テキストファイルの最終行を表示するために設計された強力なユーティリティである Linux の tail コマンドについて詳しく解説します。今回は、システム管理者の一般的なタスクである「システムログファイルの監視」という実践的なシナリオに焦点を当てます。

このチュートリアルを終える頃には、tail を使用してファイル内容を表示し、出力をカスタマイズし、リアルタイムの変更を監視する方法を理解できるようになります。このハンズオン体験は、トラブルシューティングやシステム監視において非常に役立つスキルとなるでしょう。

tail の基本を理解する

tail コマンドは、ファイルの末尾を確認するための定番ツールです。ログファイルの最新のエントリを確認したり、ドキュメントの最新の変更を素早くチェックしたりする際に特に便利です。

まずは、サンプルのログファイルを調べてみましょう。/home/labex/project ディレクトリにある system.log というファイルを使用します。

入力:

tail /home/labex/project/system.log

ターミナルにこのコマンドを入力して Enter キーを押してください。ターミナルに慣れていなくても心配いりません。コマンドを入力するためのテキストベースのインターフェースにすぎません。

このコマンドを実行すると、system.log ファイルの最後の 10 行が表示されます。出力結果は以下のようになります:

2024-03-15 09:23:45 [INFO] User 'john_doe' logged in successfully
2024-03-15 09:24:12 [WARNING] Disk usage on /dev/sda1 reached 80%
2024-03-15 09:25:03 [ERROR] Failed to connect to database server
2024-03-15 09:25:30 [INFO] Backup process started
2024-03-15 09:26:17 [INFO] Network interface eth0 went down
2024-03-15 09:26:45 [INFO] Network interface eth0 is up
2024-03-15 09:27:22 [WARNING] High CPU usage detected: 92%
2024-03-15 09:28:01 [INFO] Scheduled system update initiated
2024-03-15 09:28:39 [ERROR] Unable to reach email server
2024-03-15 09:29:10 [INFO] Firewall rules updated successfully

表示内容の内訳は以下の通りです:

  • 各行は 1 つのログエントリ(記録)を表します。
  • 各行の最初の部分はタイムスタンプ(日付と時刻)です。
  • 角括弧内のテキスト([INFO]、[WARNING]、[ERROR] など)は、ログエントリの重要度(ログレベル)を示します。
  • 行の残りの部分は、実際のログメッセージです。

デフォルトでは、tail はファイルの最後の 10 行を表示します。この動作は、ファイル全体を開いてスクロールすることなく、最近のログエントリやファイルの修正箇所を素早く確認するのに非常に役立ちます。

表示する行数をカスタマイズする

デフォルトの 10 行よりも多く、あるいは少なく表示したい場合があります。-n オプション("number" の略)を使用すると、表示したい行数を正確に指定できます。

ログファイルの最後の 5 行を表示してみましょう。

入力:

tail -n 5 /home/labex/project/system.log

ターミナルにこのコマンドを入力して Enter キーを押します。-n 5 の部分は、デフォルトの 10 行ではなく、最後の 5 行だけを表示するように tail に指示しています。

このコマンドは以下のような内容を出力します:

2024-03-15 09:27:22 [WARNING] High CPU usage detected: 92%
2024-03-15 09:28:01 [INFO] Scheduled system update initiated
2024-03-15 09:28:39 [ERROR] Unable to reach email server
2024-03-15 09:29:10 [INFO] Firewall rules updated successfully
2024-03-15 09:29:45 [INFO] User 'jane_smith' logged out

ご覧の通り、最新のログエントリに絞って表示されました。情報が多すぎて混乱することなく、最新のイベントを確認したい場合に非常に便利です。

5 の部分は好きな数字に置き換えることができます。例えば、tail -n 20 は最後の 20 行を表示し、tail -n 1 はファイルの最後の 1 行だけを表示します。

特定の行から内容を表示する

tail は通常、ファイルの末尾を表示するために使用されますが、特定の行番号から開始して内容を表示することもできます。これを行うには、行番号の前にプラス記号(+)を付けます。

ログファイルの 50 行目から内容を表示してみましょう。

入力:

tail -n +50 /home/labex/project/system.log

ターミナルにこのコマンドを入力して Enter キーを押します。-n +50 は、50 行目以降の内容を表示するように tail に指示します。

このコマンドは、50 行目からファイルの末尾までのすべての行を表示します。ログファイルのサイズによっては、出力が非常に長くなる場合があります。以下は表示例です:

2024-03-15 08:45:12 [INFO] Backup process completed successfully
2024-03-15 08:46:03 [WARNING] Low memory warning: Available memory below 15%
2024-03-15 08:47:30 [INFO] System update check initiated
...
(中略)
...
2024-03-15 09:29:10 [INFO] Firewall rules updated successfully
2024-03-15 09:29:45 [INFO] User 'jane_smith' logged out

この機能は、特定の時点や特定のイベントの後に発生した問題を調査するために、ファイルの大部分を特定の開始点から確認する必要がある場合に特に便利です。

注意:ファイル内の総行数よりも大きな数値を指定した場合、tail は何も表示しないか、あるいは何も出力されません。

ファイルの変更をリアルタイムで監視する

tail の最も強力な機能の 1 つは、ファイルをリアルタイムで監視できることです。これは、書き込みが行われている最中のログファイルを監視するのに非常に役立ちます。これには -f オプション("follow" の略)を使用します。

ログファイルをリアルタイムで監視してみましょう。

入力:

tail -f /home/labex/project/system.log

ターミナルにこのコマンドを入力して Enter キーを押します。このコマンドを実行すると、まずファイルの最後の 10 行が表示され、その後、ファイルに新しく追加された行がリアルタイムで表示され続けます。

新しいログエントリが追加される様子をシミュレートするために、新しいターミナルウィンドウを開き、以下のコマンドを実行してください:

echo "$(date) [INFO] New log entry for testing" >> /home/labex/project/system.log

tail -f を実行している元のターミナルに、新しいエントリが表示されるはずです。このリアルタイム監視は、システムイベントが発生した瞬間に追跡する必要があるシステム管理者にとって非常に貴重な機能です。

tail -f コマンドを終了するには、実行中のターミナルで Ctrl+C を押します。このキーボードショートカットは、現在のプロセスに割り込み信号を送り、tail コマンドを停止させます。

高度な活用のためのオプションの組み合わせ

tail コマンドは、異なるオプションを組み合わせることでさらに強力になります。-n オプションと -f オプションを組み合わせて、ログファイルの最後の 3 行からリアルタイム監視を開始してみましょう。

入力:

tail -n 3 -f /home/labex/project/system.log

ターミナルにこのコマンドを入力して Enter キーを押します。このコマンドは、ファイルの最後の 3 行を表示した後、新しく追加される行を表示し続けます。これは、頻繁に更新されるログファイルで、直近の数件のエントリだけに集中したい場合に便利です。

これをテストするために、別のターミナルウィンドウを開いて新しいログエントリを追加します:

echo "$(date) [WARNING] Unusual network activity detected" >> /home/labex/project/system.log

tail -n 3 -f を実行しているターミナルに、以前の 2 つのエントリと共に、この新しいエントリが表示されるはずです。

監視が終わったら、Ctrl+C を使って tail コマンドを終了するのを忘れないでください。

ヒント:この場合、オプションの順序は関係ありません。tail -f -n 3 としても同じように動作します。

まとめ

このチュートリアルでは、Linux の多機能な tail コマンドについて、特にログファイルの監視における活用方法を中心に学びました。学習した内容は以下の通りです:

  1. 基本的な tail コマンドを使用してファイルの末尾を表示する方法
  2. -n オプションを使用して表示する行数をカスタマイズする方法
  3. tail -n +N を使用して特定の行から内容を表示する方法
  4. -f オプションを使用してファイルの変更をリアルタイムで監視する方法
  5. より高度な使い方のためのオプションの組み合わせ方法

これらのスキルは、システム管理、デバッグ、および監視タスクにおいて不可欠な基礎となります。tail の扱いに慣れるにつれて、Linux ツールキットの中で手放せないツールになるでしょう。