メインコンテンツへスキップ
初級10分で読める

tailとheadでファイルの一部を表示

大きなファイルの先頭や末尾を効率的に表示するtailとheadコマンドの使い方を、ログ監視やファイル確認の実例を交えて詳しく解説します。

効率化編tailheadログ監視ファイル表示効率化

🎯 この記事で学べること

  • 1
    headコマンドでファイルの先頭部分を素早く確認できるようになります
  • 2
    tailコマンドでファイルの末尾や最新情報を瞬時に把握できます
  • 3
    tail -fを使ったリアルタイムログ監視の技術をマスターできます
  • 4
    特定範囲の行を抽出するテクニックが身につきます
  • 5
    他のコマンドと組み合わせた高度なログ分析手法を習得できます

読了時間: 約10

はじめに

こんにちは!今日は「tail」と「head」という、とっても便利なコマンドを学んでいきましょう。

「大きなログファイルの最新情報だけ見たい...」「ファイルの最初の数行だけ確認したい...」そんな経験はありませんか?

tailとheadは、まるで本の「目次」や「あとがき」をパッと見るように、ファイルの一部だけを素早く表示できるコマンドなんです!

tailとheadコマンドって何?

簡単に言うと:

  • head:ファイルの「頭(先頭)」を表示
  • tail:ファイルの「尻尾(末尾)」を表示

覚え方は簡単ですね!英語の意味そのままです。

例えば、1万行もあるログファイルを全部開くのは大変ですが、tailを使えば最新の10行だけを瞬時に確認できます!

🎮 理解度チェック

headコマンドとtailコマンドの違いは何でしょう?

headコマンドの基本

ファイルの先頭を表示

まずはheadコマンドから始めましょう!

# デフォルトで先頭10行を表示
head filename.txt

# 行数を指定して表示
head -n 20 filename.txt
head -20 filename.txt  # 省略形(-nを省略できます)

# バイト数で指定
head -c 100 filename.txt  # 先頭100バイト
head -c 1K filename.txt   # 先頭1KB

デフォルトの10行で足りないときは、-nオプションで好きな行数を指定できます。覚えやすいですね!

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

複数ファイルの処理

複数のファイルを一度に確認したいときも大丈夫です!

# 複数ファイルの先頭を表示
head file1.txt file2.txt

# ファイル名を表示しない(quiet)
head -q file1.txt file2.txt

# 常にファイル名を表示(verbose)
head -v file1.txt file2.txt

ファイルがどれなのか分かるように、通常はファイル名も一緒に表示されます。

tailコマンドの基本(こちらが本命!)

ファイルの末尾を表示

次はtailコマンドです。ログファイルの最新情報を見るときに特に便利ですよ!

# デフォルトで末尾10行を表示
tail filename.txt

# 行数を指定して表示
tail -n 20 filename.txt
tail -20 filename.txt  # 省略形

# 指定行以降をすべて表示(ちょっと特殊)
tail -n +5 filename.txt  # 5行目以降すべて

+記号を使うと「○行目から最後まで」という意味になります。ちょっとトリッキーですが、覚えると便利です!

リアルタイム監視(これがすごい!)

tailの一番の魅力は、ファイルの更新をリアルタイムで監視できることです!

# ファイルの更新を監視(follow)
tail -f logfile.log

# ファイルが削除・再作成されても追跡
tail -F logfile.log

# 複数ファイルを同時監視
tail -f app.log error.log

-fは「follow」の頭文字です。ログファイルが更新されるたびに、新しい内容が自動的に表示されます。Ctrl+Cで終了できますよ!

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

🎮 理解度チェック

tail -fコマンドの主な用途は何でしょう?

実践的な使用例

ログファイルの監視

実際の開発や運用で一番使うのがこれです!

# システムログの監視
tail -f /var/log/syslog

# エラーログのみをリアルタイム監視
tail -f app.log | grep ERROR

# 最新のエラー20件を確認
tail -100 error.log | grep ERROR | tail -20

# タイムスタンプ付きで監視
tail -f app.log | while read line; do echo "$(date '+%Y-%m-%d %H:%M:%S') $line"; done

パイプ(|)で他のコマンドと組み合わせると、もっと便利になりますね!

ファイルの特定範囲を表示

headとtailを組み合わせると、ファイルの「中間部分」も取り出せます!

# 11行目から20行目を表示
head -20 file.txt | tail -10

# 最後から2番目の10行を表示
tail -20 file.txt | head -10

# 特定の行番号付近を表示(sedと組み合わせ)
sed -n '50,60p' file.txt

「最初の20行を取って、その中の最後の10行」つまり11~20行目が取れるわけです。ちょっと頭の体操が必要ですが、慣れると便利ですよ!

複数ファイルの同時監視

複数のログを同時に監視できるのもtailの便利な点です!

# 複数のログファイルを同時監視
tail -f /var/log/app1.log /var/log/app2.log

# ファイル名も表示して区別しやすく
tail -f -v app.log error.log access.log

各ファイルの更新があるたびに、どのファイルの内容か分かるように表示されます。

高度なオプション(さらに便利に!)

tailの便利なオプション

知っているともっと便利なオプションを紹介します!

# PIDを表示(プロセス終了時に自動停止)
tail -f --pid=$$ logfile

# 一定時間で更新を確認
tail -f -s 2 logfile  # 2秒ごとにチェック

