plik (polecenie)

plik
Deweloperzy Laboratoria AT&T Bell
Pierwsze wydanie 1973 ( 1973 ) jako część Unix Research Version 4 ; 1986 ( 1986 ) reimplementacja open-source
Magazyn github.com/plik/plik _ _ _
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 darwinsys.com / plik /

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:

  1. 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.
  2. plik musi być w stanie określić typy katalog , FIFO , gniazdo , specjalny plik blokowy i specjalny plik znakowy
  3. pliki o zerowej długości są identyfikowane jako takie
  4. brana jest pod uwagę początkowa część pliku, a plik ma używać testów wrażliwych na pozycję
  5. cały plik jest brany pod uwagę, a plik ma używać testów kontekstowych
  6. 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

Strony instrukcji

Inny