FILE(1)                                                   FILE(1)


NAZWA
       file - określenie typu pliku

SKŁADNIA
       file  [  -bciknsvzL  ] [ -f nazwapliku ] [ -m lista ] plik
       ...
       plik -C [ -m plikmag ]

OPIS
       Ta strona podręcznika opisuje wersję 3.37 polecenia  file.

       file  sprawdza  każdy  ze  swoich  argumentów, próbując go
       sklasyfikować. Istnieją  trzy  zestawy  testów,  które  są
       wykonywane   w   następującej  kolejności:  testy  systemu
       plików, testy liczb magicznych,  testy  języka.   Pierwszy
       zakończony powodzeniem test powoduje wypisanie typu pliku.

       Wypisany typ będzie zwykle zawierał  jedno  ze  słów  text
       (plik  zawiera  tylko  znaki  drukowalne  i  kilka spośród
       znaków  sterujących  oraz  prawdopodobnie  można  go  bez­
       piecznie  czytać na terminalu ASCII ), executable (wykony­
       walny -- plik zawiera wyniki kompilacji w formacie  zrozu­
       miałym  dla  jądra  pewnego Uniksa lub innego systemu) lub
       data (dane) oznaczające cokolwiek innego (zwykle  jest  to
       binarny,  niedrukowalny  plik). Wyjątkami są ogólnie znane
       formaty  plików  (pliki  core,  archiwa  tar),  o  których
       wiadomo,  że  zawierają dane binarne.  Podczas modyfikacji
       pliku  /usr/share/misc/magic  lub  też   samego   programu
       zachowaj  te  słowa kluczowe.  Wielu polega na tym, że dla
       wszystkich  czytelnych  plików   wypisywane   jest   słowo
       ,,text''. Nie należy więc robić tego, co zrobiono w Berke­
       ley - zmieniono tam ,,shell  commands  text''  na  ,,shell
       script''.      Należy     też     zauważyć,     że    plik
       /usr/share/misc/magic jest tworzony mechanicznie  z  wielu
       małych  plików z podkatalogu Magdir dystrybuowanych źródeł
       niniejszego programu.

       Testy systemu plików  są  oparte  o  sprawdzanie  wartości
       zwracanej   przez   funkcję  systemową  stat(2).   Program
       sprawdza czy  plik  jest  pusty  oraz  czy  jest  jakiegoś
       rodzaju  plikiem  specjalnym.  Powinno  się  dać rozpoznać
       wszystkie rodzaje  plików  występujące  w  danym  systemie
       (gniazda,  dowiązania  symboliczne, nazwane potoki (FIFO),
       itd.), o ile te rodzaje plików będą zdefiniowane w  syste­
       mowym pliku nagłówkowym sys/stat.h.

       Testy  liczb magicznych służą do sprawdzania plików, które
       zawierają dane w  określonym  formacie.  Kanonicznym  tego
       przykładem  jest  wykonywalne  binarium (skompilowany pro­
       gram) a.out, którego format jest zdefiniowany w a.out.h  i
       prawdopodobnie  w  exec.h  w  standardowym katalogu plików
       nagłówkowych.  Pliki te zawierają  ,,liczby  magiczne''  w
       określonym  miejscu  w  pobliżu  początku pliku. Liczby te
       informują uniksowy system operacyjny o tym, że  plik  jest



          Chronione prawem autorskim ale dystrybuowalne         1





