Linux / コマンド / head - ファイルの先頭部分の行とバイトを出力

headは、ファイルや標準入力の先頭部分だけを出力するコマンドです。初期設定では最初の10行を表示し、ファイル形式やヘッダーを素早く確認したり、パイプラインの結果数を制限する際に使用します。

この記事ではheadの基本的な文法と主なオプション、実際の使用例、関連コマンドとの違い、使用時の注意点について説明します。

行数は-n、バイト数は-cで指定します。複数のファイルを指定した場合は、ファイル名のヘッダーを付けて各結果を区別します。GNUの実装では、負の数を指定して末尾を除いた残りを出力する拡張も提供しています。

基本的な文法

head [オプション] [ファイル ...]

オプションや詳細な動作は実装やバージョンによって異なる場合があります。現在のシステムではhead --helpとman headでインストールされたコマンドの説明を確認してください。

headの基本的な使い方

最初の10行を見る

オプションを省略すると、各入力の最初の10行が出力されます。

head access.log

希望の行数を出力する

-nの後に行数を指定します。

head -n 25 access.log

最初の数バイトを出力する

文字数ではなくバイト数なので、マルチバイト文字の境界が切れることがあります。

head -c 64 sample.bin

先頭部分だけを読み込んだ結果

head -n 2は入力の最初の2行だけを出力します。元の内容を変更せずに小さなサンプルを確認する際に便利です。

printf 'one\ntwo\nthree\n' | head -n 2

例の出力:

one
two

パイプ前のコマンドが大量のデータを生成する場合、headが早く終了するため、前のコマンドでパイプが切れるエラーが発生することがあります。自動化の際は、パイプライン全体の終了状態を確認してください。

主なオプション

オプション 説明
-n NUM 最初のNUM行を出力します。
-c NUM 最初のNUMバイトを出力します。
-q 複数のファイルを処理する際にファイル名ヘッダーを非表示にします。
-v ファイルが1つでもファイル名ヘッダーを表示します。
-n -NUM GNU 実装で最後の NUM 行を除いて出力します。
-c -NUM GNU 実装で最後の NUM バイトを除いて出力します。

実践的活用例

CSV ヘッダーとサンプルを確認する

先頭付近の行と一部のデータを素早く確認できます。ただしCSV(カンマ区切り形式)の引用符付きフィールドに改行が含まれると、1レコードが複数行にまたがります。head はCSVを解析するコマンドではなく、ここでは行の先頭部分を表示している点に注意してください。

head -n 6 sales.csv

複数ログの前部分を比較する

-v でファイル名を確実に表示し、結果の出所を区別します。

head -v -n 5 app.log worker.log

コマンド結果の一部だけを見る

入力を作る側のコマンドは、head が読み取りを終えてパイプを閉じると、SIGPIPE(読み手がいないパイプへ書いたときのシグナル)で終了することがあります。パイプラインの終了状態を解釈するときに注意します。例の find は探索順の最初の20行を表示するもので、最新順や最大サイズ順ではありません。ファイル名に改行がある場合は行数とファイル数も一致しません。

find /var/log -type f | head -n 20

headと関連コマンドの比較

コマンド 主な役割 適した状況
head 先頭部分の出力 ヘッダーとサンプルの確認
tail 末尾部分の出力・追跡 最近のログ確認
sed 範囲選択と編集 複雑な行範囲の処理
less 対話型全体探索 長いファイルの検索

使用する際の注意点

-cは文字数ではありません

UTF-8文字の途中で切ると、不完全な文字列になることがあります。UTF-8は文字を1バイト以上で表す符号化方式です。バイナリの先頭を調べるときは、制御バイトが端末へ直接送られないよう od や xxd などの表示方法も検討してください。

並べ替え前のheadは元の順序に従います

最大値や最新の項目が欲しい場合は、まず適切に並べ替える必要があります。

パイプの終了状態を確認する

set -o pipefail環境では、前のコマンドのSIGPIPEが失敗のように見えることがあります。

FAQ

デフォルトで何行出力しますか?

通常は最初の10行です。

最初の1行だけ見たい場合はどうしますか?

head -n 1 ファイル を使用します。

最後の行はどのコマンドで見ますか?

tail を使用します。

最初の1KBだけ出力できますか?

GNU版で1000バイトなら head -c 1KB ファイル と指定します。head -c 1K ファイル や 1KiB は1024バイトです。単位の違いと、対象の実装で使える接尾辞を確認してください。

参考資料