Provided by:
manpages-pl_20060617-1_all 
NAZWA
magic - plik liczb magicznych polecenia file
OPIS
Ta strona podręcznika systemowego opisuje format pliku magicznego,
używanego przez polecenie file(1) w wersji 3.37. Polecenie file
rozpoznaje typ pliku, korzystając (poza innymi metodami) z testu,
polegającego na sprawdzeniu, czy plik nie rozpoczyna się od pewnej
liczby magicznej. Plik /usr/share/misc/magic określa jakie liczby
sprawdzać i jakie komunikaty drukować w wypadku znalezienia określonej
liczby magicznej oraz dodatkowe dane, które mają zostać pobrane z
pliku.
Każdy wiersz pliku 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 1, 2 lub 4-bajtową wartością 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:
offset Liczba, określająca w bajtach przesunięcie względem początku
pliku, przy którym należy szukać testowanych danych.
typ Typ testowanych danych. Dopuszczalne wartości to:
byte Wartość jednobajtowa.
short Wartość dwubajtowa (w większości systemów) w natywnej
kolejności bajtów maszyny.
long Wartość czterobajtowa (w większości systemów) w
natywnej kolejności bajtów maszyny.
string Łańcuch bajtów. Po specyfikacji typu łańcucha może
opcjonalnie wystąpić /[Bbc]*. Znacznik ,,B''
kondensuje białe znaki w testowanym tekście, który
musi zawierać co najmniej jeden biały znak. Jeśli
liczba magiczna zawiera "n" kolejnych białych znaków,
to aby nastąpiło dopasowanie, testowany tekst musi
zawierać co najmniej "n" kolejnych białych znaków.
Znacznik ,,b'' powoduje traktowanie wszystkich
białych znaków w testowanym tekście jako opcjonalne.
Wreszcie, znacznik ,,c'' określa dopasowanie
ignorujące wielkość liter: małe litery w liczbie
magicznej pasują zarówno do małych, jak i do wielkich
liter w testowanym tekście, podczas gdy wielkie
litery w liczbie magicznej pasują tylko do wielkich
liter.
date Czterobajtowa wartość, interpretowana jako data
uniksowa.
ldate Czterobajtowa wartość, interpretowana jako data w
stylu uniksowym, ale interpretowana jako czas
lokalny, a nie UTC.
beshort Wartość dwubajtowa (w większości systemów) w
grubokońcej (big-endian) kolejności bajtów.
belong Wartość czterobajtowa (w większości systemów) w
grubokońcej kolejności bajtów.
bedate Wartość czterobajtowa (w większości systemów) w
grubokońcej kolejności bajtów, interpretowana jako
data uniksowa.
leshort Wartość dwubajtowa (w większości systemów) w
ostrokońcej (little-endian) kolejności bajtów.
lelong Wartość czterobajtowa (w większości systemów) w
ostrokońcej kolejności bajtów.
ledate Wartość czterobajtowa (w większości systemów) w
ostrokońcej kolejności bajtów, interpretowana jako
data uniksowa.
leldate Wartość czterobajtowa (w większości systemów) w
ostrokońcej kolejności bajtów, interpretowana jako
data w stylu uniksowym, ale interpretowana jako czas
lokalny, a nie UTC.
Typy numeryczne mogą występować w parze z (następującym po nich)
znakiem & i wartością numeryczną wskazującą, że dana wartość ma być
poddana operacji AND z zadaną wartością numeryczną przed dokonaniem
porównania. Poprzedzenie typu przez u wskazuje, że porównane wartości
powinny być bez znaku.
test 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 nowej linii).
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 x, określający, że pasować
może dowolna wartość. Jeśli znak operacji jest pominięty,
używany jest =.
Wartości numeryczne są podawane w postaci zgodnej z językiem C,
np. 13 to liczba dziesiętna, 013 to liczba ósemkowa, 0x13 to
liczba szesnastkowa.
Dla wartości łańcuchowych łańcuch bajtów z pliku musi odpowiadać
podanemu łańcuchowi bajtów. 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
łańcucha i wypisać go, stosując >\0 (ponieważ wszystkie łańcuchy
są większe od łańcucha zerowego).
komunikat
Komunikat, wypisywany po pomyślnym dopasowaniu. Jeśli łańcuch
zawiera specyfikację formatu printf(3) to wartość z pliku jest
wypisywana (po odpowiednim maskowaniu) przy użyciu komunikatu
jako łańcucha formatującego.
Niektóre formaty plików zawierają dodatkowe dane, które mają być
wypisane razem z danym typem pliku. Wiersz, rozpoczynający się od znaku
> oznacza dodatkowe testy i komunikaty. Liczba > w linii określa poziom
testu; wiersz bez > jest na poziomie 0. Każdy wiersz w poziomie n+1
jest pod kontrolą wiersza w poziomie n, poprzedzającego go najbliżej w
pliku magicznym. Jeśli test wiersza na poziomie n się powiedzie,
dokonywane będą dalsze testy na poziomach n+1. Proces ten kończy
następny wiersz na poziomie n. Jeśli pierwszy znak za ostatnim > to (,
to łańcuch za nawiasem jest interpretowany jako pośrednie przesunięcie.
Znaczy to, że liczba po nawiasie służy jako przesunięcie w pliku. Przy
tym przesunięciu odczytywana jest wartość używana następnie jako
przesunięcie w pliku. Przesunięcia pośrednie są postaci:
(x[.[bslBSL]][+-][y]). Wartość x jest używana jako przesunięcie w
pliku. Następnie przy tym przesunięciu odczytywany jest z niego bajt,
słowo lub podwójne słowo, zależnie od specyfikatora typu [bslBSL].
Wielkie litery oznaczają liczby jako wartości grubokońce (big-endian),
podczas gdy małe litery oznaczaja wartości (ostrokońce) little-endian.
Do liczby tej dodawana jest wartość y, a wynik służy jako przesunięcie
w pliku. Domyślnym typem przesunięcia jest long.
Czasami dokładne przesunięcie nie jest znane, gdyż może ono zależeć od
długości poprzednich pól. Można podać przesunięcie względem końca
ostatniego pola wyższego poziomu (oczywiście można to wykonać tylko
przy testach na podpoziomach, tj. testach rozpoczynających się od >).
Takie względne przesunięcie podawane jest za pomocą przedrostka & w
przesunięcia.
BŁĘDY
Formaty long, belong, lelong, short, beshort, leshort, date, bedate i
ledate zależą od systemu; może powinny być podawane jako liczba bajtów
(2B, 4B, itd), gdyż rozpoznawane pliki zwykle pochodzą z systemu, gdzie
długości są niezmienne.
Nie ma (obecnie) obsługi dla korzystania z danych o określonej
końcowości (endianness) przy przesunięciach pośrednich.
ZOBACZ TAKŻE
file(1) - polecenie, która czyta ten plik.
Ogólnie dostępne MAGIC(5)