Команда представляет собой стандартную программу Unix и Unix-подобных операционных систем для распознавания типа данных , содержащихся в компьютерном файле .file
Первоначальная версия file
возникла в Unix Research Version 4 [1] в 1973 году. System V принесла серьезное обновление с несколькими важными изменениями, в первую очередь перемещением информации о типе файла во внешний текстовый файл, а не компиляцией ее в сам двоичный файл.
Большинство основных дистрибутивов BSD и Linux используют бесплатную повторную реализацию с открытым исходным кодом , которая была написана с нуля в 1986–87 годах Яном Дарвином [2] ; он хранит информацию о типе файла в текстовом файле с форматом, основанным на версии System V. Он был расширен Джеффом Коллайером в 1989 году, и с тех пор в него внесли вклад многие другие, включая Гая Харриса, Криса Лоута и Эрика Фишера; с конца 1993 года его обслуживание организует Христос Зулас. Система OpenBSD имеет собственную реализацию подмножества, написанную с нуля, но по-прежнему использует коллекцию магической информации в формате файлов Дарвина/Зуласа.
Команда file
также была перенесена в операционную систему IBM i . [3]
Единая спецификация UNIX (SUS) определяет, что для файла, указанного в командной строке, выполняется серия тестов:
file
программа укажет, что файл был обработан, но его тип не определен.file
должен уметь определять каталог типов , FIFO , сокет , специальный файл блока и специальный символьный файл.file
ней должны использоваться тесты, чувствительные к положениюfile
должен использоваться контекстно-зависимый тестdata
файлfile
Чувствительные к положению тесты обычно реализуются путем сопоставления различных мест в файле с текстовой базой данных магических чисел (см. раздел «Использование»). Это отличается от других более простых методов, таких как расширения файлов и схемы, такие как MIME .
В реализации System V, реализации Яна Дарвина и реализации OpenBSD команда file
использует базу данных для проверки ведущих байтов. Эта база данных реализована в файле с именем magic
, расположение которого обычно находится в /etc/magic
или /usr/share/file/magic
аналогичном месте.
SUS [4] предписывает следующие варианты:
file
.Другие Unix и Unix-подобные операционные системы могут добавлять дополнительные параметры, кроме этих. Реализация Яна Дарвина добавляет, среди многих других, -s«специальные файлы», -k«непрерывные» или -r«необработанные» (примеры ниже). [5]
Команда сообщает только то, как выглядит файл , а не то, что он собой представляет (в случае, когда файл просматривает содержимое). Программу легко обмануть, поместив магическое число в файл, содержимое которого ему не соответствует. Таким образом, команду можно использовать в качестве инструмента безопасности только в определенных ситуациях.
$ файл file.cfile.c: текст программы на языке C.
$файловая программапрограмма: 32-битный исполняемый файл ELF LSB , Intel 80386 , версия 1 ( SYSV ), динамически скомпонованная (использует общие библиотеки ), удаленная
$ файл /dev/hda 1/dev/hda1: специальный блок (0/0)
$ файл -s /dev/hda1/dev/hda1: файловая система Linux/ i386 ext2
Обратите внимание, что -s — это нестандартная опция, доступная только в ветке Ian Darwin, которая предписывает file
читать файлы устройств и пытаться идентифицировать их содержимое, а не просто идентифицировать их как файлы устройств. Обычно file
не пытается читать файлы устройства, поскольку чтение такого файла может иметь нежелательные побочные эффекты.
$ file -k -r libmagic-dev_5.35-4_armhf.deb # (в Linux)libmagic- dev_5.35-4_armhf . deb : двоичный пакет Debian (формат 2.0).- текущий архив- данные
Благодаря нестандартной опции Яна Дарвина -kпрограмма не останавливается после первого найденного совпадения, а ищет другие совпадающие шаблоны. Эта -rопция, доступная в некоторых версиях, приводит к тому, что непечатаемый символ новой строки отображается в необработанном виде, а не в восьмеричном представлении.
$ файл compressed.gzcompressed.gz: данные, сжатые gzip , сдутые , исходное имя файла, `сжатые', последний изменено: четверг, 26 января, 14:08:23 2006, операционная система : Unix
$ file -i compressed.gz # (в Linux)сжатый.gz: приложение/x-gzip ; кодировка = двоичная
$ файл data.ppmdata.ppm: данные изображения Netpbm PPM «rawbits».
$ файл /bin/cat/bin/cat: универсальный двоичный файл Mach-O с двумя архитектурами . /bin/cat (для архитектуры ppc7400 ): исполняемый файл ppc Mach-O./bin/cat (для архитектуры i386): исполняемый файл Mach-O i386.
$ файл /usr/bin/vi/usr/bin/vi: символическая ссылка на vim
Идентификация символических ссылок доступна не на всех платформах и будет разыменована, если она -Lбудет передана или POSIXLY_CORRECTустановлена.
Начиная с версии 4.00 версии Яна Дарвина/Христоса Зуласа file
функциональность file
включена в libmagic
библиотеку , доступную через C (и C-совместимую) компоновку; [7] [8] file
реализовано с использованием этой библиотеки. [9] [10]
file
используемой в основных дистрибутивах BSD и Linux.