A kiírt eredmény általában a következő szavak egyikét fogja tartalmazni: text (a fájl csak karaktereket tartalmaz, és valószínüleg olvasható terminálon), executable (a fájl program fordítás eredményét tartalmazza, mely értelmes valamilyen UNIX kernel számára) vagy data, ami bármi mást jelenthet (a data típus általában `bináris' vagy nem-nyomtatható). Kivételt képeznek a jól ismert bináris fájl formátumok (pl. core fájlok, tar arhívumok). Ha változtatsz a /etc/magic fájlon vagy magán a programon, tartsd meg ezeket a "kulcsszavakat". A felhasználók számítanak arra, hogy ha egy fájl olvasható, akkor a típusában megjelenik a ``text'' karakterlánc. Ne tedd azt, amit a Berkley Egyetemen tettek - megváltoztttak a ``shell commands text''-et ``shell script''-re.
A fájlrendszer tesztek eredménye a stat (2) renszerhíváson alapul. A program megnézi, hogy a kérdéses fájl üres-e vagy esetleg valamilyen speciális fájl-e. Minden az operációs rendszer által ismert fájltípust felismer (socket-eket, szimbolikus kötéseket vagy "named pipe"-okat (FIFOkat), már ha a rendszerünk implementálja ezeket), ha az definiálva van a sys/stat.h rendszer fejléc fájlban.
A bűvösszám tesztekkel a program adott állandó formátumú fájlokat próbál azonosítani. Erre a legkézenfekvőbb példa egy végrehajtható bináris (lefordított program) a.out állomány, aminek a formátumát az a.out.h tartalmazza, és esetleg az exec.h az alapértelmezett "include" könyvtárban. Ezek a fájlok tartalmaznak egy bűvös számot, egy adott helyen, valahol a fájl eleje táján, ami megmondja a UNIX operációs rendszernek, hogy egy bináris futtatható programról van szó, valamint hogy pontosan melyik fajtáról ezek közül. A `bűvös szám' elvét kiterjesztették más (bináris) adatokat tartalmazó fájlokra is. Általában bármilyen fájlt azonosíthatunk ezzel a módszerrel, ha tartalmaz egy állandó azonosítót egy meghatározott (a fájl elejéhez közel lévő) helyen. Az ehhez szükséges adatokat a program a /etc/magic fájlból olvassa.
Ha az egyik tesztelt fájl
szövegnek tűnik,
a
file
megpróbálja a nyelvét megállapítani.
A nyelv tesztek különleges, a nyelvekre jellemző karakterláncokra keresnek
(lásd
names.h )
a fájl első néhány blokkjában.
Például a
kulcsszó arra enged következtetni, hogy valószínüleg egy
troff
(1)
bemeneti fájlról van szó,
míg a
struct
kulcsszó C program forrásra utal.
Ezek a tesztek kevésbé megbízhatóak mint az előző két csoportban
ismertetettek, ezért ezeket próbálja ki a
file
utoljára.
A nyelvi tesztek egyébb ellenőrzéseket is végeznek (mint pl.
tar
(1)
archívumok azonosítása)
és megállapítják, hogy egy ismeretlen típusú fájl
`ascii text' vagy `data' leírást kapjon-e.
Egy fontos eltérés van ezen verzió és a System V verziója között. Ez a verzió
bármilyen szóközt (white space) határoló karakterként értelmez, tehát a
karakterláncokban előforduló szóközöket ki kell védeni.
Például a
>10 string language impress (imPRESS data)
sort egy már létező bűvös fájlban a következőre kellene lecserélni:
>10 string language\ impress (imPRESS data)
Továbbá, ebben a változatban, ha egy minta "backslash" karaktert tartalmaz,
azt ki kell védeni. Például
0 string \begindata Andrew Toolkit document
sort egy már létező bűvös fájlban a következőre kellene cserélni:
0 string \\begindata Andrew Toolkit document
A Sun Microsystems által készített SunOS 3.2-es és az azt követő kiadásai
tartalmaznak egy
file
(1)
parancsot, amely a System V parancs egy kibővített változata.
Az én programom és a Sun változata között csak minimális az eltérés.
Ebbe beletartozik az `&' operátor használata, mint például a következő
esetben:
>16 long&0x7fffffff >0 not stripped
A bejegyzések sorrendje a bűvös fájlban fontos, és változhat az operációs renszer függvényében. Így egy régebbi file programhoz tartozó bűvös fájlt érdemes megtartani, összehasonlítási alapnak. (nevezd át pl. /etc/magic.orig -ra).
Ezt a programot a System V változat alapján Ian Darwin készítette, a nélkül, hogy bárkinek a forráskódját látta volna.
John Gilmore tüzetesen átnézte a kódot, és javított rajta az első változathoz képest. Geoff Collyer talált benne több pontatlanságot, és néhány bejegyzéssel gyarapította a bűvös fájlt. A program azóta is folyamatos fejlesztés alatt áll.
Változtatott rajta Rob McMahon, cudcv@warwick.ac.uk, 1989-ben. Kiterjesztette a `&' operátor használatát az egyszerű `x&y != 0'-rol `x&y op z'-ra.
További változtatásokat csinált Guy Harris, guy@auspex.com, 1993-ban:
visszaállította a ``régi fajta'' `&' operátort mert 1) Rob McMahon változtatása eltért a megszokott haszálattól, 2) a SunOS ``új fajta'' `&' operátora, amelyet ez a file verzió is támogat, szintén kezeli a `x&y op z' műveletet és 3) egyébkent is, Rob változtatása nem volt dokumentálva;
beépített több `>' szintet;
beépítette a ``beshort'', ``leshort'', stb. kulcsszavakat, hogy a program egy meghatározott byte sorrendben olvassa a számokat a fájlból és ez a sorrend ne a file-t futtató processz eredendő bájt sorrendjétől függjön.
További változtatások Ian Darwin valamint különböző más szerzők által, beleértve Christos Zoulas-t (christos@ee.cornell.edu), 1990-1992-ben.
Ezért a programért nem kérhetnek licensz díjat sem most, sem a jövőben a következő cégek: az American Telephone and Telegraph Company, a Sun Microsystems Inc., a Digital Equipment Inc., a Lotus Development Inc., a Kaliforniai Egyetem Vezetősége, az X Consortium vagy az MIT, és a Free Software Foundation.
Erre a szoftverre nem vonatkoznak az Egyesült Államok Kereskedelmi Minisztériumának export tilalmai, így szabadon exportálható bármelyik országba, vagy bármelyik bolygóra.
Bárki használhatja bármilyen célra, bármilyen számítógépen ezt a szoftvert, megváltoztathatja és továbbadhatja szabadon a következő korlátozásokkal:
1. A szerző nem felelős a szoftver használatának következményeiért, bármilyen súlyosak legyenek is, akkor sem ha a programban lévő hibából erednek.
2. E szoftver eredetét nem szabad hamisan feltüntetni, sem kifejezett állítással, sem az eredeti szerzők személyének elhallgatásával. Mivel nagyon kevés felhasználó olvas forrás kódot, a dokumentációnak tartalmaznia kell a szerzők adatait.
3. Megváltoztatott verziókra világosan fel kell hívni a figyelmet, és nem szabad őket az eredeti szoftverrel azonosként feltüntetni. Mivel nagyon kevés felhasználó olvas forrás kódot, a dokumentációnak tartalmaznia kell a szerzők adatait.
4. Ezt a közleményt nem szabad eltávolítani, vagy megváltoztatni.
Néhany ezzel a csomaggal osztott szükséges fájlt (getopt, strtok) Henry Spencer írt, és a fenti szabályozások vonatkoznak rájuk.
Néhany egyébb fájl (strtol, strchr) szintén ebből a csomagból "public domain" alá tartozik.
A tar.h és is_tar.c fájlokat John Gilmore írta a saját "public-domain" alá tartozó tar programja alapján, így ezekre nem vonatkoznak a fenti korlátozások.
A file több olyan algoritmust használ, amik elönyben részesítik a gyorsaságot a pontossággal szemben, ezért a program eredménye néha pontatlan fájlok esetében.
Az fájlok támogatottsága (főleg programozási nyelvek esetén) nagyon fapados, nem hatékony, és változtatás esetén újrafordítást igényel.
Implementálni kellene az ``else'' ágakat.
A bűvös fájlnak és a kulcsszavaknak támogatniuk kellene a szabályos kifejezéseket (regular expressions). Az használata mezők elválasztásnál csúnya, és nehéz miatta a fájlok szerkesztése.
Lehet, hogy tanácsos lenne a nagy betűk engedélyezése a kulcsszavakban, pl. troff (1) parancsok a kézikönyv oldal makrók helyett. Szabályos kifejezések használata ezt egyszerűvé tenné.
A program nem ismeri fel a FORTRAN fájlokat. Felismerhetné őket néhány kulcsszó alapján, amelyek a sor elején fordulnak elő. Szabályos kifejezések használata ezt is egyszerűvé tenné.
Az ascmagic fájlban található kulcsszavak listája valószínűleg inkább a bűvös fájlba tartozik. Ezt meg lehetne csinálni pl. egy `*' kulcsszóval az offset érték helyén.
Még egy optimalizálási lehetőség lenne a bűvös fájl rendezése. Így lefuttathatnánk minden tesztet az első bájtra, az első szóra, az első longra stb. amint azt egyszer beolvastuk. Panaszkodhatna a program ha összeférhetetlen bejegyzéseket talál a bűvös fájlban. A bűvös fájl bejegyzéseit a fájl offset szerint kellene rendezni?
A programnak valahogy meg kellene mondania, hogy ``mennyire jó'' az eredmény. Végül figyelmen kívül hagyna bizonyos találgatásokat (pl. ``From:'' a fájl első 5 karaktere) mert nem olyan biztosak mint más találgatások (pl. ``Newsgroup:'' a ``Return-Path:''-al szemben.) Amennyiben a többi próba nem jön be, az első (kevésbé biztos) találat alapján meg lehet mondani milyen fájlról van szó.
Ez a program lassabb mint a mások által forgalmazott file programok.
Ez a kézikönyv oldal, főleg ez a része, túl hosszú.
Ez a Debian változat megérti a hosszú kapcsolókat, és néhany hibával kevesebb van benne. Elérhető minden Debian disztibúciót tartalmazó helyről (ftp.debian.org/mirrors).