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/.