MAGIC(5) File Formats Manual MAGIC(5)

magicplik wzorców magicznych polecenia file

This manual page documents the format of magic files as used by the file(1) command, version 5.47. The file(1) command identifies the type of a file using, among other tests, a test for whether the file contains certain “magic patterns”. The database of these “magic patterns” is usually located in a binary file in /usr/share/file/misc/magic.mgc or a directory of source text magic pattern fragment files in /usr/share/file/misc/magic. The database specifies what patterns are to be tested for, what message or MIME type to print if a particular pattern is found, and additional information to extract from the file.

Format plików z fragmentami źródeł służącymi do zbudowania tej bazy danych jest następujący: Każdy wiersz pliku fragmentarycznego określa test, które ma być wykonany. Test porównuje dane, rozpoczynające się przy określonym przesunięciu względem początku pliku z wartością bajtową, numeryczną lub łańcuchem. Jeśli test zakończy się pomyślnie, wypisywany jest komunikat. Wiersz składa się z następujących pól:

Liczba, określająca przesunięcie (w bajtach) względem początku pliku, przy którym należy szukać testowanych danych. Przesunięcie może być liczbą ujemną, jeśli jest:
  • Pierwszym bezpośrednim przesunięciem wpisu magicznego (na poziomie kontynuacji 0), wówczas jest interpretowane jako przesunięcie liczone od końca pliku. Działa to tylko, gdy dostępny jest deskryptor danego pliku i jest to zwykły plik.
  • Przesunięcie kontynuacji względem końca ostatniego pola wyższego poziomu (&).
