Linuxを使っていると、ログファイルやCSVファイルの最初の数行だけを確認したい場面があります。ファイル全体を表示すると内容が多すぎる場合に便利なのが、headコマンドです。
headコマンドを使うと、ファイルの先頭10行を表示したり、表示する行数を指定したりできます。
この記事では、Linuxのheadコマンドの基本的な使い方から、主なオプション、複数ファイルやほかのコマンドと組み合わせる方法まで、初心者向けにわかりやすく解説します。
Linuxのheadコマンドとは?

Linuxのheadコマンドとは、ファイルの先頭部分を表示するコマンドです。行数を指定しなければ、先頭の10行を表示します。
例えば、長いログファイルを開く前に、冒頭だけを確認したいときに使用できます。headコマンドは内容を表示するだけで、元のファイルは書き換えません。
基本構文は次のとおりです。
head [オプション] [ファイル名...]ファイル名は1つだけでも、複数指定してもかまいません。ファイル名を指定しなかった場合は、標準入力から受け取った内容を表示します。
本記事のコマンド例は、主にLinuxで一般的に使用されているGNU Coreutils版のheadを前提としています。
headコマンドの基本的な使い方
まずは、sample.txtに次の12行が書かれているとします。
1行目
2行目
3行目
4行目
5行目
6行目
7行目
8行目
9行目
10行目
11行目
12行目このファイルの先頭を確認するには、次のコマンドを実行します。
head sample.txt実行結果は次のとおりです。
1行目
2行目
3行目
4行目
5行目
6行目
7行目
8行目
9行目
10行目行数を指定していないため、先頭から10行が表示され、11行目と12行目は表示されません。
headコマンドの主なオプション
headコマンドでよく使用するオプションは次のとおりです。
| オプション | 長い形式 | 説明 |
-n 行数 | --lines=行数 | 先頭から指定した行数を表示する |
-n -行数 | --lines=-行数 | 末尾の指定した行数を除いて表示する |
-c バイト数 | --bytes=バイト数 | 先頭から指定したバイト数を表示する |
-c -バイト数 | --bytes=-バイト数 | 末尾の指定したバイト数を除いて表示する |
-v | --verbose | ファイル名の見出しを常に表示する |
-q | --quiet、--silent | ファイル名の見出しを表示しない |
短い形式と長い形式は、同じ機能を指定する別の書き方です。例えば、head -n 5 sample.txtとhead --lines=5 sample.txtは同じ結果になります。
-n:先頭から指定した行数を表示する
-nオプションを使用すると、表示する行数を変更できます。
例えば、sample.txtの先頭5行を表示するには、次のコマンドを実行します。
head -n 5 sample.txt実行結果は次のとおりです。
1行目
2行目
3行目
4行目
5行目head -5 sample.txtという書き方もありますが、古い形式のため、現在はhead -n 5 sample.txtのように指定する方法がおすすめです。
-n -行数:末尾の指定した行数を除いて表示する
GNU版のheadでは、-nにマイナス付きの行数を指定すると、末尾の指定した行数を除いた内容を表示できます。
例えば、12行あるsample.txtの末尾2行を除いて表示するには、次のコマンドを実行します。
head -n -2 sample.txt実行結果は次のとおりです。
1行目
2行目
3行目
4行目
5行目
6行目
7行目
8行目
9行目
10行目「先頭からマイナス2行を表示する」という意味ではなく、「最後の2行を表示対象から外す」という意味です。
-c:先頭から指定したバイト数を表示する
-cオプションを使用すると、行数ではなくバイト数で表示範囲を指定できます。
例えば、ファイルの先頭100バイトを表示するには、次のコマンドを実行します。
head -c 100 sample.txt-cで指定する単位は文字数ではなくバイト数です。日本語などは1文字が複数バイトで表されるため、文字の途中で表示が切れることがあります。また、指定した位置に改行がなければ、表示結果の直後にターミナルの入力欄が続くことがあります。
-c -バイト数:末尾の指定したバイト数を除いて表示する
-cにもマイナス付きの値を指定できます。
例えば、ファイルの末尾10バイトを除いて表示するには、次のコマンドを実行します。
head -c -10 sample.txtこれは「先頭の10バイトを表示する」という意味ではありません。最後の10バイト以外を表示する指定です。
-c 1K:バイト数に単位を付けて指定する
GNU版のheadでは、-cの数値に単位を付けて指定できます。
例えば、Kは1024倍、KBは1000倍を意味します。
data.binの先頭1024バイトを表示するには、次のコマンドを実行します。
head -c 1K data.binファイルが1024バイトより短い場合は、存在する範囲だけが表示されます。
一方、次のように1KBと指定した場合はdata.binの先頭1000バイトを表示します。
head -c 1KB data.bin-nでも数値に単位を付けられますが、行数を指定する場合は-n 5のように単位なしで書くことが一般的です。
-nと-cを同時に指定した場合
GNU版のheadでは、-nと-cを同じコマンドに指定できます。ただし、行数とバイト数の両方で範囲を絞る動作にはならず、後に指定した方が有効になります。
例えば、次のコマンドでは最後に-c 3を指定しているため、先頭3バイトを表示します。
printf 'alpha\nbeta\ngamma\n' | head -n 2 -c 3実行結果はalpです。一方、オプションの順序を入れ替えると、最後に指定した-n 2が有効になり、先頭2行を表示します。
printf 'alpha\nbeta\ngamma\n' | head -c 3 -n 2
# 実行結果
alpha
beta行数で表示したい場合は-n、バイト数で表示したい場合は-cのどちらか一方を指定すると、コマンドの意図が伝わりやすくなります。
-v:ファイル名の見出しを常に表示する
通常、ファイルを1つだけ指定した場合、ファイル名の見出しは表示されません。ファイル名の見出しを表示したいときは、-vオプションを使用します。
例えば、次のコマンドを実行します。
head -v -n 2 file1.txt実行結果は次のとおりです。
==> file1.txt <==
A
B長い形式では--verboseと指定できます。
複数ファイルの先頭を表示する
headコマンドには、複数のファイルを指定できます。
例えば、file1.txtとfile2.txtの先頭2行ずつを表示するには、次のコマンドを実行します。
head -n 2 file1.txt file2.txtfile1.txtの先頭2行がAとB、file2.txtの先頭2行がXとYの場合、実行結果は次のとおりです。
==> file1.txt <==
A
B
==> file2.txt <==
X
Y複数ファイルを指定すると、-vオプションを付けなくても、どのファイルの内容かを区別できるように、ファイル名の見出しが表示されます。
-q:ファイル名の見出しを表示しない
ファイル名の見出しが不要な場合は、-qオプションを指定します。
例えば、次のコマンドを実行します。
head -q -n 2 file1.txt file2.txt実行結果は次のとおりです。
A
B
X
Y各ファイルの内容だけが表示されます。長い形式では--quietまたは--silentと指定できます。
複数のファイルをまとめて指定する
シェルのワイルドカード(*)を使用すると、名前が条件に合う複数のファイルをまとめて指定できます。
例えば、カレントディレクトリにある.logファイルの先頭2行ずつを表示するには、次のコマンドを実行します。
head -n 2 *.log*.logは、名前が.logで終わるファイルにシェルが展開します。該当するファイルがない場合や、対象に読み取り権限がない場合は、エラーが表示されることがあります。
ほかのコマンドの出力から先頭だけを表示する
headは、パイプ(|)を使ってほかのコマンドの出力を受け取ることもできます。
例えば、seqコマンドで1から20までの数字を出力し、その先頭5行だけを表示するには、次のコマンドを実行します。
seq 1 20 | head -n 5実行結果は次のとおりです。
1
2
3
4
5seq 1 20の出力がパイプを通じてheadに渡され、先頭5行だけが表示されます。
ファイル名を指定しない場合
ファイル名を指定せずにheadを実行すると、キーボード入力などの標準入力から内容を受け取ります。ファイル名として-を指定した場合も同様です。
head入力を終了するときはCtrl + Dで入力の終わりを伝えます。Ctrl + Cでコマンドを中断することもできます。通常は、前述のパイプと組み合わせて使用します。
headコマンドでよくあるエラー
存在しないファイルを指定すると、ファイルを開けないことを示すエラーが表示されます。
例えば、次のコマンドを実行します。
head missing.txtGNU版のheadでは、次のようなエラーが表示されます。
head: cannot open 'missing.txt' for reading: No such file or directoryこの場合は、ファイル名や現在いるディレクトリを確認してください。また、ファイルが存在していても、読み取り権限がなければ内容を表示できません。
head・tail・catの違い
ファイルの内容を確認するコマンドには、head以外にもtailやcatがあります。
| コマンド | 表示する内容 | 主な用途 |
head | ファイルの先頭部分 | 冒頭の数行を確認する |
tail | ファイルの末尾部分 | ログの最後などを確認する |
cat | ファイル全体 | 短いファイルの内容を確認する |
例えば、先頭5行と末尾5行は、それぞれ次のコマンドで確認できます。
head -n 5 sample.txt
tail -n 5 sample.txt長いファイルを少しずつ読み進めたい場合は、lessコマンドも便利です。
本記事のまとめ
この記事では「Linuxのheadコマンド」について、以下の内容を説明しました。
headは、ファイルや標準入力の先頭部分を表示するコマンド- 行数を指定しない場合は、先頭の10行を表示する
-nで行数、-cでバイト数を指定でき、長い形式のオプション名も使用できる- GNU版では
-c 1Kのように単位を付けて指定できる -nと-cを同時に指定すると、後に指定した方が有効になる
まずはhead ファイル名で先頭10行を確認し、必要に応じて-nで行数を変更してみてください。
お読みいただきありがとうございました。