file komutunun örnek kullanımı | |
| Geliştirici | AT&T Bell Laboratories |
|---|---|
| İlk yayınlanma | 1973 Unix Research Version 4'ün bir parçası olarak; 1986 açık kaynaklı yeniden uyarlama |
| Güncel sürüm | 5.48 |
| Kod deposu | github.com/file/file |
| Programlama dili | C |
| İşletim sistemi | Unix, Unix-like, Plan 9, IBM i |
| Platform | Cross-platform |
| Tür | Dosya türü belirleyici |
| Lisans | BSD lisansı, CDDL Plan 9: MIT Lisansı |
| Resmî sitesi | darwinsys.com/file/ |
file komutu, Unix ve Unix benzeri işletim sistemlerinde standart bir program'dır. Bir bilgisayar dosyası içinde bulunan veri türünü tanımak için kullanılır.
file'ın orijinal sürümü 1973'te Unix Research Version 4'te ortaya çıkmıştır. System V birkaç önemli değişiklikle birlikte büyük bir güncelleme getirdi, bunlardan en önemlisi de dosya türü bilgisini programın ikili dosyanın içine derlemek yerine harici bir metin dosyasına taşımaktı.
Çoğu büyük BSD ve Linux dağıtımları, komutun 1986-87 yıllarında Ian Darwin tarafından sıfırdan yazılan bir özgür, açık kaynaklı yeniden uyarlamasını kullanır. 1989'da Geoff Collyer tarafından genişletildi ve o zamandan beri Guy Harris, Chris Lowth ve Eric Fischer dahil olmak üzere birçok kişiden girdi aldı; 1993'ün sonlarından itibaren bakımı Christos Zoulas tarafından organize edildi. OpenBSD sistemi sıfırdan yazılmış kendi alt küme uygulamasına sahiptir, ancak hala Darwin/Zoulas sihirli dosya formatlı bilgi koleksiyonunu (collection of magic-file) kullanmaktadır.
file komutu, IBM i işletim sistemine de taşınmıştır.
Tekli UNIX Belirtimi (SUS - Single UNIX Specification), komut satırında belirtilen dosya üzerinde bir dizi sınama gerçekleştirileceğini belirtir:
file programı dosyanın işlendiğini ancak türünün belirlenemediğini belirtir.file, dizin, FIFO, soket, blok özel dosya ve karakter özel dosya türlerini belirleyebilmelidir.file pozisyon duyarlı testler kullanır.file bağlam duyarlı testler kullanır.data dosyası olarak tanımlanır.file'ın konuma duyarlı testleri normalde dosya içindeki çeşitli konumları sihirli sayılardan oluşan metinsel bir veritabanıyla eşleştirerek uygulanır (Kullanım bölümüne bakın). Bu, dosya uzantıları ve MIME gibi şemaları kullanan diğer basit yöntemlerden farklıdır.
Çoğu uygulamada, file komutu öncü baytların araştırılmasını sağlamak için bir veritabanı kullanır. Bu veritabanı, konumu genellikle /etc/magic, /usr/share/file/magic veya benzer bir konumda olan magic adlı özel bir dosyada uygulanır.
SUS aşağıdaki seçenekleri zorunlu kılmaktadır:
file içinde bulunan testlerden sonra gerçekleştirilecektir.Diğer Unix ve Unix benzeri işletim sistemleri bunlara ek olarak -s 'özel dosyalar (special files)', -k 'devam et (keep-going)' veya -r 'ham (raw)' gibi seçenekler ekleyebilir (örnekler aşağıda).
Komut, dosyanın ne olduğunu değil, yalnızca "neye benzediğini" söyler ("file" içeriğe baktığı durumda). İçeriği eşleşmeyen bir dosyaya sihirli bir sayı koyarak programı kandırmak kolaydır. Bu nedenle komut, belirli durumlar dışında bir güvenlik aracı olarak kullanılamaz.
$ file file.c file.c: C program metni
$ file program program: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped
$ file /dev/hda1 /dev/hda1: block special (0/0)
$ file -s /dev/hda1 /dev/hda1: Linux/i386 ext2 dosya sistemi
-s seçeneğinin yalnızca bazı platformlarda bulunan ve file'a aygıt dosyalarını okumasını ve bunları yalnızca aygıt dosyası olarak tanımlamak yerine içeriklerini tanımlamaya çalışmasını söyleyen standart olmayan bir seçenek olduğunu unutmayın.
Normalde file aygıt dosyalarını okumaya çalışmaz çünkü böyle bir dosyayı okumak, istenmeyen yan etkilere neden olabilir.
$ file -k -r libmagic-dev_5.35-4_armhf.deb # (Linux'ta) libmagic-dev_5.35-4_armhf.deb: Debian binary package (format 2.0) - current ar archive - data
Standart olmayan -k seçeneği sayesinde, program bulunan ilk isabetten sonra durmaz, ancak diğer eşleşen kalıpları arar. Bazı sürümlerde mevcut olan -r seçeneği, yazdırılamayan satır sonu karakterinin sekizli gösterimi yerine ham haliyle görüntülenmesine neden olur.
$ file compressed.gz compressed.gz: gzip compressed data, deflated, original filename, `compressed', last modified: Thu Jan 26 14:08:23 2006, os: Unix
$ file -i compressed.gz # (on Linux) compressed.gz: application/x-gzip; charset=binary
$ file data.ppm data.ppm: Netpbm PPM "rawbits" image data
$ file /bin/cat /bin/cat: Mach-O universal binary with 2 architectures /bin/cat (for architecture ppc7400): Mach-O executable ppc /bin/cat (for architecture i386): Mach-O executable i386
$ file /usr/bin/vi /usr/bin/vi: symbolic link to vim
Sembolik bağlantıların tanımlanması, tüm platformlarda mevcut değildir ve -L parametresi kullanılırsa veya POSIXLY_CORRECT ayarlanırsa referans kaldırılır.
file'ın Ian Darwin/Christos Zoulas sürümünün 4.00 versiyonundan itibaren, file'ın işlevselliği C (ve C uyumlu) bağlantı yoluyla erişilebilen bir libmagic kütüphanesine dahil edilmiştir; file bu kütüphane kullanılarak uygulanmaktadır.
file used in major BSD and Linux distributions.file for 32 bit Windows.