Saya ingin tahu bagaimana tipe file diketahui jika nama file tidak memiliki akhiran.
Sebagai contoh, file bernama myfile
bisa biner atau teks untuk memulai, bagaimana sistem tahu jika file tersebut biner atau teks?
files
filesystems
mime-types
file-opening
Niklas Rosencrantz
sumber
sumber
Jawaban:
The
file
utilitas menentukan filetype lebih dari 3 cara:Pertama tes sistem file : Di dalam tes tersebut salah satu panggilan sistem keluarga stat dipanggil pada file. Ini mengembalikan berbagai jenis file unix : file biasa, direktori, tautan, perangkat karakter, perangkat blok, pipa bernama atau soket. Tergantung pada itu, tes ajaib dilakukan.
The tes sihir yang sedikit lebih kompleks. Jenis file ditebak oleh database pola yang disebut file ajaib . Beberapa jenis file dapat ditentukan dengan membaca sedikit atau angka di tempat tertentu di dalam file (misalnya binari). File ajaib berisi " angka ajaib " untuk menguji file apakah itu berisi angka atau tidak dan info teks mana yang harus dicetak. " Angka ajaib " itu bisa berupa nilai 1-4Byte, string, tanggal, atau bahkan ekspresi reguler. Dengan tes lebih lanjut, informasi tambahan dapat ditemukan. Dalam kasus yang dapat dieksekusi, informasi tambahan akan apakah itu terkait secara dinamis atau tidak, dilucutiatau tidak atau arsitekturnya. Kadang-kadang beberapa tes harus lulus sebelum tipe file dapat benar-benar diidentifikasi. Tapi bagaimanapun, tidak peduli berapa banyak tes yang dilakukan, itu selalu hanya tebakan yang bagus .
Berikut adalah 8 byte pertama dalam file dari beberapa tipe file umum yang dapat membantu kita mengetahui seperti apa angka-angka ajaib ini:
Jika jenis file tidak dapat ditemukan di atas pengujian ajaib, file tersebut tampaknya berupa file teks dan
file
mencari penyandian konten. Pengkodean dibedakan oleh rentang dan urutan byte yang berbeda yang merupakan teks yang dapat dicetak di setiap set.Jeda baris juga diselidiki, tergantung pada nilai HEX mereka:
0A
(\n
) mengklasifikasikan file terminasi Un * x / Linux / BSD / OSX0D 0A
(\r\n
) adalah file dari sistem operasi Microsoft0D
(\r
) akan menjadi Mac OS hingga versi 915
(\025
) adalah IBM AIXSekarang tes bahasa dimulai. Jika tampaknya berupa file teks, file tersebut dicari string tertentu untuk mengetahui bahasa yang dikandungnya (C, Perl, Bash). Beberapa bahasa skrip juga dapat diidentifikasi melalui hashbang (
#!/bin/interpreter
) di baris pertama skrip.Jika tidak ada yang berlaku pada file, tipe file tidak dapat ditentukan dan
file
hanya mencetak "data".Jadi, Anda lihat tidak perlu sufiks. Akhiran tetap bisa membingungkan, jika salah.
sumber
file(1)
dilakukan, tetapi dengan implementasi (sangat) berbeda.Seringkali, itu tidak peduli. Anda hanya meneruskannya ke program dan menafsirkannya atau tidak. Mungkin tidak berguna untuk membuka .jpg dalam editor teks, tetapi Anda tidak dapat melakukan hal ini. Ekstensi, seperti nama file lainnya, adalah untuk kenyamanan organisasi manusia.
Dimungkinkan juga untuk membuat file yang dapat diinterpretasikan secara sah dalam berbagai cara. Karena mulai format file ZIP memiliki header di akhir file , Anda dapat menambahkan hal-hal lain ke depan dan masih akan memuat sebagai file ZIP. Ini biasanya digunakan untuk membuat file zip self-extracting.
sumber
Informasi itu biasanya ditemukan di header file. The
file
perintah menganalisis target dan memberitahu Anda informasi tentang file. Banyak informasi sering berasal dari header file yang sering kali beberapa byte pertama dari file (lihat di bawah). Header digunakan oleh sistem untuk mencari cara menangani file.#!/bin/bash
di awal file memberitahu sistem untuk menggunakan bash shell untuk menafsirkan skrip berikut.ELF
memberitahu sistem bahwa ini adalah executable ELF.Contoh tajuk file:
sumber
file
perintah mencoba menebak dari isi file bagaimana file tersebut mungkin dimaksudkan untuk digunakan. Itu tidak sempurna.file
. Itu sebenarnya membuat analisis file. Namun, sebagian besar jenis file diidentifikasi oleh semacam header.0000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............
adalah header dari executable ELF (beberapa byte pertama dari / bin / ls). Demikian pula#!/bin/bash
di bagian atas file ASCII akan mengidentifikasinya sebagai skrip shell. Contoh lain:0000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR
(gambar .png)Hal pertama yang perlu diperiksa adalah jenis file yang dikodekan keras yang dikenali oleh kernel. Ini adalah jenis file seperti direktori, file karakter-khusus, file blok-khusus, file pipa-khusus, soket, dan tautan simbolik. Informasi ini berasal dari inode file. Jika file tersebut adalah file biasa, kumpulan informasi berikutnya berasal dari 256 byte pertama dengan mencari pola. Dengan demikian, file teks dan kode sumber C dikenali dengan memeriksa byte-byte tersebut. Selain itu, utilitas juga mencari angka ajaib yang digunakan untuk menguji dan memvalidasi jenis file. Anda dapat menambahkan jenis file Anda sendiri untuk dikenali dengan menambahkan informasi ke file
/etc/magic
. Lihat halaman manual untukmagic(5)
melihat format file ajaib.Dalam implementasi yang lebih lama (Solaris, misalnya), file tersebut
/etc/magic
menyebutkan sebagian besar jenis file yang dikenali.sumber
The
file
perintah berlaku beberapa heuristik dari pemeriksaan (bagian dari) file dan membuat tebakan yang berkualitas. Di luar itu ada beberapa kasus khusus di mana informasi tambahan dapat diperoleh; seperti#!
di awal file teks, BoM (tanda urutan byte), atau byte header spesifik dari format file yang dapat dieksekusi. Tanda#!
biner dalam executable digunakan oleh sistem untuk membedakannya.sumber
Sistem tidak tahu apakah file itu biner atau teks. Secara keseluruhan (AFAIK) sistem operasi Unix-type,
fopen(path, "rb")
persis sama denganfopen(path "r")
-b
tidak memiliki efek. Itu diterima karena standar C harus portabel untuk beberapa OS lain yang memang membuat perbedaan.sumber
Di masa lalu yang baik dari mainframe commputers OS mereka mendukung beberapa jenis file termasuk sekuensial dan sekuensial indeks. Sistem operasi modern (Un * x dan bisa dibilang Windows) mengurangi set jenis file ke minimum (termasuk dieksekusi, objek bersama).
Ada kemungkinan, ada format file yang rumit: sepotong kode C yang dapat diartikan sebagai deskripsi gambar. Selain itu ada berbagai format yang kurang dan lebih spesifik: file teks, file XML, dokumen SOAP.
sumber