file (1) dan sihir (5): menjelaskan format lain

8

Dapatkah saya menggunakan filedan magic( http://linux.die.net/man/5/magic ) untuk mengganti deskripsi beberapa format lain yang dikenal?

misalnya, saya ingin menjelaskan format berikut:

itu adalah file teks 'hanya'

Atau

itu adalah 'hanya' file gzip yang dimulai dengan angka ajaib BAM\1

?

apakah Anda tahu contohnya?

Apakah mungkin untuk memberikan kode C khusus untuk menguji file alih-alih menggunakan format ajaib?

Pierre
sumber

Jawaban:

8

Anda dapat menggunakan -mopsi untuk menentukan daftar alternatif file ajaib, dan jika Anda memasukkan sendiri sebelum file ajaib yang dikompilasi ( /usr/share/file/magic.mgcdi sistem saya) dalam daftar itu, pola-pola itu akan diuji sebelum yang "global". Anda dapat membuat fungsi, atau alias, untuk selalu menggunakan opsi itu secara transparan dengan hanya mengeluarkan fileperintah.

Bahasa yang digunakan dalam file ajaib cukup kuat, sehingga jarang ada kebutuhan untuk kembali ke pengkodean C kustom. Satu-satunya waktu saya merasa cenderung untuk melakukannya adalah di tahun 90-an ketika pencocokan file HTML dan XML sulit karena tidak ada cara (pada waktu itu) untuk memiliki casing yang fleksibel dan pencocokan offset yang diperlukan untuk dapat mengurai <HTMLdan < Htmldan < htmldengan satu pola . Saya menerapkannya dalam C sebagai pengubah pola 'string', memungkinkan pengabaian case dan pemadatan blank (opsional) .

Perubahan-perubahan dalam C ini membutuhkan adaptasi dari file ajaib juga . Dan kecuali jika filekode sumber telah berubah secara signifikan sejak saat itu, Anda akan selalu perlu mengubah (atau memberikan tambahan) aturan dalam magicfile yang cocok dengan perubahan kode C tersebut. Jadi Anda sebaiknya mulai mencoba melakukannya dengan perubahan pada file ajaib saja, dan kembali mengubah kode C jika itu benar-benar tidak berhasil.

Anthon
sumber
Terima kasih, repo github dengan contoh-contohnya sangat berguna.
Pierre
1

Untuk $ $ berikutnya (user_searchengine) pengguna menemukan ini:

Aturan sederhana seperti BAM terlihat seperti ini:
OFFSET TYPE [OPERAND]FLAG MESSAGE
Dalam kasus BAM:
0 string BAM\1 BAM
Ini akan mencetak string BAM saat menemukan header.

Untuk informasi lebih lanjut, informasi situs IBM ini tampaknya agak ketinggalan jaman, tetapi seharusnya masih cukup untuk kasus penggunaan sederhana. Pria juga memiliki banyak informasi tentang format.

SleepProgger
sumber
0

Anda tidak perlu selalu menggunakan -mopsi; sebagai documentend di halaman manualnya file(1)juga akan membaca ~/.magicfile secara default (atau versi yang dikompilasi:) ~/.magic.mgc, sehingga Anda dapat menambahkan definisi Anda di sana; tidak perlu dipusingkan dengan seluruh sistem /usr/share/magic*atau /etc/magic.

mosvy
sumber