🎯 この記事で学べること
- 1headコマンドでファイルの先頭部分を素早く確認できるようになります
- 2tailコマンドでファイルの末尾や最新情報を瞬時に把握できます
- 3tail -fを使ったリアルタイムログ監視の技術をマスターできます
- 4特定範囲の行を抽出するテクニックが身につきます
- 5他のコマンドと組み合わせた高度なログ分析手法を習得できます
読了時間: 約10分
はじめに
こんにちは!今日は「tail」と「head」という、とっても便利なコマンドを学んでいきましょう。
「大きなログファイルの最新情報だけ見たい...」「ファイルの最初の数行だけ確認したい...」そんな経験はありませんか?
tailとheadは、まるで本の「目次」や「あとがき」をパッと見るように、ファイルの一部だけを素早く表示できるコマンドなんです!
tailとheadコマンドって何?
簡単に言うと:
- head:ファイルの「頭(先頭)」を表示
- tail:ファイルの「尻尾(末尾)」を表示
覚え方は簡単ですね!英語の意味そのままです。
例えば、1万行もあるログファイルを全部開くのは大変ですが、tailを使えば最新の10行だけを瞬時に確認できます!
🎮 理解度チェック
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
オプションで好きな行数を指定できます。覚えやすいですね!
ファイルツリー
複数ファイルの処理
複数のファイルを一度に確認したいときも大丈夫です!
# 複数ファイルの先頭を表示
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で終了できますよ!
ファイルツリー
🎮 理解度チェック
実践的な使用例
ログファイルの監視
実際の開発や運用で一番使うのがこれです!
# システムログの監視
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文字を除く
ファイルツリー
パイプラインでの活用(組み合わせの威力)
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
より賢く、ファイルが削除・再作成されても追跡し続けます。ログローテーションがある環境では必須です!
🎮 理解度チェック
実用的なユースケース
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)"
ファイルツリー
パフォーマンスの考慮(大きなファイルを扱うとき)
大きなファイルの処理
数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'
tailf
はtail -f
の短縮形として多くの人が使っています。指が覚えてしまうほど便利ですよ!
📝 まとめ
今日はtailとheadコマンドについて学びました!
- headはファイルの「頭(先頭)」、tailは「尻尾(末尾)」を表示
- tail -fでリアルタイムログ監視が可能(これが最強!)
- パイプで組み合わせて特定範囲の行を抽出できる
- grepやawkと連携して強力なログ分析ツールに
- 大きなファイルでも高速に動作
特にtail -f
は、システム管理者や開発者にとって必須のコマンドです。ログファイルをリアルタイムで監視できるので、問題が発生した瞬間を逃さずキャッチできます。
まずはtail -f
でログ監視から始めてみましょう。慣れてきたら、パイプで他のコマンドと組み合わせて、より高度なログ分析に挑戦してみてくださいね!
今日の練習: まずtail -5 /etc/passwd
で最後の5行を表示してみましょう。次に、適当なログファイルを作ってtail -f
で監視し、別ターミナルから追記してリアルタイム更新を体験してみてください!