「ログファイルの冒頭だけ見たいのに、lessを開くほどでもない」
ファイルの中身を全部見る必要がない場面は、実務では意外と多いものです。
この記事では、ファイルの先頭部分だけを表示する
head(ヘッド)コマンド の実践的な使い方を解説します。基本的な先頭表示から、行数・バイト数の指定、パイプとの組み合わせ、複数ファイルの同時表示まで、現場で使うテクニックをまとめました。
headコマンドとは?(tailとの違い)
head はファイルの先頭(最初の部分)を表示するコマンドです。名前のとおり「頭」の部分だけを取り出します。反対にファイルの末尾を表示する
tail コマンドと対になるコマンドで、どちらもオプションを省略すると 10行 を表示します。・
head:ファイルの先頭から表示する(設定ファイルのヘッダー確認、CSVの構造把握に便利)・
tail:ファイルの末尾から表示する(ログの最新部分を確認するのに便利)設定ファイルの冒頭を確認したり、CSVやTSVの1行目(ヘッダー行)を見たりする場面では
head の方が適しています。基本的な使い方(先頭10行を表示する)
もっともシンプルな使い方は、ファイル名を指定するだけです。デフォルトで先頭10行が表示されます。# /etc/passwd の先頭10行を表示する $ head /etc/passwd
1. 表示する行数を指定する(-n)
デフォルトの10行では多い、または足りない場合、-n オプションで行数を指定できます。# 先頭5行を表示する $ head -n 5 /etc/passwd # -n を省略して数字だけでも同じ結果になる $ head -5 /etc/passwd
-n に -(マイナス)を付けると、「末尾N行を除いた残り」を表示できます。ファイルの最後の数行だけ除外したい時に便利です。# 末尾3行を除いた残りを表示する $ head -n -3 /var/log/messages
2. バイト数を指定して表示する(-c)
行数ではなくバイト数で指定したい場合は-c オプションを使います。バイナリファイルの先頭を確認する場合などに使うことがあります。# 先頭100バイトを表示する $ head -c 100 /var/log/messages
3. 複数ファイルの先頭を同時に表示する
head に複数のファイルを指定すると、各ファイルの先頭がヘッダー付きで表示されます。複数の設定ファイルを見比べたい時に重宝します。# 2つのファイルの先頭5行をそれぞれ表示する $ head -n 5 /etc/hostname /etc/resolv.conf # 出力例: # ==> /etc/hostname <== # server01 # # ==> /etc/resolv.conf <== # nameserver 8.8.8.8 # nameserver 8.8.4.4
パイプと組み合わせて使う(実務の定番テクニック)
head はパイプ(|)と組み合わせることで、他のコマンドの出力結果から先頭部分だけを取り出せます。実務で非常によく使うテクニックです。1. コマンド出力の先頭だけを表示する
# 最近変更されたファイルの上位5件を表示する $ ls -lt /var/log/ | head -5 # ディスク使用量の大きいディレクトリ上位10件を表示する $ du -sh /var/* | sort -rh | head -10 # プロセスをCPU使用率順に上位5件表示する $ ps aux --sort=-%cpu | head -6
ps aux の場合、1行目がヘッダー行なので、結果を5件表示したい場合は head -6(ヘッダー1行 + データ5行)を指定します。2. CSVやTSVのヘッダー行を確認する
データファイルの構造を素早く把握したい場合、先頭の数行を見るだけで十分なことがほとんどです。# CSVファイルのヘッダーと最初の3行を確認する $ head -n 4 data.csv # タブ区切りの列数を確認する(1行目を取り出してawkでカウント) $ head -1 data.tsv | awk -F' ' '{print NF}'
3. headとtailを組み合わせて特定範囲を抽出する
ファイルの「N行目からM行目まで」を表示したい場合、head と tail を組み合わせます。# 11行目から20行目を表示する(先頭20行を取り出し、その末尾10行を表示) $ head -n 20 /etc/passwd | tail -n 10 # sedでも同じことができる $ sed -n '11,20p' /etc/passwd
実務で使えるheadのTips
大きなファイルの先頭を安全に確認する
数万行のログファイルに対してcat を実行すると、画面が高速でスクロールしてターミナルが操作しづらくなります。head を使えば、先頭の必要な分だけを素早く安全に確認できます。# 巨大なログファイルの先頭20行だけ確認する $ head -n 20 /var/log/httpd/access_log
/var/log/ 配下のログファイルは数百MBになることも珍しくないため、cat ではなく head・tail・less を使い分ける習慣をつけてください。ファイルの文字コードやBOMを確認する
Windowsで作成されたファイルをLinuxで扱う際、先頭にBOM(Byte Order Mark)が付いていてトラブルになることがあります。head -c 3 と xxd を組み合わせると、BOMの有無を簡単に確認できます。# ファイル先頭3バイトを16進数で確認する(ef bb bf ならBOM付きUTF-8) $ head -c 3 file.txt | xxd
headが表示されない・動作がおかしい時の対処法
1. 空の出力が返ってくる場合
head を実行しても何も表示されない場合、そもそもファイルが空(0バイト)の可能性があります。ls -l でファイルサイズを確認してください。# ファイルサイズを確認する(0なら空ファイル) $ ls -l /var/log/messages
2. バイナリファイルを指定して画面が乱れた場合
バイナリファイル(実行ファイルや画像ファイル)をhead で表示すると、制御文字が出力されて画面が乱れることがあります。その場合は reset コマンドでターミナルを復旧してください。# ターミナルの表示をリセットする $ reset
本記事のまとめ(headオプション早見表)
| やりたいこと | コマンド |
|---|---|
| 先頭10行を表示する(デフォルト) | head ファイル名 |
| 先頭N行を表示する | head -n 20 ファイル名 |
| 末尾N行を除いた残りを表示する | head -n -3 ファイル名 |
| 先頭Nバイトを表示する | head -c 100 ファイル名 |
| 複数ファイルの先頭を表示する | head -n 5 ファイル1 ファイル2 |
| コマンド出力の先頭N件を取り出す | コマンド | head -n 10 |
| N行目~M行目を抽出する | head -n M ファイル名 | tail -n (M-N+1) |
Linuxのファイル操作をもっと体系的に学びたいですか?
headコマンドはLinuxの基本操作の一つですが、実務ではファイル操作・パーミッション・パイプの組み合わせなど、体系的な知識が求められます。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
登録10秒/自動返信でDL/合わなければ解除3秒