Jeśli przesunięcie zaczyna się od symbolu „+”, to wszystkie przesunięcia interpretowane są jako przesunięcia od początku pliku (domyślnie).
Typ testowanych danych. Dopuszczalne wartości to:
Wartość jednobajtowa.
Wartość dwubajtowa w natywnej kolejności bajtów tego komputera.
Wartość czterobajtowa w natywnej kolejności bajtów tego komputera.
Wartość ośmiobajtowa w natywnej kolejności bajtów tego komputera.
32-bitowa liczba zmiennoprzecinkowa o pojedynczej precyzji IEEE, w natywnej dla tego komputera kolejności bajtów.
64-bitowa liczba zmiennoprzecinkowa o podwójnej precyzji IEEE, w natywnej dla tego komputera kolejności bajtów.
A string of bytes. The string type specification can be optionally followed by a /<width> option and optionally followed by a set of flags [bCcftTtWw]*. Slash characters can be used to separate options for readability. The width limits the number of characters to be copied. Zero means all characters. The following flags are supported:
b
Wymusza test pliku binarnego.
C
Use upper case insensitive matching: upper case characters in the magic match both lower and upper case characters in the target, whereas lower case characters in the magic only match upper case characters in the target. (not valid for regex)
c
Use lower case insensitive matching: lower case characters in the magic match both lower and upper case characters in the target, whereas upper case characters in the magic only match upper case characters in the target. (not valid for regex) To do a complete case insensitive match, specify both “c” and “C”.
f
Wymaga, aby dopasowany łańcuch był pełnym słowem, a nie dopasowaniem części słowa.
s
Don't include the match length in the offset computation. (only valid for search and regex)
T
Trim the string, i.e. leading and trailing whitespace is deleted before the string is printed.
t
Wymusza test pliku tekstowego
W
Compact whitespace in the target, which must contain at least one whitespace character. (not valid for regex) If the magic has n consecutive blanks, the target needs at least n consecutive blanks to match.
w
Treat every blank in the magic as an optional blank. (not valid for regex)
Łańcuch w stylu Pascala, gdzie pierwszy bajt/liczba typu short/liczba typu int jest interpretowany jako długość bez znaku. Domyślną długością jest bajt i można go określić jako modyfikator. Obsługiwane są następujące modyfikatory:
B
Długość bajtu (domyślnie).
H
Długość 2 bajtów big endian.
h
Długość 2 bajtów little endian.
L
Długość 4 bajtów big endian.
l
Długość 4 bajtów little endian.
J
Długość zawierająca się w swej liczebności.
Łańcuch nie kończy się znakiem NUL. Zamiast bardziej wartościowego „I” używane jest „J„, ponieważ ten typ długości jest cechą formatu JPEG.
Czterobajtowa wartość, interpretowana jako data uniksowa.
Ośmiobajtowa wartość, interpretowana jako data uniksowa.
Czterobajtowa wartość, interpretowana jako data w stylu uniksowym, ale interpretowana jako czas lokalny, a nie UTC.
Ośmiobajtowa wartość, interpretowana jako data w stylu uniksowym, ale interpretowana jako czas lokalny, a nie UTC.
Ośmiobajtowa wartość interpretowana jako data w stylu windowsowym.
Dwubajtowa wartość interpretowana jako data w stylu FAT/DOS.
Dwubajtowa wartość interpretowana jako czas w stylu FAT/DOS.
32-bitowa długość ID3 w kolejności bajtów big-endian
Wartość dwubajtowa w kolejności bajtów big-endian.
Wartość czterobajtowa w kolejności bajtów big-endian.
Wartość ośmiobajtowa w kolejności bajtów big-endian.
32-bitowa liczba zmiennoprzecinkowa o pojedynczej precyzji IEEE, w kolejności bajtów big-endian.
64-bitowa liczba zmiennoprzecinkowa o podwójnej precyzji IEEE, w kolejności bajtów big-endian.
Czterobajtowa wartość w kolejności bajtów big-endian, interpretowana jako data uniksowa.
Ośmiobajtowa wartość w kolejności bajtów big-endian, interpretowana jako data uniksowa.
Czterobajtowa wartość w kolejności bajtów big-endian, interpretowana jako data w stylu uniksowym, ale interpretowana jako czas lokalny, a nie UTC.
Ośmiobajtowa wartość w kolejności bajtów big-endian, interpretowana jako data w stylu uniksowym, ale interpretowana jako czas lokalny, a nie UTC.
Ośmiobajtowa wartość w kolejności bajtów big-endian, interpretowana jako data w stylu windowsowym.
Dwubajtowa wartość w kolejności bajtów big-endian, interpretowana jako data w stylu FAT/DOS.
Dwubajtowa wartość w kolejności bajtów big-endian, interpretowana jako czas w stylu FAT/DOS.
Dwubajtowy łańcuch unikodu (UCS16), w kolejności bajtów big-endian.
32-bitowa długość ID3 w kolejności bajtów little-endian
Wartość dwubajtowa w kolejności bajtów little-endian.
Wartość czterobajtowa w kolejności bajtów little-endian.
Wartość ośmiobajtowa w kolejności bajtów little-endian.
32-bitowa liczba zmiennoprzecinkowa o pojedynczej precyzji IEEE, w kolejności bajtów little-endian.
64-bitowa liczba zmiennoprzecinkowa o podwójnej precyzji IEEE, w kolejności bajtów little-endian.
Czterobajtowa wartość w kolejności bajtów little-endian, interpretowana jako data uniksowa.
Ośmiobajtowa wartość w kolejności bajtów little-endian, interpretowana jako data uniksowa.
Czterobajtowa wartość w kolejności bajtów little-endian, interpretowana jako data w stylu uniksowym, ale interpretowana jako czas lokalny, a nie UTC.
Ośmiobajtowa wartość w kolejności bajtów little-endian, interpretowana jako data w stylu uniksowym, ale interpretowana jako czas lokalny, a nie UTC.
Ośmiobajtowa wartość w kolejności bajtów little-endian, interpretowana jako data w stylu windowsowym.
A two-byte value in little-endian byte order, interpreted as FAT/DOS-style date.
A two-byte value in little-endian byte order, interpreted as FAT/DOS-style time.
Dwubajtowy łańcuch unikodu (UCS16), w kolejności bajtów little-endian.
Wartość czterobajtowa w kolejności bajtów middle-endian (PDP-11).
Czterobajtowa wartość w kolejności bajtów middle-endian (PDP-11), interpretowana jako data uniksowa.
Czterobajtowa wartość w kolejności bajtów middle-endian (PDP-11), interpretowana jako data w stylu uniksowym, ale interpretowana jako czas lokalny, a nie UTC.
Poczynając od podanego przesunięcia, sprawdza ponownie bazę danych magii. Przesunięcie magii indirect jest domyślnie przesunięciem absolutnym w pliku, ale można podać /r aby wskazać, że przesunięcie jest względne wobec początku wpisu.
Define a “named” magic instance that can be called from another use magic entry, like a subroutine call. Named instance direct magic offsets are relative to the offset of the previous matched entry, but indirect offsets are relative to the beginning of the file as usual. Named magic entries return true if there was a match in the evaluation of the entry, or if there was a previous existing match.
Rekurencyjne wywołuje nazwaną magię poczynając od bieżącego przesunięcia. Jeśli nazwa odniesienia rozpoczyna się od ^, to zamieniana jest kolejność bajtów magii; jeśli magia wspominała np. leshort, jest traktowana jako beshort i na odwrót. Jest to przydatne, aby uniknąć duplikowania reguł dla różnych kolejności bajtów.
Wyrażenie regularne w składni rozszerzonych wyrażeń regularnych POSIX (jak egrep). Przetworzenie wyrażeń regularnych może zająć wykładniczo więcej czasu i ciężko przewidzieć ich wydajność, zatem odradza się ich używania. W środowiskach produkcyjnych należy uważnie sprawdzić ich wydajność. Należy też ograniczyć rozmiar łańcucha do przeszukania, podając /<długość>, aby uniknąć problemów z wydajnością przy skanowaniu długich plików. Po określeniu typu można opcjonalnie dodać /[c][s][l]. Flaga „c” czyni dopasowanie niewrażliwym na wielkość znaków, natomiast „s” aktualizuje przesunięcie na początek przesunięcia dopasowania, zamiast jego koniec. Modyfikator „l” zmienia limit długości, aby oznaczał on liczbę wierszy zamiast liczbę bajtów. Wiersze są rozgraniczane przez ogranicznik zależny od platformy. Gdy poda się liczbę wierszy, obliczana jest też niejawnie liczba bajtów zakładając, że każdy wiersz ma 80 znaków. Jeśli nie poda się liczby bajtów ani wierszy, wyszukiwanie jest automatycznie ograniczane do 8KiB. ^ i $ dopasowują początek i koniec poszczególnych wierszy, a nie początek i koniec pliku.
Dosłowny łańcuch szukany od podanego przesunięcia. Można korzystać z tych samych flag modyfikujących jak przy wzorcach łańcuchowych. Wyszukiwane wyrażenie musi zawierać zakres w postaci /liczba, tj. liczbę pozycji, na której dokonane będą próby dopasowania, zaczynając od początkowego przesunięcia. Jest to właściwe przy wyszukiwaniu większych wyrażeń binarnych z różnymi przesunięciami, korzystając z cytowania znaków specjalnych za pomocą \. Kolejność modyfikatorów i liczb nie ma znaczenia.
Zaprojektowane do użycia z testem x (zawsze prawdziwym); nie ma typu. Dopasowuje, gdy inne testy na tym poziomie kontynuacji nic wcześniej nie dopasowały. Za pomocą testu clear można wyczyścić dopasowane testy dla poziomu kontynuacji.
Ten test jest zawsze prawdziwy i czyści flagę dopasowania dla danego poziomu kontynuacji. Zaprojektowany do użycia z testem default.
Przetwarza plik jako plik certyfikatu DER. Pole testowe służy jako typ der, który musi być dopasowany. Występują następujące typy DER: eoc, bool, int, bit_str, octet_str, null, obj_id, obj_desc, ext, real, enum, embed, utf8_str, rel_oid, time, res2, seq, set, num_str, prt_str, t61_str, vid_str, ia5_str, utc_time, gen_time, gr_str, vis_str, gen_str, univ_str, char_str, bmp_str, date, tod, datetime, duration, oid-iri, rel-oid-iri. Po typach tych może wystąpić opcjonalny rozmiar numeryczny, który oznacza szerokość pola w bajtach.
Globalnie unikalny identyfikator (ang. Globally Unique Identifier – GUID), przetwarzany i wypisywany jako XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Jest to format łańcuchowy.
Jest to wartość typu quad wskazująca aktualne przesunięcie pliku. Może służyć do określenia rozmiaru pliku lub bufora magicznego. Przykładowe wpisy magiczne:
-0	offset	x	ten plik ma %lld bajtów
-0	offset	<=100	musi mieć więcej niż 100 \
    bajtów, a ma tylko %lld
