tail コマンドは、指定したファイルの末尾を表示するコマンドです。
オプションで末尾からの行数指定や、ファイル末尾の追尾(follow)を行うことができ、
特に ログの監視 で使用されることが多いです。
ログファイルの「直近のエラー行だけ確認したい」「今書き込まれているログをリアルタイムに追いかけたい」といった場面で、
ほぼ必ずといっていいほど登場する基本コマンドです。
tail [オプション]... [ファイル]...
ファイルを省略した場合は標準入力から読み込みます。
複数ファイルを指定した場合は、それぞれのファイル名をヘッダとして表示しつつ、末尾部分を順番に表示します。
末尾行数の指定には -n、リアルタイムに追尾する場合は -f や -F を使うのが基本パターンです。
・ファイルの末尾を出力する
tail /var/log/messages
/var/log/messages の末尾 10 行を表示します(行数を指定しない場合のデフォルトは 10 行)。
直近のログだけをざっくり確認したいときにまず使う形です。
・ファイルの末尾から 5 行分出力する
tail -5 /var/log/messages
古い書き方ですが、-5 のように数字だけを指定すると、その行数分の末尾を表示します。
より明示的に書くなら tail -n 5 /var/log/messages でも同じ結果になります。
・末尾から任意の行数を出力する(-n)
tail -n 100 /var/log/messages
-n は末尾から表示する行数を指定するオプションです。
この例では、最後の 100 行を表示します。直近の履歴をもう少し広く確認したいときに便利です。
・ファイルの末尾を追尾する(ログ監視:-f)
tail -f /var/log/messages
-f(–follow)は、ファイル末尾に新しい行が追加されるたびに、その内容を表示し続けるモードです。
アプリケーションログや OS ログをリアルタイムに監視するときに、最もよく使う形です。
終了するときは Ctrl + C で停止します。
・行数を指定して追尾する(-n と -f の組み合わせ)
tail -n 50 -f /var/log/messages
最初に表示する行数を 50 行にしつつ、その後の追記分もリアルタイムに表示します。
「直近 50 行 + これからのログ」を一度に確認したいときに使いやすい組み合わせです。
・ログローテーション後も追いかけ続ける(-F)
tail -F /var/log/messages
-F は、ログローテーションなどでファイルが差し替えられた場合でも、
新しいファイルを自動的に追いかけ続けるモードです(--follow=name --retry 相当)。
長時間ログを監視する場合は、tail -f よりも tail -F を使う方が安全なことが多いです。
・末尾から指定バイト数だけ表示する(-c)
tail -c 1024 large.log
-c は、末尾から表示するバイト数を指定します。
1 行が非常に長いログなどで、「最後の数行」ではなく「最後の一定サイズだけ」を見たい場合に使えます。
・複数のログファイルの末尾をまとめて追尾する
tail -F app1.log app2.log
複数ファイルを指定すると、それぞれのファイル名をヘッダとして表示しつつ、末尾を追尾します。
Web サーバとアプリケーションサーバなど、複数ログを同時に監視したいときに便利です。
・ヘッダを出さずに静かに複数ファイルの末尾を表示する(-q)
tail -q -n 20 app1.log app2.log
-q(–quiet)は、複数ファイル指定時のヘッダ表示を抑制します。
出力を他のコマンドにパイプする時など、余計な文字列を含めたくない場合に使います。
・ヘッダを必ず表示してファイル名を分かりやすくする(-v)
tail -v -n 20 app1.log app2.log
-v(–verbose)は、1 ファイルだけの場合でも常にヘッダ(ファイル名)を表示します。
人間がログを読むときに、「どのファイルの出力なのか」をはっきりさせたい場合に便利です。
・標準入力の末尾だけ確認する(パイプと組み合わせ)
grep "ERROR" /var/log/messages | tail -n 20
grep の結果から、最後の 20 行だけを確認する例です。
「検索結果の末尾だけ見たい」「直近のエラーだけざっと確認したい」ときに使います。
・更新チェックの間隔を変更する(-s)
tail -F -s 2 /var/log/messages
-s 秒数(–sleep-interval)は、-f や -F 使用時のファイル状態チェック間隔を指定します。
監視間隔を長めにして負荷を抑えたい場合などに調整します。
・先頭からの行番号を指定して、それ以降を表示する
tail -n +101 bigfile.txt
-n +行数 の形式を指定すると、「先頭からその行数までは飛ばして、それ以降を表示」という意味になります。
既に 100 行までは確認済みで、101 行目以降だけ改めて見たい、といった場合に使えます。
・アプリケーションログのリアルタイム監視
デプロイ直後や障害調査時に tail -F でアプリケーションログを追いかけるのは定番です。
grep や awk と組み合わせて、特定キーワードを含むログだけを tail することもよくあります。
・ログローテーションを伴う長時間の監視
ログローテートでファイル名が切り替わる環境では、tail -f だけだと新しいファイルを追従しない場合があります。
その場合は tail -F /var/log/messages としておくことで、ローテーション後も継続して監視できます。
・巨大なログファイルの「最後だけ」を見る
数 GB を超えるログをすべて読むのは現実的ではないため、
tail -n 1000 や tail -c 4096 などで、末尾部分だけを確認するのが実務的です。
・バッチ処理やバックグラウンドジョブの進捗確認
nohup や systemd などで動いているバッチ処理の進捗を、出力ログを tail -f しながら確認する、という使い方も定番です。
エラー専用ログと進捗ログをそれぞれ tail しておくと、原因調査がスムーズになります。
tail 自体はシンプルですが、-n / -f / -F / -q / -v / -s / -c を組み合わせて使いこなすことで、
ログ監視やトラブルシュートの効率を大きく高めることができます。
まずは tail /var/log/messages と tail -F を手に馴染ませておくと、現場で困りにくくなります。
| short option | long option | description |
|---|---|---|
| -n | --lines | 末尾から表示する行数を指定する(例: -n 100 で末尾 100 行を表示) |
| -c | --bytes | 末尾から表示するバイト数を指定する(例: -c 1024 で末尾 1024 バイトを表示) |
| -f | --follow | ファイル末尾に追記される内容を継続的に表示する(ログ監視で利用) |
| -F | ログローテーションなどでファイルが差し替えられても新しいファイルを追いかけ続ける(--follow=name --retry 相当) | |
| -q | --quiet | 複数ファイル指定時にファイル名のヘッダを表示しない |
| -v | --verbose | 1 ファイルだけの場合でも常にファイル名のヘッダを表示する |
| -s | --sleep-interval | -f や -F 使用時のファイル状態チェック間隔(秒)を指定する |
| --pid | 指定した PID が終了したタイミングで tail を終了する(--follow と併用して使用) | |
| -z | --zero-terminated | 行区切りとして改行ではなく NUL 文字を使用する入力を扱う |
| -h | --help | tail コマンドの使い方(ヘルプ)を表示して終了する |
| --version | tail コマンドのバージョン情報を表示して終了する |
ここでは GNU coreutils の tail コマンドでよく使われる主なオプションを TablePress の表としてまとめている想定です。
実際に利用できるオプションや挙動は、ディストリビューションやバージョンによって異なる場合があるため、
本番環境で使用する前に man tail で最新の仕様を確認してください。
新着情報
ブログランキングに参加しています。クリックして応援していただけると嬉しいです。
