файл (команда)
![]() Пример использования file | |
Разработчик(и) | AT&T Bell Laboratories |
---|---|
Первоначальный выпуск | 1973 Unix Research Version 4 ; 1986 повторная реализация с открытым исходным кодом | как часть
Репозиторий | github |
Написано в | С |
Операционная система | Unix , Unix-подобные , Plan 9 , IBM i |
Платформа | Кросс-платформенный |
Тип | типа файла Детектор |
Лицензия | Лицензия BSD , CDDL План 9: МОЯ лицензия |
Веб-сайт | дарвинсис |
The file
Команда — стандартная программа Unix компьютерном и Unix-подобных операционных систем для распознавания типа данных, содержащихся в файле .
История
[ редактировать ]Оригинальная версия file
возник в версии 4 Unix Research [ 1 ] в 1973 году. System V принесла серьезное обновление с несколькими важными изменениями, в первую очередь перемещением информации о типе файла во внешний текстовый файл, а не компиляцией ее в сам двоичный файл.
В большинстве основных дистрибутивов BSD и Linux используется бесплатная , повторная реализация с открытым исходным кодом написанная в 1986–87 годах Яном Дарвином. [ 2 ] с нуля; он хранит информацию о типе файла в текстовом файле с форматом, основанным на версии System V. Он был расширен Джеффом Коллайером в 1989 году, и с тех пор в него внесли вклад многие другие, включая Гая Харриса, Криса Лоута и Эрика Фишера; с конца 1993 года его обслуживание организует Христос Зулас . Система OpenBSD имеет собственную реализацию подмножества, написанную с нуля, но по-прежнему использует коллекцию магической информации в формате файлов Дарвина/Зуласа.
The file
Команда также была перенесена в операционную систему IBM i . [ 3 ]
Спецификация
[ редактировать ]Единая спецификация UNIX (SUS) определяет, что для файла, указанного в командной строке, выполняется серия тестов:
- если файл не может быть прочитан или его тип файла Unix не определен,
file
Программа укажет, что файл был обработан, но его тип не определен. file
должен уметь определять каталог типов , FIFO , сокет блока , специальный файл и специальный символьный файл.- файлы нулевой длины идентифицируются как таковые
- рассматривается начальная часть файла и
file
заключается в использовании позиционно-чувствительных тестов - рассматривается весь файл и
file
заключается в использовании контекстно-зависимых тестов - файл идентифицирован как
data
файл
file
Чувствительные к положению тесты обычно реализуются путем сопоставления различных мест в файле с текстовой базой данных магических чисел (см. раздел «Использование»). Это отличается от других более простых методов, таких как расширения файлов и схемы, такие как MIME .
В реализации System V, реализации Яна Дарвина и реализации OpenBSD file
Команда использует базу данных для проверки ведущих байтов. Эта база данных реализована в файле с именем magic
, расположение которого обычно находится в /etc/magic
, /usr/share/file/magic
или подобное место.
Использование
[ редактировать ]СУС [ 4 ] предполагает следующие варианты:
- -M file, укажите специально отформатированный файл, содержащий тесты, чувствительные к положению; позиционно-зависимые тесты по умолчанию и контекстно-зависимые тесты выполняться не будут.
- -m file, что касается -M, но тесты по умолчанию будут выполняться после тестов, содержащихся в
file
. - -d, выполнить позиционно-зависимые и контекстно-зависимые тесты по умолчанию для данного файла; это поведение по умолчанию, если только -M или -m указано.
- -h, не разыменовывайте символические ссылки , указывающие на существующий файл или каталог.
- -L, разыменуйте символическую ссылку, указывающую на существующий файл или каталог.
- -iне классифицируйте файл дальше, чем идентифицируйте его как несуществующий, специальный блочный файл, специальный символьный файл, каталог, FIFO , сокет, символическую ссылку или обычный файл. Линукс [ 5 ] и БСД [ 6 ] с этой опцией системы ведут себя по-другому и вместо этого выводят тип интернет-носителя (« тип MIME »), идентифицирующий распознанный формат файла.
Другие Unix и Unix-подобные операционные системы могут добавлять дополнительные параметры, кроме этих. Реализация Яна Дарвина добавляет -s 'специальные файлы', -k «продолжать» или -r «сырой» (примеры ниже) и многие другие. [ 5 ]
Команда сообщает только то, как выглядит файл , а не то, что он собой представляет (в случае, когда файл просматривает содержимое). Программу легко обмануть, поместив магическое число в файл, содержимое которого ему не соответствует. Таким образом, команду можно использовать в качестве инструмента безопасности только в определенных ситуациях.
Примеры
[ редактировать ]$ 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
Обратите внимание, что -s — это нестандартная опция, доступная только в ветке Ian Darwin, которая сообщает file
читать файлы устройств и пытаться идентифицировать их содержимое, а не просто идентифицировать их как файлы устройств. Обычно file
не пытается прочитать файлы устройства, поскольку чтение такого файла может иметь нежелательные побочные эффекты.
$ 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
Благодаря нестандартному варианту Яна Дарвина -k программа не останавливается после первого найденного совпадения, а ищет другие совпадающие шаблоны. -r Опция, доступная в некоторых версиях, приводит к тому, что непечатаемый символ новой строки отображается в необработанном виде, а не в восьмеричном представлении.
$ 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
Идентификация символических ссылок доступна не на всех платформах и будет разыменована, если -L передается или POSIXLY_CORRECT установлен.
Библиотека Либмагик
[ редактировать ]Начиная с версии 4.00 версии Яна Дарвина/Христоса Зуласа. file
, функциональность file
включен в libmagic
библиотека , доступная через C (и C-совместимую) ссылку; [ 7 ] [ 8 ] file
реализуется с использованием этой библиотеки. [ 9 ] [ 10 ]
Ссылки
[ редактировать ]- ^ «Источник справочной страницы «файла» UNIX V4» . Архивировано из оригинала 10 декабря 2019 г. Проверено 13 марта 2022 г.
- ^ Ранняя история этой программы записана в ее частном репозитории CVS; см. [1] Архивировано 1 апреля 2017 г. на Wayback Machine, журнал основной программы.
- ^ «Программирование Qshell в IBM System i версии 7.2» (PDF) . ИБМ . Архивировано (PDF) из оригинала 05 марта 2021 г. Проверено 05 сентября 2020 г.
- ^ «Базовые спецификации открытой группы, выпуск 7 — file команда » . Архивировано из оригинала 12 октября 2018 г. Проверено 20 августа 2014 г.
- ^ Перейти обратно: а б Linux пользователя Руководство – Пользовательские команды –
- ^ NetBSD по общим командам Руководство –
- ^ Linux программиста Руководство – Библиотечные функции –
- ^ NetBSD функциям библиотеки Руководство по –
- ^ Зулас, Христос (27 февраля 2003 г.). «файл-3.41 теперь доступен» . Файл (список рассылки). Архивировано из оригинала 4 марта 2016 года . Проверено 1 января 2013 г.
- ^ Зулас, Христос (24 марта 2003 г.). «файл-4.00 теперь доступен» . Файл (список рассылки). Архивировано из оригинала 28 декабря 2016 года . Проверено 1 января 2013 г.
Внешние ссылки
[ редактировать ]
- Единая спецификация UNIX , версия 4 от The Open Group : определить тип файла — Справочник по оболочке и утилитам,
Страницы руководства
[ редактировать ]- Linux пользователя Руководство – Пользовательские команды –
- NetBSD функциям библиотеки Руководство по –
- Linux программиста Руководство – Библиотечные функции –
- OpenBSD по общим командам Руководство – реализация, не принадлежащая Яну Дарвину. –
- Plan 9 , том 1 - реализация не от Яна Дарвина и не от SUS. Руководство программиста -
Другой
[ редактировать ]- Fine Free File Command - домашняя страница версии Яна Дарвина.
file
используется в основных дистрибутивах BSD и Linux. - binwalk — инструмент для анализа прошивки, который вырезает файлы на основе сигнатур libmagic.
- TrID — альтернатива, предоставляющая ранжированные ответы (вместо одного) на основе статистики.