Łańcuch oznaczający liczbę ósemkową.

Ze względu ma kompatybilność z Single UNIX Standard, określenia typu dC i d1 są równoważne byte, określenia typu uC i u1 są równoważne ubyte, określenia typu dS i d2 są równoważne short, określenia typu uS i u2 są równoważne ushort, określenia typu dI, dL, i d4 są równoważne long, określenia typu uI, uL, i u4 są równoważne ulong, określenie typu d8 jest równoważne quad, określenie typu u8 jest równoważne uquad, a określenie typu s jest równoważne string. Dodatkowo określenie typu dQ jest równoważne quad, a określenie typu uQ jest równoważne uquad.

Każdy wzorzec magiczny najwyższego poziomu (poniżej wyjaśniono znaczenie poziomów) jest klasyfikowany jako tekstowy lub binarny, w zależności od użytego typu. Typy „regex” i „search” są klasyfikowane jako tekstowe, chyba że we wzorcu użyto znaków niedrukowalnych. Wszystkie inne testy są klasyfikowane jako binarne. Wzorzec najwyższego poziomu uważa się za test tekstowy, jeśli wszystkie jego wzorce są wzorcami tekstowymi; w innym przypadku jest uważany za wzorzec binarny. Przy dopasowywaniu pliku, jako pierwsze próbowane są wzorce binarne; jeśli żaden nie zostanie dopasowany, a plik wygląda na tekstowy, to określane jest jego kodowanie i próbowane są wzorce tekstowe.