# バイト単位で表示
tail -c 1000 logfile  # 最後の1000バイト
tail -c +1000 logfile # 1000バイト目以降すべて

特殊な使い方

# 最初の数行をスキップ
tail -n +6 file.txt  # 6行目以降(先頭5行をスキップ)

# ファイルが削除・再作成されても追跡
tail -F logfile.log  # ログローテーションに対応

# 行末を表示しない
head -c -1 file.txt  # 最後の1文字を除く
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

パイプラインでの活用(組み合わせの威力)

grepとの組み合わせ

grepで絞り込んでからhead/tailを使うと、目的の情報をピンポイントで取り出せます!

# エラーログの最新10件
grep ERROR app.log | tail -10

# 警告メッセージの最初の5件
grep WARN app.log | head -5

# 特定期間のログを抽出
grep "2025-08-08" app.log | tail -50

他のコマンドとの連携

# アクセスログから最新のIPアドレス10件
tail -100 access.log | awk '{print $1}' | sort -u | tail -10

# 最新のエラーメッセージを整形
tail -f error.log | awk '/ERROR/ {print strftime("%Y-%m-%d %H:%M:%S"), $0}'

パイプでどんどんつなげて、必要な情報を加工できるのがLinuxの魅力ですね!

ログローテーション対応

ログファイルが日付で切り替わる場合の対処法です:

# ローテーションされるログの監視(大文字のF)
tail -F /var/log/app.log

# 複数の番号付きログファイルを確認
tail -n 20 app.log app.log.1 app.log.2

# 圧縮されたログも含めて確認
zcat app.log.*.gz | tail -100

-F(大文字)は-fより賢く、ファイルが削除・再作成されても追跡し続けます。ログローテーションがある環境では必須です!

🎮 理解度チェック

head -20 file.txt | tail -10 このコマンドは何を表示しますか?

実用的なユースケース

Webサーバーのアクセス監視

Webサーバー運用では必須のテクニックです:

# リアルタイムアクセス監視
tail -f /var/log/nginx/access.log

# 404エラーの監視
tail -f access.log | grep " 404 "

# 特定IPからのアクセス監視
tail -f access.log | grep "192.168.1.100"

アプリケーションログの分析

アプリケーションの動作確認にも活躍します:

# 起動時のログ確認
head -50 app.log | grep -E "(Starting|Initializing)"

# 最新のスタックトレース取得
tail -200 error.log | grep -A 10 "Exception"

# パフォーマンスログの監視(1秒以上かかったリクエスト)
tail -f performance.log | grep "response time" | awk '{if ($NF > 1000) print}'

システム監視

システム管理者の日常業務でも大活躍:

# システムメッセージの監視
tail -f /var/log/messages

# カーネルログの最新情報
dmesg | tail -20

# 認証ログの監視(ログイン成功/失敗)
tail -f /var/log/auth.log | grep -E "(Failed|Accepted)"
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

パフォーマンスの考慮(大きなファイルを扱うとき)

大きなファイルの処理

数GBのログファイルでも大丈夫!

# 巨大ファイルの末尾を効率的に表示
tail -c 10000 huge_file.log | tail -20

# メモリ効率的な処理
tail -n 1000 huge_file.log > last_1000_lines.txt

# ストリーム処理での利用
tail -f large.log | grep pattern | head -100

tailとheadはファイル全体を読み込まないので、大きなファイルでも高速に動作します!

バッファリングの制御

リアルタイム性を重視する場合:

# 行バッファリングを強制
tail -f app.log | grep --line-buffered ERROR

# バッファなしで出力
tail -f app.log | stdbuf -o0 grep ERROR

バッファリングを制御すると、ログが書かれた瞬間に表示されるようになります。

トラブルシューティング(困ったときは)

よくある問題と対処法

こんなときはどうする?

# ファイルが更新されない場合
# inotifyの制限を確認
cat /proc/sys/fs/inotify/max_user_watches

# 権限エラーの場合(sudoを付ける)
sudo tail -f /var/log/secure

# 文字化けする場合(文字コード変換)
tail -f app.log | iconv -f SJIS -t UTF-8

便利なエイリアス

よく使うコマンドはエイリアスにしちゃいましょう:

# ~/.bashrcに追加
alias tailf='tail -f'
alias tailerr='tail -f *error*.log'
alias tailsys='sudo tail -f /var/log/syslog'
alias headtail='function _ht() { head -$2 $1 | tail -$3; }; _ht'

tailftail -fの短縮形として多くの人が使っています。指が覚えてしまうほど便利ですよ!

📝 まとめ

今日はtailとheadコマンドについて学びました!

  • headはファイルの「頭(先頭)」、tailは「尻尾(末尾)」を表示
  • tail -fでリアルタイムログ監視が可能(これが最強!)
  • パイプで組み合わせて特定範囲の行を抽出できる
  • grepやawkと連携して強力なログ分析ツールに
  • 大きなファイルでも高速に動作

特にtail -fは、システム管理者や開発者にとって必須のコマンドです。ログファイルをリアルタイムで監視できるので、問題が発生した瞬間を逃さずキャッチできます。

まずはtail -fでログ監視から始めてみましょう。慣れてきたら、パイプで他のコマンドと組み合わせて、より高度なログ分析に挑戦してみてくださいね!

今日の練習: まずtail -5 /etc/passwdで最後の5行を表示してみましょう。次に、適当なログファイルを作ってtail -fで監視し、別ターミナルから追記してリアルタイム更新を体験してみてください!