【Linux】headコマンドの使い方!ファイルの先頭を表示する方法!

Linuxを使っていると、ログファイルやCSVファイルの最初の数行だけを確認したい場面があります。ファイル全体を表示すると内容が多すぎる場合に便利なのが、headコマンドです。

headコマンドを使うと、ファイルの先頭10行を表示したり、表示する行数を指定したりできます。

この記事では、Linuxのheadコマンドの基本的な使い方から、主なオプション、複数ファイルやほかのコマンドと組み合わせる方法まで、初心者向けにわかりやすく解説します。

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.txt

file1.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
5

seq 1 20の出力がパイプを通じてheadに渡され、先頭5行だけが表示されます。

ファイル名を指定しない場合

ファイル名を指定せずにheadを実行すると、キーボード入力などの標準入力から内容を受け取ります。ファイル名として-を指定した場合も同様です。

head

入力を終了するときはCtrl + Dで入力の終わりを伝えます。Ctrl + Cでコマンドを中断することもできます。通常は、前述のパイプと組み合わせて使用します。

headコマンドでよくあるエラー

存在しないファイルを指定すると、ファイルを開けないことを示すエラーが表示されます。

例えば、次のコマンドを実行します。

head missing.txt

GNU版の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で行数を変更してみてください。

お読みいただきありがとうございました。

スポンサーリンク