file
wykorzystuje kilka rodzajów testów :
1: Jeżeli plik nie istnieje, nie można go odczytać lub nie można określić jego statusu, wynik wskazuje, że plik został przetworzony, ale nie można określić jego typu.
To będzie wyjście jak cannot open file: No such file or directory
.
2: Jeżeli plik nie jest zwykłym plikiem, należy zidentyfikować jego typ. Katalog typów plików, FIFO, gniazdo, blok specjalny i znak specjalny są identyfikowane jako takie. Można również zidentyfikować inne typy plików zdefiniowane w implementacji. Jeśli plik jest dowiązaniem symbolicznym, domyślnie dowiązanie zostanie rozwiązane, a plik przetestuje typ pliku, do którego odwołuje się dowiązanie symboliczne. (Zobacz opcje -h
i -i
poniżej.)
To będzie wyjście jak .: directory
i /dev/sda: block special
. Znaczna część formatu tego i poprzedniego punktu jest częściowo zdefiniowana przez POSIX - możesz polegać na pewnych ciągach znajdujących się na wyjściu.
3: Jeżeli długość pliku wynosi zero, należy go zidentyfikować jako pusty plik.
Jest foo: empty
.
4: Narzędzie do analizy plików sprawdza początkowy segment pliku i zgaduje, jak rozpoznać jego zawartość na podstawie testów uwzględniających położenie. (Nie ma gwarancji, że odpowiedź jest poprawna; zobacz opcje -d, -M i -m poniżej.)
5: Narzędzie do analizy plików sprawdza plik i zgaduje, jak rozpoznać jego zawartość na podstawie domyślnych testów systemowych kontekstowych. (Odpowiedź nie jest poprawna).
Obaj używają identyfikacji magicznej liczby i są najciekawszą częścią polecenia. Magiczna liczba to specjalny ciąg bajtów, które znajduje się w znanym miejscu w pliku, który identyfikuje jej rodzaju. Tradycyjnie to miejsce jest pierwszymi dwoma bajtami, ale termin został rozszerzony o dłuższe ciągi znaków i inne lokalizacje. Zobacz to drugie pytanie, aby uzyskać więcej informacji na temat magicznych liczb w file
poleceniu.
file
Komenda posiada bazę tych numerów i jakie one odpowiadać; baza danych jest zwykle w niej /usr/share/mime/magic
i mapuje zawartość pliku na typy MIME . Wyjście tam (często część, file -i
jeśli domyślnie go nie otrzymujesz) będzie zdefiniowanym typem nośnika lub rozszerzeniem. „Testy kontekstowe” wykorzystują to samo podejście, ale są nieco bardziej niepewne. Żadne z nich nie ma gwarancji, że mają rację, ale mają na celu zgadywanie.
file
posiada również bazę danych mapującą te typy na nazwy, dzięki którym będzie wiedział, że zidentyfikowany przez siebie plik application/pdf
można opisać jako PDF document
. Te czytelne dla człowieka nazwy mogą być zlokalizowane również w innym języku. Zawsze będzie to ogólny opis typu pliku w sposób zrozumiały dla danej osoby, a nie maszyna.
Większość różnych wyników, które można uzyskać, pochodzi z tych etapów. W magic
pliku można znaleźć listę obsługiwanych typów i sposób ich identyfikacji - mój system zna 376 różnych typów. Podane nazwy i obsługiwane typy są określone przez opakowanie i konfigurację systemu, więc system może obsługiwać więcej lub mniej niż moje, ale na ogół jest ich dużo. libmagic
zawiera także dodatkowe zakodowane testy.
6: Plik należy zidentyfikować jako plik danych.
Dzieje się tak foo: data
, gdy w ogóle nie można dowiedzieć się o pliku.
Istnieją również inne małe tagi, które mogą się pojawić. Plik wykonywalny ( +x
) będzie zawierać wynik „ executable
”, zwykle oddzielony przecinkami. file
Realizacja może również wiedzieć, niektóre rzeczy o niektórych formatów plików, aby móc opisać dodatkowe punkty o nich, jak w swoim „ PDF document, version 1.4
”.