ファイルの中身を確認したいとき、catで全行表示するのは長いファイルでは不便です。headは先頭N行、tailは末尾N行だけを素早く表示するコマンドで、Linuxの日常作業では毎日使うほど重要なツールです。
特にtail -fはサーバーログをリアルタイムで追いかけるときに欠かせません。VPSを運用するなら必ず覚えておきましょう。
本記事では、Ubuntu 24.04 LTS(Docker公式イメージ ubuntu:24.04)で実際に動かした結果をもとに、head・tailの使い方を体系的に解説します。
この記事のポイント
headはデフォルトで先頭10行、tailは末尾10行を表示(ubuntu:24.04 で実測確認)-n 数字で行数を指定、-c 数字でバイト数を指定できるtail -fでログファイルをリアルタイム追尾できる(VPS運用に必須)- Ubuntu 22.04のcoreutils 8.32 → Ubuntu 24.04でcoreutils 9.4に更新済み(実測)
-n +数字はtailの特殊構文で「N行目以降をすべて表示」できる
目次
- head・tailとは何か
- 基本的な使い方
- headコマンドのオプション詳解
- tailコマンドのオプション詳解
- tail -f でログをリアルタイム追尾する
- 複数ファイルを同時に表示する
- 実践的な活用例
- よくあるエラーと解決策
- まとめ
head・tailとは何か
headとtailは、GNU coreutilsパッケージに含まれるコマンドです。Ubuntu 24.04 LTSには最初からインストールされており、追加インストールは不要です。
head・tailの役割
- head:ファイルの「先頭」から指定した行数(またはバイト数)を表示する
- tail:ファイルの「末尾」から指定した行数(またはバイト数)を表示する
- どちらも
catより高速で、大きなファイルの一部確認に最適
Ubuntu 24.04ではhead・tailともに/usr/bin/に配置されており、GNU coreutils 9.4(Ubuntu 22.04は8.32)が使われています。
/usr/bin/head
/usr/bin/tail
$ head –version | head -1
head (GNU coreutils) 9.4
$ dpkg -s coreutils | grep Version
Version: 9.4-3ubuntu6.2

基本的な使い方
まず20行のテストファイルを作って、デフォルト動作を確認しましょう。
手順1:テストファイルを用意する
$ wc -l /tmp/test.txt
20 /tmp/test.txt
seq 1 20で1〜20の数字を生成し、/tmp/test.txtに書き込みます。
手順2:headで先頭を表示する
1
2
3
4
5
6
7
8
9
10
オプションなしではデフォルトで先頭10行が表示されます。
手順3:tailで末尾を表示する
11
12
13
14
15
16
17
18
19
20
こちらもデフォルトで末尾10行が表示されます。20行ファイルなら11〜20行目が返ってきます。

headコマンドのオプション詳解
①-n:表示する行数を指定する
最もよく使うオプションです。-nの後に行数を指定します。
1
2
3
4
5
-nは省略してhead -5と書くことも可能です(短縮形)。
②-n -N:末尾N行を除いて表示する(マイナス指定)
headならではの特殊な使い方です。-n -3のようにマイナスを付けると「末尾3行を除いた先頭」を表示します。
1
2
(中略)
17
(18・19・20行目は除外される)
20行ファイルでhead -n -3を実行すると、末尾3行(18・19・20)を除いた1〜17行が表示されます。ubuntu:24.04で実測確認しています。
③-c:バイト数で指定する
行ではなくバイト数で指定したい場合は-cを使います。
$ head -c 10 /tmp/bytes_test.txt
ABCDEFGHIJ
$ tail -c 12 /tmp/bytes_test.txt
inux Ubuntu
ファイルは51バイト(26文字+改行+10文字+改行+12文字+改行)です。head -c 10で先頭10バイト「ABCDEFGHIJ」が、tail -c 12で末尾12バイト「inux Ubuntu\n」が返ってきます。ubuntu:24.04で実測確認済みです。
tailコマンドのオプション詳解
①-n:末尾から指定行数を表示する
16
17
18
19
20
②-n +N:N行目以降をすべて表示する(プラス指定)
tailの-n +Nは「N行目以降をすべて表示」する特殊な使い方です。ヘッダー行をスキップしてCSVの本体を取り出したいときに便利です。
15
16
17
18
19
20
20行ファイルでtail -n +15を実行すると、15行目から最後まで(15〜20行)が表示されます。ubuntu:24.04で実測確認済みです。

③-c:バイト数で末尾を指定する
headと同様に-cでバイト数指定が可能です。ログの末尾を軽く確認したいときに役立ちます。
tail -f でログをリアルタイム追尾する
VPS運用で特に役立つのがtail -f(–follow)です。ファイルへの追記をリアルタイムで監視し続けるため、アプリケーションログやWebサーバーのアクセスログを確認するときに使います。
手順1:tail -f の基本構文
192.168.1.1 – – [13/Jun/2026:12:00:01 +0000] “GET / HTTP/1.1” 200 612
192.168.1.2 – – [13/Jun/2026:12:00:05 +0000] “GET /index.html HTTP/1.1” 200 1024
(ファイルに行が追記されるたびにリアルタイムで表示される)
^C
(Ctrl+C で終了)
注意
tail -fはCtrl+Cで終了するまで動き続けます。バックグラウンドで実行したい場合はtail -f /var/log/app.log &として、終了はkill %1などで行います。
手順2:tail -f を実際に試す(Dockerコンテナで実測)
ubuntu:24.04のDockerコンテナ内で実際に動作を確認しました。
$ echo ‘初期行2’ >> /tmp/follow_test.log
$ echo ‘初期行3’ >> /tmp/follow_test.log
$ timeout 2s tail -f /tmp/follow_test.log &
初期行1
初期行2
初期行3
$ echo ‘追記行A’ >> /tmp/follow_test.log
追記行A
$ echo ‘追記行B’ >> /tmp/follow_test.log
追記行B
$ echo ‘追記行C’ >> /tmp/follow_test.log
追記行C
(2秒後に tail -f が自動終了)

