tail コマンドは、テキストファイルの末尾部分を表示するLinux/Unix標準コマンドです。ログファイルの最新記録を確認したり、-f オプションでリアルタイムに追記を監視したりする用途でよく使われます。本記事では tail コマンドの基本構文・主なオプション・実行例・注意点を整理し、tail -f を終了する方法までまとめて解説します。
tail コマンドとは
tail はファイルの末尾(後ろ)部分を表示するコマンドです。何も指定しなければ末尾10行を表示します。ログファイルは新しい記録ほど末尾に追記されていくため、直近の状態を素早く確認する用途でよく利用されます。-f(follow)オプションを付けると、ファイルに追記されるたびに新しい行を表示し続けるため、サーバーやアプリケーションのログをリアルタイムで監視する場面で重宝します。GNU Coreutilsの一部として、ほとんどのLinuxディストリビューションに標準搭載されています。
tail コマンドの基本構文
tail [オプション] [ファイル...]
ファイルを複数指定すると、それぞれのファイル名をヘッダーとして表示しながら末尾部分を出力します。ファイルの先頭部分を表示したい場合は「head – ファイルの先頭を表示するコマンド」を使います。
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
| (なし) | ファイル末尾10行を表示 | tail /var/log/syslog |
-n NUM | 指定した行数を末尾から表示 | tail -n 50 /var/log/syslog |
-n +NUM | NUM行目以降をすべて表示(先頭からの指定) | tail -n +5 access.log |
-f | ファイル末尾を継続的に監視(追記を表示) | tail -f /var/log/syslog |
-F | -f と同じだがログローテーション(ファイルの再作成)にも追従する | tail -F /var/log/syslog |
-c NUM | 末尾から指定したバイト数を表示 | tail -c 100 syslog.txt |
--pid=PID | 指定したプロセスが終了したら -f を自動的に終了 | tail -f --pid=1234 /var/log/syslog |
-q | 複数ファイルを表示する際にヘッダー(ファイル名)を表示しない | tail -q file1 file2 |
実行例
ファイルの末尾10行を表示
オプションなしで実行すると、末尾10行が表示されます。
tail /var/log/syslog
出力例(例示):
Jul 20 09:00 server systemd[1]: Started Session 42 of user alice.
Jul 20 09:01 server sshd[1234]: Accepted password for bob from 192.168.1.20 port 54321 ssh2
...
行数を指定して表示(-n)
# 末尾50行を表示
tail -n 50 /var/log/syslog
# 5行目以降をすべて表示(先頭からの指定)
tail -n +5 access.log
バイト数を指定して表示(-c)
tail -c 100 syslog.txt
ログをリアルタイム監視(-f)
tail -f /var/log/syslog
新しい行がファイルに追記されるたびに、その行が画面に表示され続けます。デプロイ直後にアプリケーションログを監視したり、障害発生時にエラーの発生をリアルタイムで確認したりする際によく使われます。grep と組み合わせて特定のキーワードだけを抽出することも可能です。
# ERROR を含む行だけをリアルタイムに抽出
tail -f /var/log/syslog | grep ERROR
grep の詳しいオプションや正規表現の使い方は「Linux grep コマンドの使い方完全ガイド|基本構文・オプション一覧・正規表現・除外検索」を参照してください。
ログローテーションに追従して監視(-F)
logrotate などでログファイルが定期的に別名へリネームされ、新しい空ファイルが同名で作られる環境では、-f だと古いファイルの監視を続けてしまい新しいログを検知できません。-F を使うと、ファイルが再作成されたことを検知して新しいファイルの監視に自動的に切り替わります。
tail -F /var/log/nginx/access.log
プロセス終了に合わせて監視を終了(–pid)
tail -f --pid=1234 /var/log/syslog
PID 1234 のプロセスが終了すると、tail も自動的に終了します。対象プロセスのPIDは「pgrep – 条件に一致するプロセスのPIDを検索する」で調べられます。
複数ファイルの末尾を表示
tail -n 5 file1.txt file2.txt
出力例:
==> file1.txt <==
(末尾5行)
==> file2.txt <==
(末尾5行)
ヘッダーを表示せず本文だけをまとめて出力したい場合は -q を付けます。
tail -q -n 5 file1.txt file2.txt
エラー例(存在しないファイル)
tail missing.txt
出力例:
tail: cannot open 'missing.txt' for reading: No such file or directory
tail -f を終了する方法
tail -f はファイルを監視し続けるため、コマンド自体は終了せず端末を占有し続けます。抜け出すには、監視しているターミナル上で Ctrl+C を押してください。これは tail プロセスにSIGINT(中断シグナル)を送って終了させる操作です。
tail -f /var/log/syslog
# Ctrl+C を押すとプロンプトに戻る
バックグラウンドで起動した tail -f を終了したい場合は、ps や pgrep でPIDを確認し、kill でプロセスを終了させます。
# tail -f のPIDを確認
pgrep -f "tail -f"
# 該当PIDを終了
kill 1234
kill コマンドの使い方や安全なプロセス終了の手順は「killコマンドとプロセス管理:ps, lsofを使った安全なプロセス終了の手順」で解説しています。あらかじめ監視対象プロセスの終了と連動させたい場合は、前述の --pid=PID オプションを使うと kill なしで自動終了できます。
head コマンドとの違い
| 比較項目 | tail | head |
|---|---|---|
| 表示する位置 | ファイルの末尾 | ファイルの先頭 |
| 既定の表示行数 | 10行 | 10行 |
| リアルタイム監視 | -f / -F で可能 | 不可(静的な内容のみ) |
| 主な用途 | ログの最新状態確認、追記監視 | ファイル冒頭の確認(ヘッダー行など) |
ログの最新状態を追いたい場合は tail、CSVのヘッダー行や設定ファイルの先頭部分だけを確認したい場合は head を使い分けます。head の詳しい使い方は「head - ファイルの先頭を表示するコマンド」を参照してください。ファイル全体を確認したい場合は「catコマンドとは?使い方・オプション一覧・実行例をわかりやすく解説」、長いファイルをスクロールしながら閲覧したい場合は「less - ファイル内容をページ単位で閲覧する」が適しています。
tail コマンドを使うときの注意点
ログローテーション環境では -f ではなく -F を使う
logrotate でログファイルが定期的に切り替わる環境で -f を使い続けると、ローテーション後の新しいファイルを検知できず監視が止まったように見えます。継続的にログを監視する運用では -F を使ってください。systemdのジャーナルログを対象にする場合は journalctl の方が適しています。詳しくは「journalctlオプション一覧|systemdログの確認・サービス指定・時刻指定を解説」を参照してください。
大量出力が続く場合はバックグラウンド実行を検討する
tail -f は端末を専有し続けるため、監視しながら別の作業をしたい場合は screen や tmux のセッション内で実行するか、出力をファイルにリダイレクトしてバックグラウンド実行します。
# バックグラウンドで実行し、出力をファイルに保存
tail -f /var/log/syslog > tail_output.log &
一般ユーザーでは権限エラーになる場合がある
/var/log/syslog など一部のシステムログは、一般ユーザーに読み取り権限がない場合があります。その際は sudo tail -f /var/log/syslog のように sudo を付けて実行します。sudo の使い方は「sudo コマンドの使い方|root 権限の取得と sudoers の設定」を参照してください。
tail コマンドに関するよくある質問
tail コマンドの使い方は?
tail [オプション] [ファイル...] の構文で使います。何も指定しなければファイル末尾10行を表示し、-n で行数指定、-f でリアルタイム監視ができます。詳しくは本記事の「tail コマンドの基本構文」以降の各セクションを参照してください。
tail -f を終了する方法は?
監視しているターミナルで Ctrl+C を押すと終了します。バックグラウンドで実行している場合は、pgrep -f "tail -f" でPIDを調べて kill します。監視対象プロセスの終了と連動させたい場合は --pid=PID オプションが使えます。
tail コマンドで100行表示するには?
tail -n 100 ファイル名 のように -n オプションで表示行数を指定します。逆に先頭からの行数を基準にしたい場合は tail -n +100 ファイル名 と指定すると、100行目以降をすべて表示できます。
tail -f と -F の違いは?
どちらもファイルの追記をリアルタイムに表示しますが、-F はログローテーションでファイルが再作成された場合にも新しいファイルの監視に自動的に切り替わります。logrotate を使う本番環境では -F の使用を推奨します。
よく使うコマンドパターン集
# 末尾10行を表示
tail /var/log/syslog
# 末尾100行を表示
tail -n 100 /var/log/syslog
# リアルタイム監視
tail -f /var/log/syslog
# ログローテーションに追従して監視
tail -F /var/log/nginx/access.log
# 特定プロセス終了と連動して監視を終了
tail -f --pid=$(pgrep -o myapp) /var/log/myapp.log
# ERROR を含む行だけをリアルタイム抽出
tail -f /var/log/syslog | grep ERROR
# バックグラウンドで監視しファイルに保存
tail -f /var/log/syslog > tail_output.log &
# 複数ファイルをヘッダーなしでまとめて末尾表示
tail -q -n 5 file1.txt file2.txt
関連コマンド
- head : ファイルの先頭を表示
- less : ファイルをページ単位で閲覧
- cat : ファイルの内容をすべて表示
- grep : 特定の文字列を検索
- journalctl : systemdジャーナルログの確認
参考
- manページ: man7.org tail(1)
- GNU Coreutils: https://www.gnu.org/software/coreutils/

コメント