FILE(1)                                                   FILE(1)


       wykonywalnym   binarium   oraz  który  z  możliwych  typów
       binariów  reprezentuje.   Koncepcja  ,,liczb  magicznych''
       została  jako rozszerzenie zastosowana również do plików z
       danymi. Można tak opisać każdy plik posiadający niezmienny
       identyfikator   przy   małym   i  określonym  przesunięciu
       względem początku  pliku.   Informacje  identyfikujące  te
       pliki  są  odczytywane  ze skompilowanego pliku liczb mag­
       icznych       /usr/share/misc/magic.mgc       lub        z
       /usr/share/misc/magic, gdy skompilowany plik nie istnieje.

       Jeśli plik nie pasuje do żadnego z wpisów  w  pliku  liczb
       magicznych,  dokonywane  jest sprawdzenie czy jest to plik
       tekstowy.   Rozpoznawane   są   zestawy   znaków:   ASCII,
       ISO-8859-x,  8-bitowe  rozszerzenia  ASCII niezgodne z ISO
       (używane w  systemach  Macintosh  i  IBM  PC),  Unicode  w
       kodowaniu  UTF-8,  Unicode w kodowaniu UTF-16 oraz EBCDIC.
       Sprawdzane są  zakresy  i  ciągi  bajtów,  które  stanowią
       drukowalny  tekst  w każdym z tych zestawów znaków.  Jeśli
       plik  przejdzie  któryś  z  tych  testów,  zgłaszany  jest
       odpowiadający mu zestaw znaków. Pliki w ASCII, ISO-8859-x,
       UTF-8 oraz w rozszerzeniach ASCII są  identyfikowane  jako
       ,,text'',  gdyż są one na ogół czytejne na dowolnym termi­
       nalu; pliki w UTF-16 i EBCDIC stanowią jedynie ,,character
       data''  (dane  znakowe),  gdyż  jeśli zawierają one tekst,
       tekst ten wymaga przed przeczytaniem konwersji. Dodatkowo,
       file  będzie próbował określić inne charakterystyki plików
       tekstowych. Jeśli wiersze są zakończone znakami  CR,  CRLF
       lub  NEL, zamiast standardowego uniksowego LF, zostanie to
       zgłoszone.  Zostaną  również  zidentyfikowane  pliki  zaw­
       ierające  wbudowane  sekwencje  unikowe  lub wielokrotnego
       drukowania.

       Po określeniu przez file zestawu znaków używanego w  pliku
       tekstowym, spróbuje on odgadnąć w jakim języku plik został
       napisany.   Testy  językowe  składają  się  z   poszukiwań
       określonych  łańcuchów  znakowych  (por.   names.h), które
       mogą pojawić się gdziekolwiek w kilku  pierwszych  blokach
       pliku.   Na  przykład słowo kluczowe .br wskazuje, że plik
       jest najprawdopodobniek plikiem  wejściowym  dla  programu
       troff(1)  podobnie,  jak  struct  wskazuje na program w C.
       Testy te są  mniej  godne  zaufania  niż  poprzednie  dwie
       grupy, więc są wykonywane na końcu. Testy językowe testują
       również niektóre pliki zbiorcze (jak archiwa tar(1).

       Plik, który nie może zostać określony jako jako zapisany w
       jednym  z  powyższych  zestawów  znaków,  jest  po  prostu
       określany jako ,,data'' (dane).

OPCJE
       -b      Nie podawanie  nazw  plików  na  początku  wierszy
               wynikowych (tryb skrócony).

       -c      Powoduje sprawdzanie wydruku przetworzonej postaci
               pliku  magicznego.  Jest  to  zwykle   używane   w



          Chronione prawem autorskim ale dystrybuowalne         2





FILE(1)                                                   FILE(1)


               połączeniu  z aby odpluskwić plik liczb magicznych
               przed jego zainstalowaniem.

       -C      Zapisuje plik wynikowy  magic.mgc,  który  zawiera
               wstępnie przetworzoną wersję pliku.

       -f nazwapliku
               Odczytuje  nazwy  testowanych  plików z nazwapliku
               (po jednym  w  wierszu)  przed  listą  argumentów.
               Obecna  musi być albo nazwapliku albo przynajmniej
               jeden argument będący nazwą  pliku;  aby  testować
               standardowe   wejście,   należy   użyć   argumentu
               ,,-''jako nazwy pliku.

       -i      Powoduje   wypisywanie   przez   polecenie    file
               łańcuchów stanowiących typy MIME, zamiast bardziej
               tradycyjnej postaci czytelnej dla człowieka. Zatem
               może  ono raczej wypisać ,,text/plain; charset=us-
               ascii'' zamiast  ,,ASCII  text''.   Aby  ta  opcja
               działała,  file  zmienia  sposób  w jaki obsługuje
               rozpoznane pliki (takie  jak  wiele  typów  plików
               tekstowych,  katalogi  itd.)  oraz  posługuje  się
               alternatywnym   plikiem   ,,liczb    magicznych''.
               (Zobacz sekcję ,,PLIKI'', poniżej.)

       -k      Nie zatrzymuje się po znalezieniu pierwszego dopa­
               sowania, kontynuuje testowanie.

       -m lista
               Podaje alternatywną listę plików z  liczbami  mag­
               icznymi.   Może   to   być   pojedynczy  plik  lub
               rozdzielona dwukropkami lista plików.

       -n      Wymusza  wyprowadzenie   danych   wyjściowych   po
               sprawdzeniu   każdego  pliku.  Jest  to  przydatne
               jedynie  podczas  sprawdzania  listy   plików.   W
               zamierzeniu  ma  być  przydatne  programom,  które
               wymagają wyprowadzania typów plików w potoku.

       -v      Drukuje informacje o wersji i kończy.

       -z      Próbuje zaglądać do plików skompresowanych.

       -L      powoduje, że program podąża za  dowiązaniami  sym­
               bolicznymi, podobnie jak w przypadku opcji ls(1) o
               identycznej nazwie (na systemach, które  obsługują
               dowiązania symboliczne).

       -s      Normalnie,  file  próbuje czytać i określać rodzaj
               pliku  jedynie  dla  tych  argumentów,  które   są
               plikami  zgłoszonymi  przez  stat(2)  jako  zwykłe
               pliki.  Pozwala to uniknąć  problemów,  gdyż  czy­
               tanie  plików  specjalnych  może  mie nieprzyjemne
               konsekwencje. Podanie opcji -s powoduje,  że  file



          Chronione prawem autorskim ale dystrybuowalne         3





FILE(1)                                                   FILE(1)


               czyta również argumenty będące plikami specjalnymi
               urządzeń blokowych i znakowych. Jest to  przydatne
               do  określania  rodzaju systemu plików w przypadku
               danych na surowych partycjach dysków, stanowiących
               pliki   specjalne  urządzeń  blokowych.  Opcja  ta
               powoduje również, że file nie zważa  na  zgłaszany
               przez  stat(2)  rozmiar  pliku,  gdyż w niektórych
               systemach funkcja ta  zgłasza  zero  dla  surowych
               partycji dysków.

PLIKI
       /usr/share/misc/magic.mgc  -  domyślna  skompilowana lista
       liczb magicznych

       /usr/share/misc/magic - domyślna lista liczb magicznych

       /usr/share/misc/magic.mime -  domyślna  lista  liczb  mag­
       icznych,  służąca  do  wypisywania  typów MIME w przypadku
       podania opcji -i.


ŚRODOWISKO
       Zmienna środowiskowa MAGIC  ustawia  domyślny  plik  liczb
       magicznych.

ZOBACZ TAKŻE
       magic(5) - opis formatu pliku liczb magicznych.
       strings(1),  od(1),  hexdump(1)  - narzędzia do testowania
       plików nietekstowych.

ZGODNOŚĆ ZE STANDARDAMI
       Program  ten  prawdopodobnie   wykracza   poza   definicję
       FILE(CMD)  z  definicji  interfejsu  Systemu  V  (System V
       Interface Definition). Wydaje się tak przynajmniej z tego,
       co  można  zrozumieć  z  tamtejszego  niejasnego języka...
       Zachowanie programu jest w większości zgodne z zachowaniem
       programu  z Systemu V o tej samej nazwie. Wersja niniejsza
       zna więcej magii, więc będzie  dawała  w  wielu  wypadkach
       inne (dokładniejsze) wyniki.

       Jedną  z istotnych różnic między tą wersją i wersją z Sys­
       temu V, jest to, że niniejsza wersja traktuje białe  znaki
       jako  separatory,  więc  spacje w łańcuchach wzorców muszą
       być chronione (przez odwrotny ukośnik). Na przykład,
       >10  string    language impress    (imPRESS data)
       w istniejącym pliku magicznym musiało by być zmienione na
       >10  string    language\ impress   (imPRESS data)
       Dodatkowo, w tej  wersji,  jeśli  łańcuch  wzorca  zawiera
       odwrotny ukośnik, to musi być on chroniony. Na przykład
       0    string         \begindata     Andrew Toolkit document
       w istniejącym pliku magicznym musiało by być zmienione na
       0    string         \\begindata    Andrew Toolkit document

       Wersja   3.2   SunOS   i   późniejsze   pochodzące  z  Sun



          Chronione prawem autorskim ale dystrybuowalne         4





FILE(1)                                                   FILE(1)


       Microsystems zawierają polecenie file(1), wywodzące się  z
       polecenia  z System V, lecz z pewnymi rozszerzeniami. Moja
       wersja różni się od Sun-owskiej tylko małymi  szczegółami.
       Zawiera ona rozszerzenie operatora `&', używanego jako np.
       >16  long&0x7fffffff     >0        not stripped

KATALOG MAGICZNY
       Wpisy w pliku liczb magicznych pochodzą  z  wielu  źródeł,
       głównie  z  USENET-u  i  zgłoszone  przez różnych autorów.
       Christos Zoulas (adres poniżej) będzie  zbierał  dodatkowe
       lub poprawione wpisy pliku liczb magicznych. Zebrane wpisy
       będą okresowo dystrybuowane.

       Kolejność wpisów w pliku magicznym jest istotna.  Zależnie
       od używanego systemu, kolejność, w której są ułożone, może
       być nieprawidłowa. Jeśli stare polecenie file używa  pliku
       magicznego,   warto   zachować  stary  plik  magiczny  dla
       porównania      (zmieniając      jego       nazwę       na
       /usr/share/misc/magic.orig).

PRZYKŁADY
       $ file file.c file /dev/hda
       file.c:   C program text
       file:     ELF 32-bit LSB executable, Intel 80386, version 1,
                 dynamically linked, not stripped
       /dev/hda: block special

       $ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
       /dev/hda:   x86 boot sector
       /dev/hda1:  Linux/i386 ext2 filesystem
       /dev/hda2:  x86 boot sector
       /dev/hda3:  x86 boot sector, extended partition table
       /dev/hda4:  Linux/i386 ext2 filesystem
       /dev/hda5:  Linux/i386 swap file
       /dev/hda6:  Linux/i386 swap file
       /dev/hda7:  Linux/i386 swap file
       /dev/hda8:  Linux/i386 swap file
       /dev/hda9:  empty
       /dev/hda10: empty

       $ file -i file.c file /dev/hda
       file.c:      text/x-c
       file:        application/x-executable, dynamically linked (uses shared libs), not stripped
       /dev/hda:    application/x-not-regular-file


HISTORIA
       Polecenie  file istniało w każdym systemie UNIX od przyna­
       jmniej wersji Research Version 6 (strona podręcznika man z
       16  stycznia  1975).  Wersja z Systemu V wprowadziła jedną
       istotną główną zmianę: zewnętrzną listę typów  liczb  mag­
       icznych.   Spowolniło  to trochę program, lecz uczyniło go
       bardziej elastycznym.




          Chronione prawem autorskim ale dystrybuowalne         5





FILE(1)                                                   FILE(1)


       Program ten, oparty na wersji z Systemu V, został napisany
       przez  Iana  Darwina <ian@darwinsys.com> bez zaglądania do
       innych źródeł.

       John Gilmore przerobił mocno ten kod, czyniąc  go  lepszym
       niż   pierwsza   wersja.    Geoff  Collyer  znalazł  kilka
       nietrafności i dostarczył trochę wpisów w pliku liczb mag­
       icznych.  Zmiana  obsługi operatora ,,&'' przez Roba McMa­
       hona, cudcv@warwick.ac.uk, w 1989.

       Guy Harris, guy@netapp.com, wykonał wiele zmian w  okresie
       od 1993 do dzisiaj.

       Podstawowy  rozwój  i  konserwację  w  okresie  od 1990 do
       dzisiaj prowadzi Christos Zoulas (christos@astron.com).

       Zmodyfikowany  przez  Chrisa  Lowtha,  chris@lowth.com,  w
       2000:   Obsługa  opcji  ,,-i''  powodującej  wyprowadzanie
       łańcuchów typów MIME oraz korzystającej  z  alternatywnego
       pliku liczb magicznych i wbudowanej logiki.

       Zmodyfikowany  przez  Erica  Fischera  (enf@pobox.com),  w
       lipcu 2000, aby rozpoznawał kody znaków i próbował  ziden­
       tyfikować język plików nie-ASCII.

       Lista  osób,  które  wniosły  wkład  do  katalogu "Magdir"
       (źródła pliku /etc/magic) jest za długa, aby ją  ty  przy­
       taczać.  Wiecie kim jesteście; dziękujemy.

NOTKA PRAWNA
       Copyright  (c)  Ian F. Darwin, Toronto, Canada, 1986-1999.
       Na standardowej licencji Berkeley  Software  Distribution;
       znajduje  się  ona  w  pliku  LEGAL.NOTICE dystrybyowanych
       źródeł.

       Pliki tar.h oraz is_tar.c  zostały  napisane  przez  Johna
       Gilmore'a  a  pochodzą  z jego ogólnie dostępnego programu
       tar, i nie podlegają powyższej licencji.

BŁĘDY
       Musi istnieć lepszy sposób na zautomatyzowanie konstrukcji
       pliku  liczb  magicznych  ze wszystkiego w Magdir. Jaki to
       sposób?  Co więcej, plik magiczny powinien być kompilowany
       do  binarium  (powiedzmy,  ndbm(3)  lub jeszcze lepiej, do
       ASCII o stałej długości łańcuchów znakowych  do  użytku  w
       heterogenicznych środowiskach sieciowych) w celu szybszego
       uruchamiania.  Wtedy program  działałby  tak  szybko,  jak
       program  o  tej  samej nazwie z Wersji 7, z elastycznością
       wersji z Systemu V.

       file używa kilku algorytmów, które  przedkładają  szybkość
       nad  dokładność, więc może zostać zmylony co do zawarotści
       plików tekstowych.




          Chronione prawem autorskim ale dystrybuowalne         6





FILE(1)                                                   FILE(1)


       Obsługa plików tekstowych (przede  wszystkim  dla  języków
       programowania) jest uproszczona, nieefektywna a do aktual­
       izacji wymaga rekompilacji.

       Powinnna istnieć klauzula ,,else'', aby obsłużyć  kontynu­
       acje linii.

       Plik  liczb magicznych i słowa kluczowe powinny obsługiwać
       wyrażenia regularne.  Używanie przez nie znaku  ASCII  TAB
       jako  separatora  pól  jest  paskudne  i  utrudnia  edycję
       plików, ale jest już zakorzenione.

       Może być zalecanym  zezwolenie  na  występowanie  wielkich
       liter  w  słowach  kluczowych,  np.  polecenia troff(1) vs
       makra stron podręcznika man.  Obsługa wyrażeń  regularnych
       ułatwiłaby to.

       Program  nie identyfikuje poprawnie FORTRANu.  Powinno być
       możliwe rozpoznawanie FORTRANu  przez  wyszukanie  pewnych
       słów  kluczowych,  które  pojawiają  się  po  wcięciach na
       początku linii.  Obsługa  wyrażeń  regularnych  ułatwiłaby
       to.

       Lista słów kluczowych w ascmagic prawdopodobnie przynależy
       do pliku liczb magicznych.  Można to zrobić poprzez użycie
       jakiegoś  słowa  kluczowego, w rodzaju ,,*'' jako wartości
       przesunięcia w pliku.

       Inną optymalizacją byłoby sortowanie  pliku  magicznego  w
       ten sposób, by można było przelecieć wszystkie testy pier­
       wszego  bajtu,  pierwszego  słowa,  pierwszego  podwójnego
       słowa  itd.,  gdy tylko zostanie on załadowany. Narzekania
       na  konflikty  we  wpisach  plików  magicznych.  Ustalenie
       zasady,  że  wpisy w pliku liczb magicznych są sortowane w
       oparciu o przesunięcie w badanym pliku, nie zaś o  pozycję
       wewnątrz pliku magicznego?

       Program  powinien  umożliwić  ocenę,  ,,jak  dobre''  było
       zgadnięcie.  Kończymy na usuwaniu zgadnięć (np. ,,From  ''
       jako  pierwsze  5 znaków w pliku), ponieważ nie są one tak
       dobre  jak  inne  zgadnięcia   (np.   ,,Newsgroups:''   vs
       ,,Return-Path:'').  Jednak  wciąż,  jeśli  inne  nie  będą
       pasować, powinno być możliwe użycie pierwszych zgadnięć.

       Program ten jest wolniejszy niż polecenia file  niektórych
       dystrybutorów.  Nowa obsługa kodów wieloznakowych czyni go
       jeszcze wolniejszym.

       Ta strona podręcznika man, a szczególnie ta  sekcja,  jest
       zbyt długa.

DOSTĘPNOŚĆ
       Najnowszą  oryginalną  wersję  programu  tego autora można
       pobrać z  anonimowego  ftp  z  ftp.astron.com  z  katalogu



          Chronione prawem autorskim ale dystrybuowalne         7





FILE(1)                                                   FILE(1)


       /pub/file/file-X.YY.tar.gz
























































          Chronione prawem autorskim ale dystrybuowalne         8