追記行A・B・Cが即座に表示されることを実測で確認しました。VPSでNginxやNode.jsのログを監視するときも同じ動作です。
手順3:–retry オプション(ローテーション後のログに追随)
ログローテーションでファイルが切り替わる環境ではtail -f --retryやtail -F(大文字のF)を使います。
# -F は –follow=name –retry と同等
# ログローテーション後も新しいファイルを自動追尾する
-f と -F の違い
tail -f:ファイルディスクリプタを追尾。ローテーション後は新ファイルを追わないtail -F:ファイル名を追尾。ローテーション後も同じファイル名の新ファイルを自動追尾
複数ファイルを同時に表示する
headとtailは複数のファイルをまとめて確認する用途にも便利です。
手順1:複数ファイルの同時確認
==> /tmp/file1.txt <==
1
2
3
==> /tmp/file2.txt <==
6
7
8
複数ファイルを渡すと自動的に==> ファイル名 <==というヘッダーが入ります。
手順2:-q オプションでファイル名を隠す
1
2
3
6
7
8

-q(–quiet)でファイル名ヘッダーが消えます。逆に単一ファイルでも必ずヘッダーを表示させたい場合は-v(–verbose)を使います。ubuntu:24.04で実測確認済みです。
実践的な活用例
①ログの末尾をgrepと組み合わせる
パイプでgrepを組み合わせることで、ログのエラー行だけを素早く探せます。
# 末尾100行から “error” を含む行だけ抽出
grepコマンドの詳細はを参照してください。
②CSVのヘッダーをスキップして本体を取り出す
# 2行目以降(ヘッダーを除くデータ本体)を別ファイルに保存
③headとtailを組み合わせて任意範囲を取り出す
15〜20行目だけが欲しい場合はheadで先頭20行を取り出し、さらにtailで末尾6行を絞り込みます。
15
16
17
18
19
20
sedコマンドを使った範囲指定についてはも参考になります。
④/etc/passwdでユーザー一覧を確認する
実際にubuntu:24.04のDockerコンテナで試すと、/etc/passwdの先頭5行は次のようになります。
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
Ubuntu 22.04 vs 24.04:coreutils のバージョン差
Ubuntu 22.04から24.04にアップグレードした場合、coreutilsのバージョンが上がります。基本的な動作は変わりませんが、バージョンを確認しておきましょう。

| 項目 | Ubuntu 22.04 LTS | Ubuntu 24.04 LTS |
|---|---|---|
| コードネーム | Jammy Jellyfish | Noble Numbat |
| coreutils バージョン | 8.32-4.1ubuntu1.3 | 9.4-3ubuntu6.2 |
| head/tail バージョン | GNU coreutils 8.32 | GNU coreutils 9.4 |
| tail -f / -F | あり | あり(動作改善) |
| サポート期限 | 2027年4月 | 2029年4月 |
バージョンはhead --versionで確認できます。Ubuntu 22.04では「GNU coreutils 8.32」、Ubuntu 24.04では「GNU coreutils 9.4」と表示されます(Dockerコンテナで実測)。
よくあるエラーと解決策
①「head: cannot open ‘…’ for reading: No such file or directory」
head: cannot open ‘/tmp/nonexistent.txt’ for reading: No such file or directory
ファイルが存在しないエラーです。ls /tmp/でファイル名を確認し、パスのスペルミスがないか確認してください。
②「tail: cannot open ‘…’ for reading: Permission denied」
tail: cannot open ‘/var/log/auth.log’ for reading: Permission denied
$ sudo tail /var/log/auth.log
(rootのみ読める認証ログが表示される)
システムログ(/var/log/auth.log、/var/log/syslogなど)は一般ユーザーには読めないことがあります。sudoを付けて実行してください。
③tail -f が反応しない
ファイルに追記が来るまで待機状態になるのは正常な動作です。別のターミナルから対象ファイルに書き込んでみてください。また、-n 0を付けると既存内容なしで追記だけを監視できます。
# 既存の行を表示せず、これ以降の追記だけを監視する
まとめ
head・tailコマンドは、Ubuntu上でのファイル確認作業に欠かせないツールです。Ubuntu 24.04(coreutils 9.4)で実測した結果をまとめます。
今回のまとめ
head/tailのデフォルトはどちらも10行(ubuntu:24.04で実測確認)-n 数字で行数指定、-c 数字でバイト数指定- tailの
-n +Nは「N行目以降」、headの-n -Nは「末尾N行を除く」という特殊構文 tail -fでリアルタイム追尾、tail -Fでログローテーション対応- 複数ファイルに
-qでファイル名ヘッダーを非表示にできる - Ubuntu 22.04はcoreutils 8.32、24.04は9.4(実測)
本格的にVPSでサーバーを運用したい方は、VPS各社の速度・コスト比較記事も参考にしてください。



コメント