FILE(1)

NÉV
file - fájl típusának meghatározása

ÁTTEKINTÉS
file [ -vczL ] [ -f fájlnévlista ] [ -m bűvösfájl ] fájlnév ...

LEÍRÁS
Ez a kézikönyv oldal a file parancs 3.20.1-es verzióját dokumentálja. A file parancs teszteli minden argumentumát és megpróbálja kategorizálni ezeket. Három teszt sorozatot hajt végre, a következő sorrendben: fájlrendzer tesztek, bűvösszám (magic number) tesztek, és nyelv tesztek. Az első sikeres teszt eredménye határozza meg a program kimenetét.

A kiírt eredmény általában a következő szavak egyikét fogja tartalmazni: text (a fájl csak ASCII karaktereket tartalmaz, és valószínüleg olvasható ASCII 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 ASCII 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 .br 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.

OPCIÓK

-v, --version
    Kiírja a program verzióját és kilép.

-m, --magic-file lista
    Másik bűvös számokat tartalmazó fájl/fájlok megadása. Több fájl esetén a fájl neveket kettős ponttal kell elválasztani.

-z, --uncompress
    Megpróbál tömörített fájlokat is azonosítani.

-c, --checking-printout
    Ellenőrző nyomtatás a bűvös számokat tartalmazó fájlról. Általában a -m kapcsolóval együtt használatos, új bűvös számokat tartalmazó fájl telepítés előtti ellenőrzésekor.

-f, --files-from fájlnévlista
    A megvizsgálandó fájlok nevét a fájlnévlista nevű fájlból olvassa (soronként egy fájlnév), majd az argumentum listából. Vagy a fájlnévlista vagy legalább egy fájlnév argumentumnak jelen kell lennie. A szabványos bemenet olvasásához használd a ``-'' jelet a fájlnév argumentum helyén.

-L, --dereference
    Ezzel a kapcsolóval elérhetjük, hogy a file kövesse a szimbólikus kötéseket, ahogyan azt az ls(1) azonos nevű kapcsolója is teszi. (azokon a rendszereken, amelyek támogatják a szimbólikus kötéseket).

FÁJLOK
/etc/magic - bűvös számok alapértelmezett listája.

KÖRNYEZET
A MAGIC környezeti változóval állíthatjuk be az alapértelmezett bűvös számokat tartalmazó fájlt.

LÁSD MÉG
magic(5) - bűvös fájl formátumának leírása.
strings(1), od(1) - nem szöveg fájlok elemzésere használt eszközök.

IGAZODÁS A SZABVÁNYHOZ
Ez a program az általános nézet szerint felülmúlja a FILE(CMD)-ben szereplő "System V Interface Definition"-t, már amennyire ezt abból meg lehet határozni. A viselkedése többnyire kompatíbilis az azonos nevű System V programéval. Ez a verzió "jobb bűvész", tehát más (értsd pontosabb) eredménnyel szolgál sok esetben.

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

BŰVÖS SZÁMOK GYŰJTEMÉNYE
A bűvös számokat kőlönböző forrásokból gyűjtöttem össze, főleg USENET-ről, és különböző szerzőktől származnak. Christos Zoulas (címét lasd lent) gyűjti a további, vagy javított bűvös fájl bejegyzéseket. Rendszeresen frissítjük és közzé tesszük a bűvös fájl bejegyzésit.

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).

TÖRTÉNET
Minden UNIX tartalmazza a file parancsot, legalábbis a Research Version 6 óta biztosan (kézikönyv oldal kelte: 1975. január). A System V változata egy lényeges változást vonzott magával: a bűvös számok külső fájlban való tárolását. Ez egy kicsit lassított a programon, de sokkal rugalmasabbá tette.

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.

SZERZŐK
Írta Ian F. Darwin, UUCP címe {utzoo | ihnp4}!darwin!ian, e-mail címe ian@sq.com, postai címe: P.O. Box 603, Station F, Toronto, Ontario, CANADA M4Y 2L8.

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.

MÁSOLÁSI JOGOK
Copyright (c) Ian F. Darwin, Toronto, Canada, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993.

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.

HIBÁK
Kell legyen egy jobb módja a bűvös fájl automatikus előállításának. Hogy hogyan? Sőt, a bűvös fájlt le lehetne fordítani valamilyen bináris formátumba (mondjuk pl. ndbm(3) vagy , még jobb, állandó hosszúságú ASCII karakterláncok formájaba, hogy heterogén hálózati környezetben is lehessen használni) a program gyorsabb indulása végett. Ekkor a program olyan gyorsan futna mint a Version 7-es változat és mégis megőrízné a System V változat rugalmasságát.

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 ASCII fájlok esetében.

Az ASCII 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 ASCII TAB 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ú.

ELÉRHTŐSÉG
A eredeti program legfrissebb változata elérhető a szerzőnél: ftp://tesla.ee.cornell.edu/pub/file/ , de ez lehet, hogy nem működik. Megpróbálhatod az ftp://ftp.deshaw.com/pub/file/ -t vagy legvégső esetben az ftp://ftp.uu.net/pub/FreeBSD/FreeBSD-current/src/usr.bin/file/-t.

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).

MAGYAR FORDÍTÁS
Kovács Emese <emese@eik.bme.hu>