plik (polecenie) - file (command)
Deweloper(zy) | AT&T Bell Laboratories |
---|---|
Pierwsze wydanie | 1973 jako część Unix Research Version 4 ; 1986 reimplementacja open-source |
Magazyn | github |
Napisane w | C |
System operacyjny | Unix , uniksopodobny , plan 9 , IBM i |
Platforma | Wieloplatformowy |
Rodzaj | Detektor typu pliku |
Licencja | licencja BSD , CDDL |
Strona internetowa | darwinsys |
Komenda jest standardowym programem z Unix i uniksopodobnych systemów operacyjnych uznawania typ danych zawartych w pliku komputerowym .
file
Historia
Oryginalna wersja file
pochodzi z Unix Research Version 4 w 1973 roku. System V przyniósł poważną aktualizację z kilkoma ważnymi zmianami, w szczególności przeniesieniem informacji o typie pliku do zewnętrznego pliku tekstowego zamiast kompilowania go do samego pliku binarnego.
Większość głównych dystrybucji BSD i Linuksa korzysta z darmowej , otwartej reimplementacji, która została napisana od podstaw w latach 1986-87 przez Iana Darwina . Został on rozszerzony przez Geoffa Collyera w 1989 roku i od tego czasu miał wkład wielu innych, w tym Guya Harrisa, Chrisa Lowtha i Erica Fischera; od końca 1993 roku jego konserwację organizuje Christos Zoulas . System OpenBSD ma własną implementację podzbioru napisaną od zera, ale nadal używa kolekcji informacji o magicznym formacie pliku Darwin/Zoulas.
file
Komenda została również przeniesiona do IBM i systemu operacyjnego.
Specyfikacja
Specyfikacja Single Unix (SUS) określa, że seria testów jest wykonywana na pliku określonym w wierszu poleceń:
- jeśli pliku nie można odczytać lub jego uniksowy typ pliku jest nieokreślony,
file
program wskaże, że plik został przetworzony, ale jego typ był nieokreślony. -
file
musi być w stanie określić typy katalog , FIFO , gniazdo , blokowy plik specjalny i znakowy plik specjalny - pliki o zerowej długości są identyfikowane jako takie
- brana jest pod uwagę początkowa część pliku, która ma
file
używać testów pozycyjnych - cały plik jest brany pod uwagę i
file
ma używać testów kontekstowych - plik jest identyfikowany jako
data
plik
file
Testy pozycyjne 's są zwykle implementowane przez dopasowanie różnych lokalizacji w pliku do tekstowej bazy danych liczb magicznych (zobacz sekcję Użycie). Różni się to od innych prostszych metod, takich jak rozszerzenia plików i schematy, takie jak MIME .
W większości implementacji file
polecenie używa bazy danych do sterowania sondowaniem bajtów wiodących. Że baza danych jest zaimplementowana w pliku o nazwie magic
, której położenie jest zazwyczaj /etc/magic
, /usr/share/file/magic
lub podobnym miejscu.
Stosowanie
SUS nakazuje następujące opcje:
- -M file, określ specjalnie sformatowany plik zawierający testy zależne od pozycji; domyślne testy pozycyjne i testy kontekstowe nie będą wykonywane.
-
-m file, jak dla -M, ale testy domyślne zostaną wykonane po testach zawartych w
file
. - -d, wykonaj domyślne testy pozycyjne i kontekstowe dla podanego pliku; jest to zachowanie domyślne, chyba że określono -Mlub -m.
- -h, nie usuwaj odwołań do dowiązań symbolicznych, które wskazują na istniejący plik lub katalog.
- -L, wyłuskaj dowiązanie symboliczne, które wskazuje na istniejący plik lub katalog.
- -i, nie klasyfikuj pliku dalej niż identyfikowanie go jako: nieistniejący, blokowy plik specjalny, znakowy plik specjalny, katalog, FIFO , gniazdo, dowiązanie symboliczne lub zwykły plik. Systemy Linux i BSD zachowują się inaczej z tą opcją i zamiast tego wyświetlają internetowy typ mediów (" typ MIME ") identyfikujący rozpoznawany format pliku.
Inne uniksowe i uniksopodobne systemy operacyjne mogą dodawać dodatkowe opcje, takie jak -s„pliki specjalne”, -k„kontynuacja” lub -r„surowe” (przykłady poniżej).
Polecenie mówi tylko, jak plik wygląda , a nie co to jest (w przypadku, gdy plik patrzy na zawartość). Program można łatwo oszukać, umieszczając w pliku magiczną liczbę, której zawartość nie pasuje. W związku z tym polecenie nie nadaje się do użytku jako narzędzie bezpieczeństwa poza określonymi sytuacjami.
Przykłady
$ file file.c file.c: C program text
$ file program program: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped
$ file /dev/hda1 /dev/hda1: block special (0/0)
$ file -s /dev/hda1 /dev/hda1: Linux/i386 ext2 filesystem
Zauważ, że -s jest niestandardową opcją dostępną tylko na niektórych platformach, która nakazuje file
czytać pliki urządzeń i próbować zidentyfikować ich zawartość, a nie tylko identyfikować je jako pliki urządzeń. Zwykle file
nie próbuje czytać plików urządzeń, ponieważ czytanie takiego pliku może mieć niepożądane skutki uboczne.
$ file -k -r libmagic-dev_5.35-4_armhf.deb # (on Linux) libmagic-dev_5.35-4_armhf.deb: Debian binary package (format 2.0) - current ar archive - data
Dzięki niestandardowej opcji -kprogram nie zatrzymuje się po pierwszym znalezionym trafieniu, ale szuka innych pasujących wzorców. -rOpcja, która jest dostępna w niektórych wersjach, powoduje, że nie można drukować nową linię , która będzie wyświetlana w jej surowej postaci, a nie w jego reprezentacji ósemkowej charakter.
$ file compressed.gz compressed.gz: gzip compressed data, deflated, original filename, `compressed', last modified: Thu Jan 26 14:08:23 2006, os: Unix
$ file -i compressed.gz # (on Linux) compressed.gz: application/x-gzip; charset=binary
$ file data.ppm data.ppm: Netpbm PPM "rawbits" image data
$ file /bin/cat /bin/cat: Mach-O universal binary with 2 architectures /bin/cat (for architecture ppc7400): Mach-O executable ppc /bin/cat (for architecture i386): Mach-O executable i386
$ file /usr/bin/vi /usr/bin/vi: symbolic link to vim
Identyfikacja dowiązań symbolicznych nie jest dostępna na wszystkich platformach i zostanie wyłuskana, jeśli -Lzostanie przekazana lub POSIXLY_CORRECTustawiona.
Biblioteka Libmagic
Od wersji 4.00 wersji Iana Darwina/Christosa Zoulas file
, funkcjonalność programu file
jest włączona do libmagic
biblioteki, która jest dostępna za pośrednictwem linkowania C (i kompatybilnego z C); file
jest zaimplementowany przy użyciu tej biblioteki.
Bibliografia
Zewnętrzne linki
- The Single UNIX Specification , Issue 7 from The Open Group : określ typ pliku – Commands & Utilities Reference,
- lista mailingowa plików
- publikacje plików
Strony podręcznika
- Plan 9 , tom 1 – Podręcznik programisty
- Linux Polecenia użytkownika Instrukcja -
- Podręcznik funkcji biblioteki NetBSD –
- Podręcznik funkcji biblioteki Linux –
- Podręcznik poleceń ogólnych OpenBSD –
Inne
-
Fine Free File Command – strona główna dla wersji
file
używanej w głównych dystrybucjach BSD i Linux. -
Plik dla Windows – strona natywnego portu GnuWin32
file
dla 32-bitowego systemu Windows. - Pakiet libmagic-dev na packages.debian.org
- TrID , alternatywa zapewniająca szeregowane odpowiedzi (zamiast tylko jednej) na podstawie statystyk.