NAZWA¶
magic - plik liczb magicznych polecenia file
OPIS¶
Uwaga! To tłumaczenie może być nieaktualne!
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.
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
Tłumaczenia Manuali i
może nie być aktualne. W razie
zauważenia różnic między powyższym opisem a
rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
zapoznanie się z oryginalną (angielską) wersją strony
podręcznika za pomocą polecenia:
- man --locale=C 5 magic
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.