other languages
other sections
FILE(1) | General Commands Manual | FILE(1) |
NAZWA¶
file
—
określa typ pliku
SKŁADNIA¶
file
[-bcEhiklLNnprsvz0
-
-apple
-
-mime-encoding
-
-mime-type
-e
nazwa-testu-F
separator-f
nazwa-pliku-m
pliki-magicznefile
-C
[-m
pliki-magicznefile
[-
-help
OPIS¶
Niniejsza strona podręcznika dokumentuje wersję 5.19 poleceniafile
.
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 i testy języka. Pierwszy test zakończony
powodzeniem 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 bezpiecznie czytać na terminalu
ASCII
),
executable (wykonywalny -- plik zawiera wyniki
kompilacji w formacie zrozumiał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 dodawania lokalnych modyfikacji do
pliku /etc/magic, proszę zachować 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 Berkeley -
zmieniono tam "shell commands text" na "shell script".
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 lub nazwane potoki (FIFO), w systemach które je
zaimplementowały), o ile te rodzaje plików będą
zdefiniowane w systemowym pliku nagłówkowym
<sys/stat.h.>
Testy liczb magicznych służą do sprawdzania plików,
które zawierają dane w określonym formacie. Dobrym tego
przykładem jest wykonywalny plik binarny (skompilowany program) a.out,
którego format jest zdefiniowany w
<elf.h,>
<a.out.h>
i prawdopodobnie
<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 wykonywalnym plikiem binarnym
oraz który z możliwych typó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 magicznych
/usr/share/misc/magic.mgc lub z katalogu
/usr/share/misc/magic, gdy skompilowany
plik nie istnieje. Dodatkowo, pliki
$HOME/.magic.mgc lub
$HOME/.magic, jeśli
będą istniały, zostaną użyte z
pierwszeństwem w stosunku do systemowych plików magicznych.
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ż mogą
być one na ogół czytane na dowolnym terminalu; 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 zawierają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
najprawdopodobniej 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¶
-
-apple
- Powoduje, że polecenie file wypisuje typ pliku i kod twórcy zgodnie z zapisem używanym w starszych wersjach MacOS. Kod składa się z ośmiu liter, pierwsza opisuje typ pliku, ostatnia twórcę.
-b
,-
-brief
- Nie podaje nazw plików na początku wierszy wynikowych (tryb skrócony).
-C
,-
-compile
- Zapisuje plik wynikowy magic.mgc, który zawiera wstępnie przetworzoną wersję pliku lub katalogu.
-c
,-
-checking-printout
- Powoduje sprawdzenie wydruku przetworzonej postaci pliku magicznego. Jest
to zwykle używane w połączeniu z
-m
, aby odpluskwić nowy plik liczb magicznych przed jego zainstalowaniem. -E
- W przypadku błędów systemu plików (np. nie znaleziono pliku) nie obsługuje błędu jako normalnego wyniku i nie kontynuuje działania, jak wymaga norma POSIX, lecz wyświetla błąd i wychodzi.
-e
,-
-exclude
nazwa-testu- Wyłącza test o nazwie
nazwa-testu z listy testów,
przeprowadzanych w celu określenia typu pliku. Poprawne nazwy
testów to:
- apptype
- Typ aplikacji
EMX
(tylko na EMX). - ascii
- Różne typy plików tekstowych (ten test stara się odgadnąć kodowanie tekstu, niezależnie od opcji "encoding").
- encoding
- Różne kodowania tekstowe do testów magicznych soft.
- tokens
- Ignorowane w celu zachowania kompatybilności wstecznej.
- cdf
- Wypisuje szczegóły plików Compound Document File.
- compress
- Wyszukuje i zagłębia się w pliki skompresowane.
- elf
- Wypisuje szczegóły pliku ELF.
- soft
- Sprawdza z plikami magicznymi.
- tar
- Sprawdza pliki tar.
-F
,-
-separator
separator- Używa podanego łańcucha jako separatora między nazwą pliku a zwróconym wynikiem pliku. Domyślnie jest to ":".
-f
,-
-pliki-od
nazwa-pliku- Odczytuje nazwy testowanych plików z
nazwa-pliku (po jednym w wierszu) przed
listą argumentów. Obecna musi być albo
nazwa-pliku albo przynajmniej jeden
argument będący nazwą pliku; aby testować
standardowe wejście, należy użyć argumentu
"-" jako nazwy pliku. Proszę zauważyć,
że nazwa-pliku nie jest rozwijana,
a nazwy plików są przetwarzane przy wystąpieniu tej
opcji przed wszystkimi innymi opcjami. Pozwala to na przetworzenie wielu
list plików z różnymi argumentami wiersza polecenia,
w tym samym wywołaniu
file
. Z tego powodu, jeśli chce się ustawić ogranicznik, konieczne jest zrobienie tego przed podaniem listy plików, np. "-F
@-f
nazwa-pliku ", zamiast: "-f
nazwa-pliku-F
@ ". -h
,-
-no-dereference
- opcja powoduje, że nie zachodzi podążanie za
dowiązaniami symbolicznymi (w systemach, które
obsługują dowiązania symboliczne). Jest to
domyślne zachowanie, jeśli nie zdefiniowano zmiennej
środowiskowej
POSIXLY_CORRECT
. -i
,-
-mime
- Powoduje, że polecenie file wypisuje łańcuchy typów mime, zamiast tradycyjnych nazw czytelnych dla użytkownika. Stąd, pojawić się może "text/plain; charset=us-ascii", zamiast "ASCII text".
-
-mime-type
,-
-mime-encoding
- Jak
-i
, lecz wypisuje jedynie określone element(y). -k
,-
-keep-going
- Nie zatrzymuje się po pierwszym dopasowaniu. Kolejne dopasowania
będą poprzedzone łańcuchem "\012- "
(aby osiągnąć znak nowego wiersza, proszę
skorzystać z opcji
-r
). Wygrywa najsilniejszy wzór magiczny (patrz opcja-l
). -l
,-
-list
- Pokazuje listę wzorców i ich siłę
posortowanych malejącą według siły
magic, która jest używana do
dopasowania (zobacz też opcję
-k
). -L
,-
-dereference
- Powoduje, że program podąża za dowiązaniami
symbolicznymi, tak jak w przypadku opcji
ls(1) (w systemach
obsługujących dowiązania symboliczne) o identycznej
nazwie. Jest to domyślne zachowanie, jeśli zdefiniowano
zmienną środowiskową
POSIXLY_CORRECT
. -m
,-
-plik-magiczny
pliki-magiczne- Podaje alternatywną listę plików i katalogów zawierających magię. Może być to pojedynczy plik lub rozdzielona dwukropkami lista plików. Jeśli razem z plikiem lub katalogiem zostanie znaleziony skompilowany plik magiczny, zostanie użyty zamiast pliku lub katalogu.
-N
,-
-no-pad
- Nie wyrównuje nazw plików tak, aby wynik wyglądał lepiej.
-n
,-
-no-buffer
- Wymusza opróżnienie standardowego wyjścia po sprawdzeniu każdego pliku. Jest to przydatne wyłącznie przy sprawdzaniu listy plików. Opcja jest przeznaczona do programów oczekujących wyniku z typem plików, pozyskanego z potoku.
-p
,-
-preserve-date
- W systemach obsługujących
utime(3) lub
utimes(2), stara się zachować
czas dostępu analizowanych plików, aby udać,
że
file
nigdy ich nie odczytało. -r
,-
-raw
- Nie tłumaczy niedrukowalnych znaków na \ooo. Zwykle
file
tłumaczy znaki niedrukowalne na ich postać ósemkową. -s
,-
-pliki-specjalne
- 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ż czytanie plików specjalnych może mieć nieprzyjemne konsekwencje. Podanie opcji-s
powoduje, żefile
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ż, żefile
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. -v
,-
-version
- Wyświetla informacje o wersji i kończy działanie.
-z
,-
-uncompress
- Próbuje zaglądać do plików skompresowanych.
-0
,-
-print0
- Wypisuje znak zerowy "\0" po końcu nazwy plików. Przydatne do zastosowania cut(1) na wyniku. Opcja nie wpływa na separator, który jest w dalszym ciągu wypisywany.
--help
- Wyświetla komunikat pomocy i wychodzi.
PLIKI¶
- /usr/share/misc/magic.mgc
- Domyślna skompilowana lista liczb magicznych.
- /usr/share/misc/magic
- Katalog zawierający domyślne pliki magiczne.
ŚRODOWISKO¶
Zmienna środowiskowaMAGIC
może
być wykorzystana do ustawienia domyślnej nazwy pliku magicznego.
Jeśli zmienna ta jest ustawiona, to
file
nie próbuje otworzyć
$HOME/.magic.
file
dodaje " .mgc" do
wartości tej zmiennej, jeśli to konieczne. Jednak
plik musi istnieć, aby
plik.mime był brany pod
uwagę. Zmienna środowiskowa
POSIXLY_CORRECT
kontroluje (w systemach,
które obsługuję dowiązania środowiskowe),
czy file
będzie
próbował podążać za dowiązaniami
symbolicznymi. Jeśli jest ustawiona, to
file
podąża za nimi, w
przeciwnym wypadku - nie. Za dowiązania odpowiadają
również opcje -L
i
-h
.
ZOBACZ TAKŻE¶
magic(5), hexdump(1), od(1), strings(1),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 Systemu V, jest to, że niniejsza wersja traktuje białe znaki jako separatory, więc spacje w łańcuchach wzorców muszą być chronione. Na przykład,>10 string language impress (imPRESS data)
>10 string language\ impress (imPRESS data)
0 string \begindata Andrew Toolkit document
0 string \\begindata Andrew Toolkit document
file
,
wywodzące się z polecenia z System V, lecz z pewnymi
rozszerzeniami. Ta 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.PRZYKŁADY¶
$ file file.c file /dev/{wd0a,hda} file.c: C program text file: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped /dev/wd0a: block special (0/0) /dev/hda: block special (3/0) $ file -s /dev/wd0{b,d} /dev/wd0b: data /dev/wd0d: x86 boot sector $ 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/{wd0a,hda} file.c: text/x-c file: application/x-executable /dev/hda: application/x-not-regular-file /dev/wd0a: application/x-not-regular-file
HISTORIA¶
Poleceniefile
istniało w
każdym systemie UNIX od przynajmniej wersji
Research Version 4
(strona podręcznika man z listopada 1973).
Wersja z Systemu V wprowadziła jedną istotną
główną zmianę: zewnętrzną
listę typów liczb magicznych. Spowolniło to trochę
program, lecz uczyniło go bardziej elastycznym.
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 magicznych. Zmiana obsługi operatora "&" przez Roba
McMahona, ⟨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ł
zidentyfikować język plików nie-ASCII.
Zmodyfikowany przez Reubena Thomasa ⟨rrt@sc3d.org⟩, w latach
2007-2011, w celu poprawy obsługi MIME, połączenia magii
MIME i nie MIME, obsługi zarówno katalogów jak i
plików magicznych, zaaplikowania wielu poprawek
błędów, zaktualizowania i poprawienia sporej
części magii, poprawienia systemu budowania, dokumentacji i
przepisania podpięć Pythona w czystym Pythonie.
Lista osób, które wniosły wkład do katalogu
"magic" (pliki magiczne) jest za długa, aby ją tu
przytaczać. Wiecie kim jesteście; dziękujemy. Wiele
osób jest wspomnianych w plikach źródłowych.
NOTKA PRAWNA¶
Copyright (c) Ian F. Darwin, Toronto, Canada, 1986-1999. Na standardowej licencji Berkeley Software Distribution, znajduje się ona w pliku COPYING, w katalogu źródeł. Pliki tar.h i is_tar.c zostały napisane przez Johna Gilmore'a, a pochodzą z jego ogólnie dostępnego programu tar(1) i nie podlegają powyższej licencji.WARTOŚĆ ZWRACANA¶
file
zwraca 0 po pomyślnym wykonaniu i
wartość niezerową w przypadku wystąpienia
błędu.
BŁĘDY¶
Proszę zgłaszać błędy i wysyłać łatki do systemu śledzenia błędów pod adresem http://bugs.gw.com/ lub na listę dyskusyjną ⟨file@mx.gw.com⟩ (najpierw proszę się zapisać na http://mx.gw.com/mailman/listinfo/file).DO ZROBIENIA¶
Naprawić wyjście, dzięki czemu testy flag MIME i APPLE nie będą potrzebne wszędzie, a rzeczywiste wyjście byłoby tworzone tylko raz w jednym miejscu. Wymaga odpowiedniego projektu. Sugestia: wypychaj prawdopodobne wyniki na listę i użyj ostatniej wartości z listy (powinna być najdokładniejsza) lub użyj wartości domyślnej, jeśli lista jest pusta. Nie powinno to spowolnić obliczeń. Kontynuować likwidację wszystkich błędów. System BTS Debiana jest tu dobrym źródłem. Przechowywać dowolnie długie łańcuchy, np. dla %s wzorców, dzięki czemu mogłyby być wypisywane. Naprawia błąd Debiana #271672. Wymagałoby bardziej złożonego kodu przechowywania/ładowania odpowiedzialnego za naukę. Dodać składnię do względnych przesunięć po bieżącym poziomie (bug Debiana #466037). Sprawić, by działała opcja -ki, tzn. podawanie wielu typów MIME. Dodać bibliotekę zip do zagłębienia się w dokumenty Office2007, co umożliwiłoby poznanie ich typu. Dodać opcję do wypisywania URL-i źródeł opisów plików. Połączyć przeszukiwania skryptów i dodać metodę na powiązanie nazw plików wykonywalnych z typami MIME (wartość magiczna do !:mime która spowodowałaby wyszukanie wynikowego łańcucha w tabeli). Dzięki temu uniknęłoby się dodawanie tych samych wartości magicznych dla każdego nowego interpretera hash-bang. Naprawić “name” i “use” aby pilnowały spójności w chwili kompilacji (zduplikowane “name”, “use” wskazujące na niezdefiniowaną “name”). “name” / “use” powinny być efektywniejsze poprzez utrzymywanie posortowanej listy nazw. Wdrożyć i udokumentować ^ jako specjalny przypadek do zmieniania kolejności bajtów w parserze, dzięki czemu nie wymagałoby to cytowania.DOSTĘPNOŚĆ¶
Najnowszą oryginalną wersję programu tego autora można pobrać z anonimowego ftp z ftp.astron.com, z katalogu /pub/file/file-X.YZ.tar.gz.TŁUMACZENIE¶
Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Przemek Borys (PTM) <pborys@dione.ids.pl>, Andrzej M. Krzysztofowicz (PTM) <ankry@green.mf.pg.gda.pl> i Michał Kułach <michal.kulach@gmail.com>.30 stycznia 2014 | Debian |