head -c コマンド情報まとめ
ターミナルの head -c コマンドについて、基本的な使い方からバイト数を指定するオプションの応用方法、tail -c コマンドとの違いなどを紹介しています。
head -cとは
head -c は、指定されたファイルや標準入力の最初の部分から、指定した「バイト数」だけを切り出して表示するためのLinux/macOSコマンドの機能です。
行単位ではなく、純粋なデータサイズ(バイト数)でファイルの先頭部分を切り出したい場合に非常に便利です。
オプション「-c」の意味と主要オプション
| オプション | 意味 |
|---|---|
-c バイト数, --bytes=バイト数 | 指定したバイト数分だけ先頭から出力する(バイト数の前にマイナス - を付けると、末尾の指定バイト数を除いたすべてを出力) |
-n 行数, --lines=行数 | 指定した行数分だけ先頭から出力する |
-q, --quiet, --silent | 複数のファイルを指定した際に、ファイル名を表示するヘッダーを出力しない |
-v, --verbose | 常にファイル名を表示するヘッダーを出力する |
-c オプションは、表示するデータサイズをバイト単位で明示的に指定するために使用します。
また、バイト数には以下のようなマルチプライヤ(単位サフィックス)を使用することも可能です。
・b: 512 バイト
・K: 1024 バイト (KBは1000バイト)
・M: 1048576 バイト (MBは1000000バイト)
GNU版の head では、-c -100 のように負の数値を指定すると、「末尾の100バイトを除外したすべてのデータ」を出力することができます。
バイナリファイルの一部をトリミングする際などに役立ちます。
よく使う組み合わせ
ファイルの先頭100バイトを表示する
head -c 100 example.txt
指定したファイルの先頭から100バイト分だけを抽出し表示します。
文字コードのヘッダー部分や、バイナリファイルのマジックナンバー(ファイル形式の識別データ)をサクッと確認したい場合に便利です。
末尾の50バイトを除外してすべて表示する
head -c -50 input.dat
ファイルの末尾50バイトだけを取り除いた、それ以外のすべてのデータを出力します。
バイナリデータのフッターに含まれる不要な制御コードや余白を削る処理に最適です。
ランダムな文字列(パスワード等)を生成する
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 16
ランダムなデータを生成する /dev/urandom から文字を抽出し、head -c 16 で最初の16バイト(=16文字)だけを切り出して出力します。
開発環境の初期パスワードやトークンを生成する際の超定番コマンドです。
head -c vs tail -c の違い
どちらもバイト数を基準にしてデータの一部を切り出すコマンドですが、抽出する位置が異なります。
| 項目 | head -c | tail -c |
|---|---|---|
| 抽出する位置 | ファイルの「先頭」部分 | ファイルの「末尾」部分 |
| 単位指定の互換性 | バイト単位(サフィックス指定可) | バイト単位(サフィックス指定可) |
| 主な用途 | マジックナンバー確認、ランダム文字列生成 | バイナリファイルの末尾トリミング、ファイルの追記部分チェック |
head -c はファイルの先頭ヘッダー情報を取得するのに優れており、tail -c は末尾に埋め込まれたメタデータなどを読み取るのに最適です。
ユースケース
バイナリファイルの種類(ファイルシグネチャ)の判定
head -c 4 image.png | od -An -tx1
画像の先頭4バイトを抽出し、16進数で表示することで、ファイル拡張子が偽装されていないか(PNGファイルのシグネチャである 89 50 4e 47 があるか)を確認できます。
巨大ファイルの最初のデータサンプル抽出
head -c 1M large_data.bin > sample.bin
数ギガバイトある超巨大なバイナリデータから、テスト用として先頭の1メガバイト分(1M)だけを瞬時にコピーしてサンプルファイルを作成できます。
AIエージェントが実行しようとした場合
AIエージェントの目的
AIエージェントは主に次のような目的で head -c を実行しようとすることがあります。
- バイナリファイルのシグネチャを確認し、ファイル形式を判別するため
- ランダム文字列生成コマンドを組み合わせて、ランダムなAPIキーやパスワードなどを生成するため
- 巨大ファイルのデータ構造の一部を読み取ってデバッグするため
危険性
head -c コマンドは、ファイルの読み取り専用の操作であり、システムに変更を加えたり破壊的な処理を行ったりすることはありません。
そのため、危険性はなく、AIエージェントが実行しても問題ありません。
自動実行の許可設定
このコマンドは情報の取得や閲覧のみを行う安全な操作であるため、AIエージェントの自動実行(許可)設定をオンにしても問題ありません。