The numeric types may optionally be followed by an operand and a numeric value, to specify that the value is to be modified according to the operand and the numeric value before any comparisons are done. The following operands are supported: &, |, ↑, +, -, *, /, %. Prepending a u to the type indicates that ordered comparisons should be unsigned.

Wartość, które ma być porównywana z wartością z pliku. Jeśli typ jest numeryczny, to wartość jest podawana w postaci zgodnej z językiem C; jeśli typ jest łańcuchowy, to wartość jest podawana jako łańcuch języka C z dozwolonymi znakami specjalnymi (np. \n dla nowego wiersza).

Wartości numeryczne mogą być poprzedzone znakami określającymi operację, jaka ma zostać wykonana. Znakiem operacji może być =, określający, że wartość z pliku musi się równać wartości podanej, <, określający, że wartość z pliku musi być mniejsza od podanej, >, określający, że wartość z pliku musi być większa od podanej, &, określający, że wartość z pliku musi mieć wszystkie bity, które są ustawione w podanej wartości, ^, określający, że wartość z pliku musi mieć wyzerowane wszystkie bity, które są ustawione w podanej wartości, lub ~, określający, że podana wartość ma zostać zanegowana przed przetestowaniem. x, określa, że pasować może dowolna wartość. Jeśli znak operacji jest pominięty, używany jest =. Operatory &, ^ i ~ nie działają z liczbami zmiennoprzecinkowymi i typu double. Operator ! określa, że wiersz zostanie dopasowany jeśli test powiedzie się.

