head、tail、cat を使ったファイルの表示

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

はじめに

Linux でファイルを表示する世界へようこそ。前のモジュールでは、ファイルを整理する方法を学びました。ここでは、ファイルを開いて内容を読み取ります。

この実験では、ファイルの内容を確認する基本的な 3 つの方法を学びます。

  1. **cat**:ファイル全体を一度に表示します。小さなメモなどに適しています。
  2. **head**:ファイルの先頭部分だけを表示します。ファイルの概要を確認するのに適しています。
  3. **tail**:ファイルの末尾部分だけを表示します。ログファイルの最新の更新を確認するのに適しています。

さらに、ファイルの更新をリアルタイムで監視する方法も学びます。

これは、Linux を使いこなすための重要なステップです。これまでのモジュールでは、ファイルがどのように整理されているかを学びました。ここからは、ファイルの内容を実際に扱います。実際のシステム管理では、適切なテキストファイルを適切な方法で読み取ることが重要な作業の多くを占めます。

ファイル全体を表示する(cat)

cat コマンドは、「このファイルの内容をすべて表示して」と指示する標準的な方法です。

小さなファイルで使うのが適しています。非常に大きなファイルに対して使うと、テキストが速く流れてしまい、読み取れません。

cat という名前は concatenate(連結)に由来します。このコマンドはもともと、ファイルの内容を連結して表示するために設計されました。多くの初心者はファイル表示コマンドとして cat を使い始めますが、歴史的には、より広いテキスト処理の一部として使われてきました。

sample.txt という小さなファイルを用意しています。

まず、プロジェクトフォルダーに移動します。

cd ~/project

次に、ファイルの内容を画面に表示します。

cat sample.txt

ファイル全体がすぐに表示されます。

Line 1: This is a sample file.
Line 2: It is used to demonstrate the cat command.
Line 3: The cat command displays the full content.
Line 4: This file is short enough to read easily.
Line 5: End of the sample file.

大きなファイルを扱う場合は、より適したツールが必要です。

ファイルの先頭を表示する(head)

タイトルや最初の数行だけを確認したい場合があります。そのようなときに使うのが head です。head は、ファイルの「先頭部分」を表示します。

デフォルトでは、head は最初の 10 行を表示します。

このデフォルト設定が便利なのは、ファイルの先頭にヘッダー、コメント、列名、最初のレコードなどの情報が含まれていることが多いためです。つまり、head はファイルをすばやく確認するためのコマンドです。

/etc/passwd を見てみましょう。これはユーザー情報を含む長いシステムファイルです。

head /etc/passwd

最初の 10 行だけが表示されます。

表示する行数を指定する

先頭の 5 行だけを表示したい場合はどうすればよいでしょうか。-n(number)オプションを使うと、表示する行数を正確に指定できます。

head -n 5 /etc/passwd

この方法なら、ファイル全体を読まずに内容を確認できます。

ファイルの末尾を表示する(tail)

head が先頭を表示するのに対して、tail は末尾を表示します。tail コマンドは、ファイルの最後の行を表示します。

Linux のログは順番に書き込まれます。最も「新しい」エントリは常に末尾にあります。そのため、今まさに問題が発生した場合、エラーメッセージはファイルの末尾に記録されます。

このため、tail は運用作業でよく使われます。ログには新しい行が追加されていくことが多いため、現在発生している問題を説明する情報は、ファイルの末尾にある可能性が高くなります。

システムログ /var/log/syslog を確認してみましょう。

tail /var/log/syslog

最後の 10 件のエントリが表示されます。

head と同じように、表示する行数を指定できます。最後の 5 件のイベントを表示するには、次のコマンドを実行します。

tail -n 5 /var/log/syslog

これはシステム管理者が日常的に使う基本的なコマンドです。サーバーがクラッシュしたとき、最初に tail を入力することがよくあります。

ライブログを監視する(tail -f)

静的なファイルの確認に対して、リアルタイムのデータは変化をその場で確認できます。tail コマンドには、follow を意味する -f オプションがあります。

-f を指定すると、tail は待機します。プログラムがそのファイルに新しい行を書き込むと、tail がその行をすぐに取得して表示します。ライブニュースの速報を見ているようなものです。

ここでは、ターミナルが静的な表示ではなく、対話的に動作していることを実感できます。完成したファイルを読むのではなく、プログラムがイベントを生成するたびに、そのイベントが表示される様子を監視します。

2 つのターミナルを使って試してみましょう。

ターミナル 1(監視側)

ログファイルの監視を開始します。

tail -f ~/project/app.log

カーソルが止まったままになります。ターミナルが「固まった」ように見えますが、実際にはログの更新を待機しています。

ターミナル 2(書き込み側)

2 つ目のターミナルを開きます(タブの横にある + ボタンをクリックします)。ここからログに書き込みます。

echo "New log entry at $(date)" >> ~/project/app.log

すぐに ターミナル 1 に戻ります。メッセージが表示されていることを確認できます。

ターミナル 2 に戻り、さらにイベントを追加します。

echo "Another event happened" >> ~/project/app.log
echo "System is running smoothly" >> ~/project/app.log

ターミナル 2 で Enter キーを押すと、そのテキストがすぐにターミナル 1 に表示されます。これが、エンジニアがサーバーをリアルタイムで監視する方法です。

終了するには、ターミナル 1 に戻ります。Ctrl+C を押して監視を停止し、プロンプトに戻ります。

まとめ

お疲れさまでした。これで、Linux でファイルを調べるための基本的なツールを身につけました。

  • **cat**:ファイル全体を表示します。小さなファイルに適しています。
  • **head**:ファイルの先頭を表示します。すばやい確認に適しています。
  • **tail**:ファイルの末尾を表示します。ログの確認に適しています。
  • **tail -f**:ファイルをリアルタイムで監視します。

これらのコマンドを使うと、「このファイルには何が入っているのか」という疑問に答えられます。