plik (polecenie)
Deweloperzy | Laboratoria AT&T Bell |
---|---|
Pierwsze wydanie | 1973 Unix Research Version 4 ; 1986 reimplementacja open-source | jako część
Magazyn | |
Napisane w | C |
System operacyjny | Unix , uniksopodobny , Plan 9 , IBM i |
Platforma | Międzyplatformowe |
Typ | Wykrywacz typów plików |
Licencja |
Licencja BSD , CDDL Plan 9: Licencja MIT |
Strona internetowa |
Polecenie file to standardowy program systemów operacyjnych Unix i Unix-like do rozpoznawania
typu danych zawartych w pliku komputerowym .
Historia
Oryginalna wersja pliku
pochodzi z Unix Research Version 4 w 1973 roku. System V przyniósł dużą aktualizację z kilkoma ważnymi zmianami, w szczególności przeniesieniem informacji o typie pliku do zewnętrznego pliku tekstowego zamiast kompilowania ich do samego pliku binarnego.
Większość głównych dystrybucji BSD i Linuksa korzysta z bezpłatnej reimplementacji typu open source , która została napisana od podstaw w latach 1986–87 przez Iana Darwina. Został 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 utrzymaniem zajmuje się Christos Zoulas. System OpenBSD ma własną implementację podzbioru napisaną od podstaw, ale nadal korzysta z kolekcji Darwin/Zoulas informacji w formacie magicznych plików.
Komenda file
została również przeniesiona do systemu operacyjnego IBM i .
Specyfikacja
Pojedyncza specyfikacja systemu UNIX (SUS) określa, że na pliku określonym w wierszu polecenia wykonywana jest seria testów:
- jeśli pliku nie można odczytać lub jego typ pliku Unix jest nieokreślony, program
plikowy
wskaże, że plik został przetworzony, ale jego typ był nieokreślony. -
plik
musi być w stanie określić typy katalog , FIFO , gniazdo , specjalny plik blokowy i specjalny plik znakowy - pliki o zerowej długości są identyfikowane jako takie
- brana jest pod uwagę początkowa część pliku, a
plik
ma używać testów wrażliwych na pozycję - cały plik jest brany pod uwagę, a
plik
ma używać testów kontekstowych - plik jest identyfikowany jako plik
danych
pliku
są zwykle realizowane poprzez dopasowywanie 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 polecenie file
używa bazy danych do sterowania sondowaniem wiodących bajtów. Ta baza danych jest zaimplementowana w pliku o nazwie magic
, którego lokalizacja zwykle znajduje się w /etc/magic
, /usr/share/file/magic
lub w podobnej lokalizacji.
Stosowanie
SUS nakazuje następujące opcje:
- -M plik , określ specjalnie sformatowany plik zawierający testy zależne od pozycji; domyślne testy zależne od pozycji i testy zależne od kontekstu nie będą wykonywane.
-
-m plik , jak dla -M , ale testy domyślne zostaną wykonane po testach zawartych w
pliku
. - -d , wykonaj domyślne testy zależne od pozycji i kontekstu dla danego pliku; jest to zachowanie domyślne, chyba że podano -M lub -m .
- -h , nie usuwaj odwołań do dowiązań symbolicznych wskazujących na istniejący plik lub katalog.
- -L , usuń odwołanie do dowiązania symbolicznego wskazującego na istniejący plik lub katalog.
- -i , nie klasyfikuj pliku dalej niż identyfikuj go jako: nieistniejący, specjalny plik blokowy, specjalny plik znakowy, katalog, FIFO , gniazdo , dowiązanie symboliczne lub zwykły plik. Systemy Linux i BSD zachowują się inaczej z tą opcją i zamiast tego wysyłają typ nośnika internetowego („ typ MIME ”) identyfikujący rozpoznany format pliku.
Inne systemy operacyjne Unix i podobne do Uniksa mogą dodawać dodatkowe opcje, takie jak -s 'pliki specjalne', -k 'kontynuuj' lub -r 'raw' (przykłady poniżej).
wygląda plik , a nie, czym jest (w przypadku, gdy plik przegląda zawartość). Program można łatwo oszukać, umieszczając magiczną liczbę w pliku, którego zawartość nie jest z nim zgodna. 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: tekst programu C
$ file program program: ELF 32-bitowy plik wykonywalny LSB , Intel 80386 , wersja 1 ( SYSV ), dynamicznie łączony (wykorzystuje wspólne biblioteki ), pozbawiony
$ file /dev/hda 1 / dev/hda1: specjalny blok (0/0)
$ plik -s /dev/hda1 /dev/hda1: system plików Linux/ i386 ext2
Zauważ, że -s to niestandardowa opcja dostępna tylko na niektórych platformach, która nakazuje plikowi
odczytanie plików urządzeń i próbę zidentyfikowania ich zawartości, a nie tylko zidentyfikowanie ich jako plików urządzeń. Zwykle plik
nie próbuje odczytać plików urządzenia, ponieważ odczytanie takiego pliku może mieć niepożądane skutki uboczne.
$ plik -k -r libmagic-dev_5.35-4_armhf.deb # (w systemie Linux) libmagic-dev_5.35-4_ armhf . deb : pakiet binarny Debiana (format 2.0) - bieżące archiwum ar - dane
Dzięki niestandardowej opcji -k program nie zatrzymuje się po pierwszym znalezionym trafieniu, ale szuka innych pasujących wzorców. Opcja -r , która jest dostępna w niektórych wersjach, powoduje, że niedrukowalny znak nowego wiersza jest wyświetlany w postaci nieprzetworzonej, a nie w postaci ósemkowej.
$ plik skompresowany.gz skompresowany.gz: gzip skompresowane dane, opróżniony , oryginalna nazwa pliku, `skompresowany', ostatnia modyfikacja: Thu Jan 26 14:08:23 2006, os : Unix
$ plik -i skompresowany.gz # (w systemie Linux) skompresowany.gz: application/x-gzip ; charset = binarny
$ plik data.ppm data.ppm: Netpbm PPM „rawbits” dane obrazu
$ plik /bin/cat /bin/cat: Mach-O uniwersalny plik binarny z 2 architekturami /bin/cat (dla architektury ppc7400 ): Mach- O plik wykonywalny ppc /bin/cat (dla architektury i386): plik wykonywalny Mach-O i386
$ plik /usr/bin/vi /usr/bin/vi: dowiązanie symboliczne do vima
Identyfikacja dowiązań symbolicznych nie jest dostępna na wszystkich platformach i zostanie usunięta, jeśli zostanie przekazana opcja -L lub zostanie ustawiona wartość POSIXLY_CORRECT .
Biblioteka Libmagic
pliku file
w wersji autorstwa Iana Darwina/Christosa Zoulasa , funkcjonalność file
jest włączona do biblioteki libmagic
, która jest dostępna przez łączenie w C (i zgodne z C); plik
jest implementowany przy użyciu tej biblioteki.
Linki zewnętrzne
- The Single UNIX Specification , Version 4 from The Open Group : określ typ pliku – Shell and Utilities Reference,
- lista wysyłkowa plików
- wydania plików
Strony instrukcji
- planu 9 , tom 1 - Podręcznik programisty
- Podręcznik poleceń użytkownika systemu Linux —
- Podręcznik funkcji bibliotecznych NetBSD –
- Podręcznik funkcji bibliotek Linuksa –
- Podręcznik poleceń ogólnych OpenBSD –
Inny
-
Fine Free File Command – strona główna dla wersji
pliku
używanej w głównych dystrybucjach BSD i Linux. -
Plik dla systemu Windows — strona internetowa natywnego portu
pliku
GnuWin32 dla 32-bitowego systemu Windows. - Pakiet libmagic-dev na packages.debian.org
- TrID , alternatywa zapewniająca rankingowe odpowiedzi (zamiast tylko jednej) na podstawie statystyk.