Apa arti "tes ajaib" untuk perintah file?

20

Saya membaca tentang fileperintah dan saya menemukan sesuatu yang saya tidak mengerti:

file dirancang untuk menentukan jenis file yang dipertanyakan .... file menyelesaikan ini dengan melakukan tiga set tes pada file yang dimaksud:

  • tes sistem file,
  • tes ajaib ,
  • tes bahasa

Apa itu tes ajaib ?

Abdennour TOUMI
sumber

Jawaban:

15

Itu mengacu pada "byte ajaib" yang memiliki banyak format file di awal file yang menunjukkan jenis file apa ini.

Misal jika suatu file dimulai dengan #!maka itu dianggap skrip.

Hauke ​​Laging
sumber
28

"sihir" di sini mengacu pada " angka ajaib ": nilai khusus yang ada di tempat yang dikenal dalam file yang mengidentifikasi jenisnya. The fileperintah memiliki database nomor ini dan apa jenis mereka sesuai dengan. Perpustakaan yang menyertai database itu disebut libmagic , dan Anda dapat mengaksesnya dari program Anda sendiri.

Mereka tidak harus "angka" seperti yang kita pikirkan. Misalnya, file gambar PNG selalu dimulai dengan "\ x89PNG \ r \ n \ x1a \ n", kelas Java dimulai dengan empat byte (dalam heksadesimal) CA FE BA BE, dan file HTML memiliki "<html" di suatu tempat dekat awal. Itu hanya beberapa urutan kecil data yang diketahui berada dalam file jenis itu, biasanya sangat dekat dengan awal.

Ketika orang mendefinisikan format file mereka sering memasukkan salah satu di dalamnya baik secara sengaja atau hanya sebagai bagian dari membuat format yang cocok. filedapat menggunakannya sesudahnya. Ini juga memiliki cara lain untuk benar-benar melihat isi file untuk menebak apa itu ("tes bahasa").

Michael Homer
sumber
6
Perhatikan bahwa pada awalnya, "angka ajaib", khususnya, dua byte pertama dari file yang dapat dieksekusi, digunakan oleh kernel untuk memuatnya dengan cara yang sesuai. #!sebenarnya adalah contoh dari ini, karena kernel itu sendiri, pada saat melihat byte itu, seharusnya memanggil perintah yang mengikuti.
IMSoP