Wartości numeryczne są podawane w postaci zgodnej z językiem C, np. 13 to liczba dziesiętna, 013 to liczba ósemkowa, a 0x13 to liczba szesnastkowa.

Operacje numeryczne nie są przeprowadzane na typach daty; wartość numeryczna jest zamiast tego interpretowana jako przesunięcie.

Dla wartości łańcuchowych, łańcuch z pliku musi odpowiadać podanemu łańcuchowi. Do łańcuchów mogą być stosowane operatory =, < i > (lecz nie &). Długość, używana do porównywania jest długością argumentu łańcuchowego z pliku magicznego. Znaczy to, że wiersz można dopasować do dowolnego niepustego łańcucha (zwykle używane do późniejszego wypisania łańcucha), stosując >\0 (ponieważ wszystkie łańcuchy są większe od łańcucha zerowego).

Daty są traktowane jako wartości numeryczne w odpowiedniej wewnętrznej reprezentacji.

Specjalny test x zawsze daje prawdę.

Komunikat do wypisania, jeśli porównanie powiedzie się. Jeśli łańcuch zawiera określenie formatu printf(3), to wartość z pliku (po dokonaniu ewentualnego podanego przekształcenia) jest wypisywana korzystając z komunikatu jako łańcucha formatu. Jeśli łańcuch zaczyna się od „\b”, wypisywany komunikat jest resztą łańcucha bez dodanej przed nim spacji: wielokrotne dopasowania są zwykle rozdzielone pojedynczą spacją.

Twórcę i typ APPLE w formacie 4+4 znaków można podać jako:

!:apple	CREATYPE

Listę powszechnych rozszerzeń plików, rozdzieloną ukośnikiem, można podać jako:

!:ext	rozsz[/rozsz...]

tj. jako dosłowny łańcuch “!:ext”, po którym następuje lista powszechnych rozszerzeń plików, rozdzielona ukośnikiem; np. dla obrazów JPEG:

!:ext jpeg/jpg/jpe/jfif

Typ MIME jest podawany w osobnym wierszu, który musi wystąpić jako następny niepusty wiersz niebędący komentarzem po wierszu magii identyfikującym typ pliku; ma on następujący format:

!:mime	TYPMIME

tj. dosłowny łańcuch “!:mime”, po którym następuje typ MIME.

W osobnym wierszu można podać opcjonalną siłę, która odnosi się do aktualnego opisu magii; korzysta z następującego formatu:

!:strength ARG WARTOŚĆ

Argumentem ARG może być: +, -, * lub /; natomiast WARTOŚĆ jest stałą z przedziału 0-255. Na aktualnie obliczonej domyślnej sile magii przeprowadzane jest działanie podane w argumencie, którego drugim elementem jest podana stała.

Niektóre formaty pliku zawierają dodatkowe informacje, które będą wypisane razem z typem pliku lub wymagają dodatkowych testów aby określić prawdziwy typ pliku. Te dodatkowe testy są wprowadzane za pomocą jednego lub wielu znaków > poprzedzających przesunięcie. Liczba znaków > w wierszu określa poziom testu; wiersz bez > na początku jest na poziomie 0. Testy są ułożone w hierarchii drzewiastej: jeśli test w wierszu na poziomie n powiedzie się, wykonywane są wszystkie kolejne testy na poziomie , a komunikaty są wypisywane jeśli testy powiodą się, do momentu pojawienia się wiersza na poziomie n (lub niższym). W przypadku bardziej złożonych plików, można używać pustych komunikatów, aby uzyskać efektywną składnię „jeżeli/to”, w następującej postaci:

0      string    MZ
>0x18  uleshort  <0x40   pl. wykonywalny MS-DOS
>0x18  uleshort  >0x3f   rozsz. pl. wyk. PC (np. MS Windows)

