file
menggunakan beberapa jenis tes :
1: Jika file tidak ada, tidak dapat dibaca, atau status file tidak dapat ditentukan, output akan menunjukkan bahwa file diproses, tetapi jenisnya tidak dapat ditentukan.
Ini akan menjadi output seperti cannot open file: No such file or directory
.
2: Jika file tersebut bukan file biasa, jenis file-nya harus diidentifikasi. Direktori jenis file, FIFO, soket, blok spesial, dan karakter khusus harus diidentifikasi. Jenis file lain yang ditentukan implementasi juga dapat diidentifikasi. Jika file adalah tautan simbolis, secara default tautan harus diselesaikan dan file akan menguji jenis file yang dirujuk oleh tautan simbolis. (Lihat -h
dan -i
opsi di bawah.)
Ini akan menjadi output seperti .: directory
dan /dev/sda: block special
. Sebagian besar format untuk ini dan titik sebelumnya sebagian ditentukan oleh POSIX - Anda dapat mengandalkan string tertentu yang berada di output.
3: Jika panjang file adalah nol, itu harus diidentifikasi sebagai file kosong.
Ini foo: empty
.
4: Utilitas file akan memeriksa segmen awal file dan akan membuat perkiraan untuk mengidentifikasi isinya berdasarkan tes sensitif posisi. (Jawabannya tidak dijamin benar; lihat opsi -d, -M, dan -m di bawah ini.)
5: Utilitas file akan memeriksa file dan membuat tebakan untuk mengidentifikasi isinya berdasarkan pada tes sistem standar yang sensitif terhadap konteks. (Jawabannya tidak dijamin benar.)
Keduanya menggunakan identifikasi angka ajaib dan merupakan bagian paling menarik dari perintah. Angka ajaib adalah urutan khusus byte yang ada di tempat yang dikenal dalam file yang mengidentifikasi tipenya. Secara tradisional tempat itu adalah dua byte pertama, tetapi istilah tersebut telah diperluas lebih lanjut untuk memasukkan string yang lebih panjang dan lokasi lainnya. Lihat pertanyaan lain ini untuk detail lebih lanjut tentang angka ajaib dalam file
perintah.
The file
perintah memiliki database nomor ini dan apa jenis mereka sesuai dengan; basis data itu biasanya ada /usr/share/mime/magic
, dan memetakan konten file ke tipe MIME . Output di sana (sering bagian dari file -i
jika Anda tidak mendapatkannya secara default) akan menjadi jenis media atau ekstensi yang ditentukan . "Tes sensitif terhadap konteks" menggunakan pendekatan yang sama, tetapi agak tidak jelas. Tidak satu pun dari ini dijamin benar, tetapi itu dimaksudkan sebagai tebakan yang baik.
file
juga memiliki database yang memetakan tipe-tipe tersebut ke nama-nama, yang dengannya ia akan mengetahui bahwa suatu file yang telah diidentifikasi application/pdf
dapat digambarkan sebagai a PDF document
. Nama-nama yang dapat dibaca manusia itu bisa dilokalisasi ke bahasa lain juga. Ini akan selalu menjadi deskripsi tingkat tinggi dari jenis file dengan cara yang akan dipahami seseorang, bukan mesin.
Sebagian besar keluaran berbeda yang bisa Anda dapatkan akan berasal dari tahap-tahap ini. Anda dapat melihat magic
file untuk daftar jenis yang didukung dan bagaimana mereka diidentifikasi - sistem saya tahu 376 jenis yang berbeda. Nama-nama yang diberikan dan jenis yang didukung ditentukan oleh pengemasan dan konfigurasi sistem Anda, sehingga sistem Anda mungkin mendukung lebih atau kurang dari milik saya, tetapi umumnya ada banyak. libmagic
juga menyertakan tes kode keras tambahan di dalamnya.
6: File harus diidentifikasi sebagai file data.
Ini foo: data
, ketika gagal mengetahui apa pun tentang file tersebut.
Ada juga tag kecil lainnya yang bisa muncul. File yang dapat dieksekusi ( +x
) akan menyertakan " executable
" dalam output, biasanya dipisahkan dengan koma. The file
pelaksanaan juga dapat mengetahui hal-hal ekstra tentang beberapa format file untuk dapat menggambarkan poin tambahan tentang mereka, seperti dalam Anda " PDF document, version 1.4
".