file (Unix)
A file
egy standard Unix parancs, mely a fájl típusának meghatározására használható.
Története
[szerkesztés]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.
Használata
[szerkesztés]A parancs általános alakja: file [ -vczL ] [ -f fájlnévlista ] [ -m bűvösfájl ] fájlnév ...
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ájlrendszer 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 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 archívumok). Ha változtatsz a /etc/magic fájlon vagy magán a programon, tartsd meg ezeket a "kulcsszavakat".
A fájlrendszer tesztek eredménye a stat rendszerhí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éb 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
[szerkesztés]- -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ájlneveket kettősponttal 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 szimbolikus kötéseket, ahogyan azt az ls (1) azonos nevű kapcsolója is teszi. (azokon a rendszereken, amelyek támogatják a szimbolikus kötéseket).
Példák
[szerkesztés]# file file.c file.c: C program text # file program program: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped # file /dev/wd0a /dev/wd0a: block special (0/0) # file -s /dev/hda1 /dev/hda1: Linux/i386 ext2 filesystem # file -s /dev/hda5 /dev/hda5: Linux/i386 swap file # file compressed.gz compressed.gz: gzip compressed data, deflated, original filename, `compressed', last modified: Thu Jan 26 14:08:23 2006, os: Unix # file data.ppm data.ppm: Netpbm PPM "rawbits" image data