file —
określa typ pliku
file
[
-bcdEhiklLNnprsSvzZ0]
[
--apple]
[
--exclude-quiet]
[
--extension]
[
--mime-encoding]
[
--mime-type]
[
-e nazwa-testu]
[
-F separator]
[
-f nazwa-pliku]
[
-m pliki-magiczne]
[
-P nazwa=wartość]
file
... file -C
[
-m
pliki-magiczne]
file
[
-
-help]
This manual page documents version 5.44 of the
file
command.
file sprawdza każdy ze swoich
argumentów, próbując go sklasyfikować.
Istnieją trzy zestawy testów, które są wykonywane
w następującej kolejności: testy systemu plików,
testy liczb magicznych i testy języka. Pierwszy test zakończony
powodzeniem powoduje wypisanie typu pliku.
The type printed will usually contain one of the words
text (the file contains only printing characters
and a few common control characters and is probably safe to read on an
ASCII
terminal),
executable (the file contains the result of
compiling a program in a form understandable to some UNIX kernel or another),
or
data meaning anything else (data is usually
“binary” or non-printable). Exceptions are well-known file
formats (core files, tar archives) that are known to contain binary data. When
modifying magic files or the program itself, make sure to
preserve these keywords. Users depend on knowing
that all the readable files in a directory have the word “text”
printed. Don't do as Berkeley did and change “shell commands
text” to “shell script”.
Testy systemu plików są oparte o sprawdzanie wartości
zwracanej przez funkcję systemową
stat(2). Program sprawdza, czy plik jest pusty
oraz czy jest jakiegoś rodzaju plikiem specjalnym. Powinno się
dać rozpoznać wszystkie rodzaje plików
występujące w danym systemie (gniazda, dowiązania
symboliczne lub nazwane potoki (FIFO), w systemach które je
zaimplementowały), o ile te rodzaje plików będą
zdefiniowane w systemowym pliku nagłówkowym
<sys/stat.h.>
Testy liczb magicznych służą do sprawdzania plików,
które zawierają dane w określonym formacie. Dobrym tego
przykładem jest wykonywalny plik binarny (skompilowany program) a.out,
którego format jest zdefiniowany w
<elf.h,>
<a.out.h> i
prawdopodobnie
<exec.h> in
the standard include directory. These files have a “magic
number” stored in a particular place near the beginning of the file
that tells the UNIX operating system that the file is a binary executable, and
which of several types thereof. The concept of a “magic number”
has been applied by extension to data files. Any file with some invariant
identifier at a small fixed offset into the file can usually be described in
this way. The information identifying these files is read from /etc/magic and
the compiled magic file
/usr/share/misc/magic.mgc, or the files in the
directory
/usr/share/misc/magic if the compiled
file does not exist. In addition, if
$HOME/.magic.mgc or
$HOME/.magic exists, it will be used in
preference to the system magic files.
Jeśli plik nie pasuje do żadnego z wpisów w pliku liczb
magicznych, dokonywane jest sprawdzenie czy jest to plik tekstowy.
Rozpoznawane są zestawy znaków: ASCII, ISO-8859-x, 8-bitowe
rozszerzenia ASCII niezgodne z ISO (używane w systemach Macintosh i IBM
PC), Unicode w kodowaniu UTF-8, Unicode w kodowaniu UTF-16 oraz EBCDIC.
Sprawdzane są zakresy i ciągi bajtów, które
stanowią drukowalny tekst w każdym z tych zestawów
znaków. Jeśli plik przejdzie któryś z tych
testów, zgłaszany jest odpowiadający mu zestaw
znaków. Pliki w ASCII, ISO-8859-x, UTF-8 oraz w rozszerzeniach ASCII
są identyfikowane jako “text”, gdyż mogą
być one na ogół czytane na dowolnym terminalu; pliki w
UTF-16 i EBCDIC stanowią jedynie "character data" (dane
znakowe), gdyż jeśli zawierają one tekst, tekst ten
wymaga przed przeczytaniem konwersji. Dodatkowo,
file będzie próbował
określić inne charakterystyki plików tekstowych.
Jeśli wiersze są zakończone znakami CR, CRLF lub NEL,
zamiast standardowego uniksowego LF, zostanie to zgłoszone.
Zostaną również zidentyfikowane pliki zawierające
wbudowane sekwencje unikowe lub wielokrotnego drukowania.
Po określeniu przez
file zestawu
znaków używanego w pliku tekstowym, spróbuje on
odgadnąć w jakim języku plik został napisany.
Testy językowe składają się z poszukiwań
określonych łańcuchów znakowych (por.
<names.h)> ,
które mogą pojawić się gdziekolwiek w kilku
pierwszych blokach pliku. Na przykład słowo kluczowe
.br wskazuje, że plik jest
najprawdopodobniej plikiem wejściowym dla programu
troff(1) podobnie, jak
struct wskazuje na program w C. Testy te
są mniej godne zaufania niż poprzednie dwie grupy, więc
są wykonywane na końcu. Testy językowe testują
również niektóre pliki zbiorcze (jak archiwa
tar(1), pliki JSON).
Plik, który nie może zostać określony jako jako
zapisany w jednym z powyższych zestawów znaków, jest po
prostu określany jako "data" (dane).
-
--apple
- Causes the file command to
output the file type and creator code as used by older MacOS versions. The
code consists of eight letters, the first describing the file type, the
latter the creator. This option works properly only for file formats that
have the apple-style output defined.
-
-b,
--brief
- Nie podaje nazw plików na początku wierszy
wynikowych (tryb skrócony).
-
-C,
--compile
- Zapisuje plik wynikowy
magic.mgc, który zawiera
wstępnie przetworzoną wersję pliku lub katalogu.
-
-c,
--checking-printout
- Cause a checking printout of the parsed form of the magic
file. This is usually used in conjunction with the
-m option to debug a new magic file before
installing it.
- -d
- Wypisuje wewnętrzne informacje debugowania na
standardowe wyjście błędów.
- -E
- W przypadku błędów systemu
plików (np. nie znaleziono pliku) nie obsługuje
błędu jako normalnego wyniku i nie kontynuuje
działania, jak wymaga norma POSIX, lecz wyświetla
błąd i wychodzi.
-
-e,
--exclude
nazwa-testu
- Wyłącza test o nazwie
nazwa-testu z listy testów,
przeprowadzanych w celu określenia typu pliku. Poprawne nazwy
testów to:
- apptype
- Typ aplikacji
EMX
(tylko na EMX).
- ascii
- Różne typy plików tekstowych (ten
test stara się odgadnąć kodowanie tekstu,
niezależnie od opcji "encoding").
- encoding
- Różne kodowania tekstowe do testów
magicznych soft.
- tokens
- Ignorowane w celu zachowania kompatybilności
wstecznej.
- cdf
- Wypisuje szczegóły plików Compound
Document File.
- compress
- Wyszukuje i zagłębia się w pliki
skompresowane.
- csv
- Wyszukuje plików z wartościami
rozdzielonymi przecinkiem (ang. Comma Separated Value - CSV)
- elf
- Wypisuje szczegóły pliku ELF,
zakładając że włączone są
testy magiczne soft i odszukano magiczne elf.
- json
- Sprawdza pliki JSON (RFC-7159) pod kątem
poprawności.
- soft
- Sprawdza z plikami magicznymi.
- tar
- Sprawdza pliki tar weryfikując sumę
kontrolną 512-bajtowego nagłówka archiwum.
Wyłączenie tego testu może dać bardziej
szczegółowy opis zawartości, przy użyciu
metody soft.
- text
- Synonim ‘ascii’.
-
--exclude-quiet
- Like
--exclude but
ignore tests that file does not know about.
This is intended for compatibility with older versions of
file.
-
--extension
- Wyświetla listę prawidłowych
rozszerzeń dla znalezionego typu pliku, rozdzielonych
ukośnikiem.
-
-F,
--separator
separator
- Używa podanego łańcucha jako
separatora między nazwą pliku a zwróconym wynikiem
pliku. Domyślnie jest to ":".
-
-f,
--pliki-od
nazwa-pliku
- Odczytuje nazwy testowanych plików z
nazwa-pliku (po jednym w wierszu) przed
listą argumentów. Obecna musi być albo
nazwa-pliku albo przynajmniej jeden
argument będący nazwą pliku; aby testować
standardowe wejście, należy użyć argumentu
"-" jako nazwy pliku. Proszę zauważyć,
że nazwa-pliku nie jest rozwijana,
a nazwy plików są przetwarzane przy wystąpieniu tej
opcji przed wszystkimi innymi opcjami. Pozwala to na przetworzenie wielu
list plików z różnymi argumentami wiersza polecenia,
w tym samym wywołaniu file. Z tego
powodu, jeśli chce się ustawić ogranicznik, konieczne
jest zrobienie tego przed podaniem listy plików, np. "
-F @
-f
nazwa-pliku ", zamiast: "
-f
nazwa-pliku
-F @
".
-
-h,
--no-dereference
- This option causes symlinks not to be followed (on systems
that support symbolic links). This is the default if the environment
variable
POSIXLY_CORRECT
is not
defined.
-
-i,
--mime
- Causes the file command to
output mime type strings rather than the more traditional human readable
ones. Thus it may say ‘text/plain; charset=us-ascii’ rather
than “ASCII text”.
-
--mime-type,
--mime-encoding
- Jak -i, lecz wypisuje jedynie
określone element(y).
-
-k,
--keep-going
- Nie zatrzymuje się po pierwszym dopasowaniu. Kolejne
dopasowania będą poprzedzone łańcuchem
"\012- " (aby osiągnąć znak nowego wiersza,
proszę skorzystać z opcji -r).
Wygrywa najsilniejszy wzór magiczny (patrz opcja
-l).
-
-l,
--list
- Pokazuje listę wzorców i ich
siłę posortowanych malejącą według
siły magic(5), która jest
używana do dopasowania (zobacz też opcję
-k).
-
-L,
--dereference
- This option causes symlinks to be followed, as the
like-named option in ls(1) (on systems that
support symbolic links). This is the default if the environment variable
POSIXLY_CORRECT
is defined.
-
-m,
--plik-magiczny
pliki-magiczne
- Podaje alternatywną listę plików i
katalogów zawierających magię. Może być
to pojedynczy plik lub rozdzielona dwukropkami lista plików.
Jeśli razem z plikiem lub katalogiem zostanie znaleziony
skompilowany plik magiczny, zostanie użyty zamiast pliku lub
katalogu.
-
-N,
--no-pad
- Nie wyrównuje nazw plików tak, aby wynik
wyglądał lepiej.
-
-n,
--no-buffer
- Wymusza opróżnienie standardowego
wyjścia po sprawdzeniu każdego pliku. Jest to przydatne
wyłącznie przy sprawdzaniu listy plików. Opcja jest
przeznaczona do programów oczekujących wyniku z typem
plików, pozyskanego z potoku.
-
-p,
--preserve-date
- W systemach obsługujących
utime(3) lub
utimes(2), stara się zachować
czas dostępu analizowanych plików, aby udać,
że file nigdy ich nie
odczytało.
-
-P,
--parameter
nazwa=wartość
- Ustawia różne limity parametrów.
Nazwa |
Domyślnie |
Opis |
bytes |
1048576 |
maks. liczba bajtów do odczytu z pliku |
elf_notes |
256 |
maks. liczba przetw. węzłów
ELF |
elf_phnum |
2048 |
maks. liczba przetw. sekcji programu ELF |
elf_shnum |
32768 |
maks. liczba przetw. sekcji ELF |
encoding |
65536 |
max number of bytes to scan for encoding
evaluation |
indir |
50 |
limit rekurencji dla magii niebezpośr. |
name |
50 |
use count limit for name/use magic |
regex |
8192 |
limit długości dla
przeszukiwań wyr. reg. |
-
-r,
--raw
- Nie tłumaczy niedrukowalnych znaków na \ooo.
Zwykle file tłumaczy znaki
niedrukowalne na ich postać ósemkową.
-
-s,
--pliki-specjalne
- Normalnie, file próbuje
czytać i określać rodzaj pliku jedynie dla tych
argumentów, które są plikami zgłoszonymi przez
stat(2) jako zwykłe pliki. Pozwala to
uniknąć problemów, gdyż czytanie plików
specjalnych może mieć nieprzyjemne konsekwencje. Podanie
opcji -s powoduje, że
file czyta również argumenty
będące plikami specjalnymi urządzeń blokowych
i znakowych. Jest to przydatne do określania rodzaju systemu
plików w przypadku danych na surowych partycjach dysków,
stanowiących pliki specjalne urządzeń blokowych.
Opcja ta powoduje również, że
file nie zważa na zgłaszany
przez stat(2) rozmiar pliku, gdyż w
niektórych systemach funkcja ta zgłasza zero dla surowych
partycji dysków.
-
-S,
--no-sandbox
- On systems where libseccomp
(https://github.com/seccomp/libseccomp) is
available, the -S option disables sandboxing
which is enabled by default. This option is needed for
file to execute external decompressing
programs, i.e. when the -z option is
specified and the built-in decompressors are not available. On systems
where sandboxing is not available, this option has no effect.
Note: This Debian version of file was built
without seccomp support, so this option has no effect.
-
-v,
--version
- Wyświetla informacje o wersji i kończy
działanie.
-
-z,
--uncompress
- Próbuje zaglądać do plików
skompresowanych.
-
-Z,
--uncompress-noreport
- Try to look inside compressed files, but report information
about the contents only not the compression.
-
-0,
--print0
- Wypisuje znak zerowy "\0" po końcu nazwy
plików. Przydatne do zastosowania
cut(1) na wyniku. Opcja nie wpływa na
separator, który jest w dalszym ciągu wypisywany.
If this option is repeated more than once, then
file prints just the filename followed by a
NUL followed by the description (or ERROR: text) followed by a second NUL
for each entry.
- --help
- Wyświetla komunikat pomocy i wychodzi.
Zmienna środowiskowa
MAGIC
może
być wykorzystana do ustawienia domyślnej nazwy pliku magicznego.
Jeśli zmienna ta jest ustawiona, to
file
nie próbuje otworzyć
$HOME/.magic.
file dodaje "
.mgc" do
wartości tej zmiennej, jeśli to konieczne. Zmienna
środowiskowa
POSIXLY_CORRECT
kontroluje (w systemach, które obsługuję
dowiązania środowiskowe), czy
file
będzie próbował podążać za
dowiązaniami symbolicznymi. Jeśli jest ustawiona, to
file podąża za nimi, w przeciwnym
wypadku - nie. Za dowiązania odpowiadają również
opcje
-L i
-h.
- /usr/share/misc/magic.mgc
- Domyślna skompilowana lista liczb magicznych.
- /usr/share/misc/magic
- Katalog zawierający domyślne pliki
magiczne.
file will exit with
0
if the operation was successful or
>0
if an error was encountered. The
following errors cause diagnostic messages, but don't affect the program exit
code (as POSIX requires), unless
-E is specified:
- A file cannot be found
- There is no permission to read a file
- The file type cannot be determined
$ file file.c file /dev/{wd0a,hda}
file.c: C program text
file: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
dynamically linked (uses shared libs), stripped
/dev/wd0a: block special (0/0)
/dev/hda: block special (3/0)
$ file -s /dev/wd0{b,d}
/dev/wd0b: data
/dev/wd0d: x86 boot sector
$ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
/dev/hda: x86 boot sector
/dev/hda1: Linux/i386 ext2 filesystem
/dev/hda2: x86 boot sector
/dev/hda3: x86 boot sector, extended partition table
/dev/hda4: Linux/i386 ext2 filesystem
/dev/hda5: Linux/i386 swap file
/dev/hda6: Linux/i386 swap file
/dev/hda7: Linux/i386 swap file
/dev/hda8: Linux/i386 swap file
/dev/hda9: empty
/dev/hda10: empty
$ file -i file.c file /dev/{wd0a,hda}
file.c: text/x-c
file: application/x-executable
/dev/hda: application/x-not-regular-file
/dev/wd0a: application/x-not-regular-file
hexdump(1),
od(1),
strings(1),
magic(5)
Program ten prawdopodobnie wykracza poza definicję FILE(CMD) z definicji
interfejsu Systemu V (System V Interface Definition). Wydaje się tak
przynajmniej z tego, co można zrozumieć z tamtejszego niejasnego
języka... Zachowanie programu jest w większości zgodne z
zachowaniem programu z Systemu V o tej samej nazwie. Wersja niniejsza zna
więcej magii, więc będzie dawała w wielu wypadkach
inne (dokładniejsze) wyniki.
Jedną z istotnych różnic między tą
wersją i wersją z Systemu V, jest to, że niniejsza wersja
traktuje białe znaki jako separatory, więc spacje w
łańcuchach wzorców muszą być chronione. Na
przykład,
>10 string language impress (imPRESS data)
w istniejącym pliku magicznym będzie musiało być
zamienione na
>10 string language\ impress (imPRESS data)
Dodatkowo, w tej wersji, jeśli łańcuch wzorca zawiera
odwrotny ukośnik, to musi być on chroniony. Na przykład
0 string \begindata Andrew Toolkit document
w istniejącym pliku magicznym będzie musiało być
zamienione na
0 string \\begindata Andrew Toolkit document
Wersja 3.2 SunOS i późniejsze pochodzące z Sun Microsystems
zawierają polecenie
file, wywodzące
się z polecenia z System V, lecz z pewnymi rozszerzeniami. Ta wersja
różni się od Sun-owskiej tylko małymi
szczegółami. Zawiera ona rozszerzenie operatora
"&", używanego jako np.
>16 long&0x7fffffff >0 not stripped
On systems where libseccomp
(
https://github.com/seccomp/libseccomp) is
available,
file is enforces limiting system calls
to only the ones necessary for the operation of the program. This enforcement
does not provide any security benefit when
file
is asked to decompress input files running external programs with the
-z option. To enable execution of external
decompressors, one needs to disable sandboxing using the
-S option.
Wpisy w pliku liczb magicznych pochodzą z wielu
źródeł, głównie z USENET-u i
zgłoszone przez różnych autorów. Christos Zoulas
(adres poniżej) będzie zbierał dodatkowe lub poprawione
wpisy pliku liczb magicznych. Zebrane wpisy będą okresowo
dystrybuowane.
Kolejność wpisów w pliku magicznym jest istotna.
Zależnie od używanego systemu, kolejność, w
której są ułożone, może być
nieprawidłowa.
Polecenie
file istniało w każdym
systemie UNIX od przynajmniej wersji Research
Version 4
(strona podręcznika man z listopada 1973). Wersja z
Systemu V wprowadziła jedną istotną
główną zmianę: zewnętrzną
listę typów liczb magicznych. Spowolniło to trochę
program, lecz uczyniło go bardziej elastycznym.
Program ten, oparty na wersji z Systemu V, został napisany przez Iana
Darwina ⟨
[email protected]⟩ bez zaglądania do innych
źródeł.
John Gilmore przerobił mocno ten kod, czyniąc go lepszym
niż pierwsza wersja. Geoff Collyer znalazł kilka
nietrafności i dostarczył trochę wpisów w pliku
liczb magicznych. Zmiana obsługi operatora "&" przez Roba
McMahona, ⟨
[email protected]⟩, w 1989.
Guy Harris,
[email protected], wykonał wiele zmian w okresie od 1993 do
dzisiaj.
Podstawowy rozwój i konserwację w okresie od 1990 do dzisiaj
prowadzi Christos Zoulas ( ⟨
[email protected]⟩).
Zmodyfikowany przez Chrisa Lowtha, ⟨
[email protected]⟩, w 2000:
Obsługa opcji
-i powodującej
wyprowadzanie łańcuchów typów MIME oraz
korzystającej z alternatywnego pliku liczb magicznych i wbudowanej
logiki.
Zmodyfikowany przez Erica Fischera ( ⟨
[email protected]⟩), w lipcu
2000, aby rozpoznawał kody znaków i próbował
zidentyfikować język plików nie-ASCII.
Zmodyfikowany przez Reubena Thomasa ⟨
[email protected]⟩, w latach
2007-2011, w celu poprawy obsługi MIME, połączenia magii
MIME i nie MIME, obsługi zarówno katalogów jak i
plików magicznych, zaaplikowania wielu poprawek
błędów, zaktualizowania i poprawienia sporej
części magii, poprawienia systemu budowania, dokumentacji i
przepisania podpięć Pythona w czystym Pythonie.
Lista osób, które wniosły wkład do katalogu
"magic" (pliki magiczne) jest za długa, aby ją tu
przytaczać. Wiecie kim jesteście; dziękujemy. Wiele
osób jest wspomnianych w plikach źródłowych.
Copyright (c) Ian F. Darwin, Toronto, Canada, 1986-1999. Na standardowej
licencji Berkeley Software Distribution, znajduje się ona w pliku
COPYING, w katalogu źródeł.
Pliki
tar.h i
is_tar.c
zostały napisane przez Johna Gilmore'a, a pochodzą z jego
ogólnie dostępnego programu
tar(1)
i nie podlegają powyższej licencji.
Proszę zgłaszać błędy i wysyłać
łatki do systemu śledzenia błędów pod
adresem
http://bugs.astron.com/ lub na
listę dyskusyjną ⟨
[email protected]⟩ (najpierw
proszę się zapisać na
https://mailman.astron.com/mailman/listinfo/file).
Naprawić wyjście, dzięki czemu testy flag MIME i APPLE nie
będą potrzebne wszędzie, a rzeczywiste wyjście
byłoby tworzone tylko raz w jednym miejscu. Wymaga odpowiedniego
projektu. Sugestia: wypychaj prawdopodobne wyniki na listę i
użyj ostatniej wartości z listy (powinna być
najdokładniejsza) lub użyj wartości domyślnej,
jeśli lista jest pusta. Nie powinno to spowolnić
obliczeń.
The handling of
MAGIC_CONTINUE
and printing
\012- between entries is clumsy and complicated; refactor and centralize.
Some of the encoding logic is hard-coded in encoding.c and can be moved to the
magic files if we had a !:charset annotation.
Kontynuować likwidację wszystkich błędów.
System BTS Debiana jest tu dobrym źródłem.
Store arbitrarily long strings, for example for %s patterns, so that they can be
printed out. Fixes Debian bug #271672. This can be done by allocating strings
in a string pool, storing the string pool at the end of the magic file and
converting all the string pointers to relative offsets from the string pool.
Dodać składnię do względnych
przesunięć po bieżącym poziomie (bug Debiana
#466037).
Sprawić, by działała opcja -ki, tzn. podawanie wielu
typów MIME.
Add a zip library so we can peek inside Office2007 documents to print more
details about their contents.
Dodać opcję do wypisywania URL-i źródeł
opisów plików.
Połączyć przeszukiwania skryptów i dodać
metodę na powiązanie nazw plików wykonywalnych z typami
MIME (wartość magiczna do !:mime która
spowodowałaby wyszukanie wynikowego łańcucha w tabeli).
Dzięki temu uniknęłoby się dodawanie tych samych
wartości magicznych dla każdego nowego interpretera hash-bang.
When a file descriptor is available, we can skip and adjust the buffer instead
of the hacky buffer management we do now.
Naprawić “name” i “use” aby pilnowały
spójności w chwili kompilacji (zduplikowane
“name”, “use” wskazujące na
niezdefiniowaną “name”). “name” /
“use” powinny być efektywniejsze poprzez utrzymywanie
posortowanej listy nazw. Wdrożyć i udokumentować ^ jako
specjalny przypadek do zmieniania kolejności bajtów w parserze,
dzięki czemu nie wymagałoby to cytowania.
If the offsets specified internally in the file exceed the buffer size (
HOWMANY
variable in file.h), then we don't
seek to that offset, but we give up. It would be better if buffer managements
was done when the file descriptor is available so we can seek around the file.
One must be careful though because this has performance and thus security
considerations, because one can slow down things by repeatedly seeking.
There is support now for keeping separate buffers and having offsets from the
end of the file, but the internal buffer management still needs an overhaul.
Najnowszą oryginalną wersję programu tego autora
można pobrać z anonimowego ftp z
ftp.astron.com, z katalogu
/pub/file/file-X.YZ.tar.gz.
Autorami polskiego tłumaczenia niniejszej strony podręcznika
są: Przemek Borys <
[email protected]>, Andrzej Krzysztofowicz
<
[email protected]> i Michał Kułach
<
[email protected]>
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
[email protected]