ファイル コマンドの「マジック テスト」とは何を意味しますか?

ファイル コマンドの「マジック テスト」とは何を意味しますか?

コマンドについて読んでいたのですfileが、よくわからない点がありました。

ファイルは、照会されるファイルの種類を決定するように設計されています。ファイルは、実行することでこれを実現します。三つ問題のファイルに対する一連のテスト:

  • ファイルシステムテスト、
  • 魔法テスト、
  • 言語テスト

何ですか魔法テストですか?

答え1

ここでの「魔法」とは「魔法の数字": ファイル内の既知の場所にある、そのタイプを識別する特別な値。コマンドにfileは、これらの数値とそれらが対応するタイプのデータベースがあります。そのデータベースに付属するライブラリはlibmagic、独自のプログラムからアクセスできるようになります。

これらは必ずしも私たちが考える「数字」ではありません。たとえば、PNG 画像ファイルは常に「\x89PNG\r\n\x1a\n」で始まり、Java クラスは 4 バイト (16 進数) の CA FE BA BE で始まり、HTML ファイルでは先頭近くに「< html」があります。これは、その種類のファイルに存在することがわかっている小さなデータ シーケンスであり、通常は先頭のすぐ近くにあります。

ファイル形式を定義するとき、意図的に、または単に形式を適合させるための一部として、これらのいずれかをファイル形式に含めることがよくあります。fileこれらは後で使用できます。また、ファイルの内容を実際に調べて、それが何であるかを推測する他の方法もあります (「言語テスト」)。

答え2

これは、多くのファイル形式がファイルの先頭に持つ、ファイルの種類を示す「マジック バイト」を指します。

たとえば、ファイルが で始まる場合#!、それはスクリプトと見なされます。

関連情報