Przesunięcia nie muszą być stałe, mogą być też odczytywane ze sprawdzanego pliku. Jeśli pierwszym znakiem po ostatnim > jest to łańcuch po nawiasie jest interpretowany jako niebezpośrednie przesunięcie. Oznacza to, że liczba po nawiasie jest używana jako przesunięcie w pliku. Wartość na jakiej przesunięcie jest odczytane, jest używana ponownie jako przesunięcie w pliku. Przesunięcia niebezpośrednie mają postać (x [[.,][bBcCeEfFgGhHiIlmosSqQ]][+-][ y ]). Wartość x służy jako przesunięcie w pliku. Bajt, długości id3 short lub long jest odczytywany na tym przesunięciu, w zależności od określenia typu . Wartość jest traktowana jako ze znakiem, jeśli podano „,” lub bez znaku, jeśli podano „.”. Typy pisane wielką literą są interpretowane jako wartość big endian, a małe litery reprezentują wartość liczbową little endian; typ interpretuje liczbę jako wartość middle endian (PDP-11). Do tej liczby dodawana jest wartość , a wynik służy jako przesunięcie w pliku. Domyślnym typem, jeśli się go nie określi, jest long. Rozpoznawane są poniższe typy:

bcBC Byte/Char N/A 1
efg Double Little 8
EFG Double Big 8
hs Half/Short Little 2
HS Half/Short Big 2
i ID3 Little 4
I ID3 Big 4
l Long Little 4
L Long Big 4
m Middle Middle 4
o Octal Tekstowa Zmienny
q Quad Little 8
Q Quad Big 8

W ten sposób można sprawdzić struktury o zmiennej długości:

# Pliki wykonywalne MS Windows są też prawidłowymi pl. wyk. MS-DOS
0           string   MZ
>0x18       uleshort <0x40  Wykonywalny MZ (MS-DOS)
# pomiń poniższy blok, jeśli nie jest rozszerzonym pl. wykonywalnym
>0x18       uleshort >0x3f
>>(0x3c.l)  string   PE\0\0 Wykonywalny PE (MS-Windows)
>>(0x3c.l)  string   LX\0\0 Wykonywalny LX (OS/2)

Ten sposób ma swoje wady: trzeba się upewnić, że na końcu coś się wypisze albo użytkownicy mogą otrzymać puste wyjście (np. gdy w powyższym przykładzie nie jest to ani PE\0\0 ani LE\0\0).

Jeśli nie da się bezpośrednio zastosować tego niebezpośredniego przesunięcia, możliwe są proste obliczenia: dołączenie wewnątrz nawiasów pozwala na modyfikację wartości odczytanej z pliku, zanim zostanie użyta jako przesunięcie:

# Pliki wykonywalne MS Windows są też prawidłowymi pl. wyk. MS-DOS
0           string   MZ
# czasem, wartość na 0x18 ma mniej niż 0x40 lecz wciąż jest to rozsz.
# plik wykonywalny, zatem po prostu dodajemy do pliku
>0x18       uleshort <0x40
>>(4.s*512) leshort  0x014c  Wykonywalny COFF (MS-DOS, DJGPP)
>>(4.s*512) leshort  !0x014c Wykonywalny MZ (MS-DOS)

Czasem dokładne przesunięcie nie jest znane, ponieważ zależy ono od długości lub pozycji (tam gdzie wcześniej używano przesunięć niebezpośrednich) poprzednich pól. Można podać przesunięcie względem końca ostatniego pola wyższego poziomu za pomocą ‘&’ stosowanego jako przedrostek przesunięcia:

0           string   MZ
>0x18       uleshort >0x3f
>>(0x3c.l)  string   PE\0\0    Wykonywalny PE (MS-Windows)
# po którym występuje podpis PE będący typem procesora
>>>&0       leshort  0x14c     dla Intel 80386
>>>&0       leshort  0x8664    dla x86-64
>>>&0       leshort  0x184     dla DEC Alpha

