Saya perlu mengenali tipe data yang terkandung dalam file acak. Saya baru mengenal Linux.
Saya berencana untuk menggunakan file
perintah untuk memahami jenis data apa yang dimiliki suatu file. Saya mencoba perintah itu dan mendapatkan output di bawah ini.
Seseorang menyarankan kepada saya bahwa file
perintah melihat byte awal file untuk menentukan tipe data. The file
perintah tidak melihat ekstensi file sama sekali. Apakah itu benar? Saya melihat halaman manual tetapi merasa itu terlalu teknis. Saya akan sangat menghargai jika ada yang bisa memberikan tautan yang memiliki penjelasan lebih sederhana tentang bagaimana file
perintah itu bekerja.
Apa kemungkinan jawaban berbeda yang bisa saya dapatkan setelah menjalankan file
perintah? Misalnya, dalam transkrip di bawah ini saya mendapatkan JPEG, media ISO, ASCII, dll:
Output layar adalah sebagai berikut
m7% file date-file.csv
date-file.csv: ASCII text, with CRLF line terminators
m7% file image-file.JPG
image-file.JPG: JPEG image data, EXIF standard
m7% file music-file.m4a
music-file.m4a: ISO Media, MPEG v4 system, iTunes AAC-LC
m7% file numbers-file.txt
numbers-file.txt: ASCII text
m7% file pdf-file.pdf
pdf-file.pdf: PDF document, version 1.4
m7% file text-file.txt
text-file.txt: ASCII text
m7% file video-file.MOV
video-file.MOV: data
Perbarui 1
Terima kasih atas jawaban dan mereka mengklarifikasi beberapa hal untuk saya.
Jadi jika saya mengerti benar folder / usr / share / mime / magic memiliki database yang akan memberi saya apa format file saat ini (output yang bisa saya dapatkan ketika saya mengetik perintah file dan mengikutinya dengan file). Apakah itu benar? Apakah benar bahwa setiap kali perintah output 'File' berisi kata "teks" itu merujuk pada sesuatu yang dapat Anda baca dengan penampil teks, dan apa pun tanpa "teks" adalah semacam biner?
sumber
Jawaban:
file
menggunakan beberapa jenis tes :Ini akan menjadi output seperti
cannot open file: No such file or directory
.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.Ini
foo: empty
.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 darifile -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 diidentifikasiapplication/pdf
dapat digambarkan sebagai aPDF 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.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. Thefile
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
".sumber
Halaman manual biasanya merupakan referensi singkat, bukan pengantar. Mulai dengan halaman Wikipedia .
file
hanya melihat konten file, bukan pada nama file. (Ini juga terlihat pada beberapa metadata file seperti jenis file: direktori, tautan simbolik, bernama pipe, dll. Tetapi dalam kasus yang Anda minati, kontenlah yang penting.)file
biasanya menebak format file dengan melihat beberapa byte pertama dan membandingkannya dengan tabel angka ajaib bawaan . Misalnya, jika file dimulai dengan%PDF
, makafile
laporkan "dokumen PDF" (dan lanjutkan menggali untuk melaporkan versi minimum). Untuk jenis file yang tidak dimulai dengan angka ajaib, ini berisi heuristik, mis. Laporkan "teks ASCII" jika beberapa byte pertama semuanya berada dalam kisaran ASCII yang dapat dicetak.Output dari
file
rapuh: dapat bervariasi dari varian unix ke varian unix dan dari versi ke versi. Di Linux, Cygwin dan * BSD,file
perintah mendukung opsi-i
yang menghasilkan keluaran yang dapat diprediksi dalam bentuk jenis media MIME (IANA mengelola daftar jenis media standar ). Tidak ada banyak detail dan outputnya kurang ramah manusia tetapi outputnya mudah ditebak dan ramah komputer.Gunakan
file --mime-type
jika Anda hanya ingin tipe MIME itu sendiri tanpa informasi penyandian, misapplication/pdf
. Lewati opsi-b
jika Anda tidak ingin menampilkan nama file di awal baris.sumber
Saya ingin Anda membaca jawabannya dari sini . Beberapa kutipan dari jawabannya adalah,
Dari halaman manual
file
perintah,file
perintah sebenarnya melakukan 3 tes untuk menentukan jenis file.Tes pertama
Tes kedua
Tes ketiga
Output dari
file
perintah umumnya didasarkan pada hasil dari salah satu tes yang berhasil.Sekarang, dengan asumsi program C ++ dimulai seperti ini, dan tes ketiga berhasil,
Sesuai pengujian ketiga, kata kunci secara
#include
khusus menentukan jenis program C meskipun kami memiliki program CPP . Sekarang, ketika saya memeriksa,Sekarang, konsep berorientasi objek khusus untuk C ++. Mari kita buat file khusus untuk C ++ .
Saya memulai program C ++ saya sebagai,
Sekarang, ketika saya menerbitkan
Outputnya adalah,
Ini pada dasarnya menjelaskan tentang bagaimana
file
perintah bekerja pada file yang serupa (Dalam contoh ini, program C dan program C ++ diperlakukan sama kecuali dan sampai kita menggunakan fitur berorientasi objek khusus untuk C ++).sumber
Gilles dan Michael Homer telah memberikan jawaban yang sangat baik. yang saya rujuk kepada Anda. Untuk melihat jenis file yang dikenali pada sistem Anda, coba jalankan
Jika itu memberikan masalah izin, atau tidak ada, maka mungkin
(mungkin perlu penyesuaian tergantung pada sistem Anda) yang akan menunjukkan kepada Anda daftar jenis file di sistem Anda. Perintah ini mungkin membutuhkan waktu lama untuk dijalankan tergantung pada ukuran sistem file root Anda.
sumber