Przesunięcia niebezpośrednie i względne można łączyć:

0             string   MZ
>0x18         uleshort <0x40
>>(4.s*512)   leshort  !0x014c Wykonywalny MZ (MS-DOS)
# jeśli to nie COFF, cofnij się o 512 bajtów i dodaj przesunięcie
# z bajtu 2/3, które stanowi inny sposób znalezienia początku
# rozszerzonego pliku wykonywalnego
>>>&(2.s-514) string   LE      Wykonywalny LE (ster. MS Windows VxD)

Lub na odwrót:

0                 string   MZ
>0x18             uleshort >0x3f
>>(0x3c.l)        string   LE\0\0  Wykonywalny LE (MS-Windows)
# na przesunięciu 0x80 (-4, ponieważ przesun. względne zaczynają się od
# końca dopasowania wyższego poziomu) wewnątrz nagłówka LE, znajdujemy
# absolutne przes. do kodu obszaru, gdzie szukamy określonego podpisu
>>>(&0x7c.l+0x26) string   UPX     \b, skompresowany UPX

Lub podać oba!

0                string   MZ
>0x18            uleshort >0x3f
>>(0x3c.l)       string   LE\0\0 Wykonywalny LE (MS-Windows)
# na przesunięciu 0x58 w nagłówku LE, znajdujemy przesunięcie względne do
# obszaru danych, gdzie szukamy określonego podpisu
>>>&(&0x54.l-3)  string   UNACE  \b, samorozp. się archiwum ACE

Jeśli w pliku zachodzi konieczność radzenia sobie z duetami przesunięcie/długość, z samego pliku można pobrać nawet drugą wartość w wyrażeniu w nawiasie, za pomocą kolejnego zestawu nawiasów. Proszę zauważyć, że to dodatkowe przesunięcie niebezpośrednie jest zawsze względem początku głównego przesunięcia niebezpośredniego.

0                 string       MZ
>0x18             uleshort     >0x3f
>>(0x3c.l)        string       PE\0\0 Wykonywalny PE (MS-Windows)
# szukamy sekcji PE o nazwie ".idata"...
>>>&0xf4          search/0x140 .idata
# ...i przechodzimy na jej koniec, obliczony jako początek+długość;
# są one zlokalizowane 14 i 10 bajtów po nazwie sekcji
>>>>(&0xe.l+(-4)) string       PK\3\4 \b, archiwum samorozp. ZIP

Jeśli ma się listę znanych wartości na określonym poziomie kontynuacji i chce się udostępnić domyślny przypadek w postaci przełącznikowej:

# wyczyść dopasowania danego poziomu kontynuacji
>18	clear	x
>18	lelong	1	jeden
>18	lelong	2	dwa
>18	default	x
# wypisz domyślne dopasowanie
>>18	lelong	x	niedopasowane 0x%x

file(1) - polecenie odczytujące ten plik.

Formaty long, belong, lelong, melong, short, beshort i leshort nie zależą od długość typów danych C short i long na platformie, choć Single UNIX Specification implikuje, że zależą. Jednak ponieważ OS X Mountain Lion przeszedł zestaw walidacji Single UNIX Specification i dostarcza wersję file(1) w której brak jest zależności od rozmiarów typów danych C oraz która jest zbudowana dla środowiska 64-bitowego, w którym long ma 8 bajtów, a nie 4, być może zestaw walidujący nie sprawdza czy np. long odnosi się to elementu o tym samym rozmiarze, co typ danych C long. Prawdopodobnie powinny występować nazwy type takie jak int8, uint8, int16, uint16, int32, uint32, int64 i uint64 oraz warianty o określonej kolejności bajtów tychże, aby było jasne, że typy te mają określoną szerokość.

Tłumaczenie niniejszej strony podręcznika: Przemek Borys <pborys@dione.ids.pl>, Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net

November 24, 2025 Linux 7.0.8-arch1-1