Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Команда является стандартной программой для Unix и Unix-подобных операционных систем для распознавания типа данных , содержащихся в компьютерном файле .file

История [ править ]

Первоначальная версия fileвозникла в Unix Research Version 4 [1] в 1973 году. System V внесла крупное обновление с несколькими важными изменениями, в первую очередь перемещением информации о типе файла во внешний текстовый файл, а не компиляцией ее в сам двоичный файл.

Большинство крупных BSD и Linux дистрибутивы используют бесплатный , с открытым исходным кодом переопределённой , которая была написана в 1986-87 от Яна Дарвина [2] с нуля. Он был расширен Джеффом Коллайером в 1989 году, и с тех пор в него вошли многие другие, включая Гая Харриса, Криса Лоута и Эрика Фишера; с конца 1993 года его обслуживание было организовано Христосом Зуласом . Система OpenBSD имеет собственную реализацию подмножества, написанную с нуля, но по-прежнему использует коллекцию Darwin / Zoulas с информацией в формате волшебных файлов.

Команда fileтакже была перенесена в операционную систему IBM i . [3]

Спецификация [ править ]

Спецификация Single Unix (SUS) указывает , что серия испытаний выполняются на файл , указанный в командной строке:

  1. если файл не может быть прочитан или его тип файла Unix не определен, fileпрограмма укажет, что файл был обработан, но его тип не определен.
  2. fileдолжен иметь возможность определять каталог типов , FIFO , сокет , специальный файл блока и специальный файл символов
  3. файлы нулевой длины идентифицируются как таковые
  4. рассматривается начальная часть файла и fileдолжна использоваться позиционно-чувствительные тесты
  5. рассматривается весь файл и fileдолжен использоваться контекстно-зависимые тесты
  6. файл идентифицируется как dataфайл

fileЧувствительные к положению тесты обычно реализуются путем сопоставления различных мест в файле с текстовой базой данных магических чисел (см. раздел «Использование»). Это отличается от других более простых методов, таких как расширения файлов и такие схемы, как MIME .

В большинстве реализаций fileкоманда использует базу данных для проверки ведущих байтов. Эта база данных реализованы в файл с именем magic, местоположение которого, как правило , в /etc/magic, /usr/share/file/magicили подобным местом.

Использование [ править ]

SUS [4] предусматривает следующие варианты:

-M fileукажите специально отформатированный файл, содержащий тесты, чувствительные к положению; тесты с учетом положения по умолчанию и тесты с учетом контекста не выполняются.
-m file, что касается -M, но тесты по умолчанию будут выполнены после тестов, содержащихся в file.
-d, выполнить по умолчанию чувствительные к положению и контексту тесты для данного файла; это поведение по умолчанию, если не указано -Mили -m.
-h, не разыменовывайте символические ссылки , указывающие на существующий файл или каталог.
-L, разыменовать символическую ссылку, указывающую на существующий файл или каталог.
-i, не классифицируйте файл дальше, чем идентифицируйте его как: несуществующий, специальный блочный файл, специальный символьный файл, каталог, FIFO , сокет, символическая ссылка или обычный файл. Системы Linux [5] и BSD [6] работают по-разному с этой опцией и вместо этого выводят тип Интернет-носителя (« MIME- тип»), идентифицирующий распознанный формат файла.

Другие Unix и Unix-подобные операционные системы могут добавлять дополнительные параметры, помимо этих, такие как -s«специальные файлы», -k«продолжать работу» или -r«необработанные» (примеры ниже).

Команда сообщает только то, как выглядит файл , а не то, что он есть (в случае, когда файл просматривает содержимое). Программу легко обмануть, поместив магическое число в файл, содержание которого ему не соответствует. Таким образом, команда не может использоваться в качестве инструмента безопасности, кроме как в определенных ситуациях.

Примеры [ править ]

$ file file.cfile.c: текст программы на языке C 
$ file программапрограмма: 32-разрядный исполняемый файл LSB ELF , Intel 80386 , версия 1 ( SYSV ), динамически скомпонованный (использует общие библиотеки ), разделенный 
$ file / dev / hda 1/ dev / hda1: специальный блок (0/0)
$ file -s / dev / hda 1/ dev / hda1: файловая система Linux / i386 ext2 

Обратите внимание, что -s - это нестандартная опция, доступная только на некоторых платформах, которая сообщает, что fileнужно читать файлы устройств и пытаться идентифицировать их содержимое, а не просто идентифицировать их как файлы устройств. Обычно fileне пытается читать файлы устройства, так как чтение такого файла может иметь нежелательные побочные эффекты.

$ file -k -r libmagic-dev_5.35-4_armhf.deb # (в Linux )libmagic-dev_5.35-4_ armhf . deb : двоичный пакет Debian (формат 2.0)- текущий архив ar- данные

Благодаря нестандартной опции -kпрограмма не останавливается после первого найденного попадания, а ищет другие подходящие шаблоны. -rВариант, который доступен в некоторых версиях, вызывает нецензурный новую строку символов , которая будет отображаться в сыром виде , а не в восьмеричном представлении.

$ file compressed.gzcompressed.gz: GZIP сжатый данные , сжимаемые , оригинальное имя файла , `сжатые», последний Модифицированные: Чты 26 января 2006 14:08:23, ОСЫ : Unix
$ file -i compressed.gz # (в Linux )сжатый.gz: application / x - gzip ; charset = двоичный
$ file data.ppmdata.ppm: данные изображения Netpbm PPM "rawbits" 
$ файл / bin / cat/ bin / cat: универсальный двоичный файл Mach-O с двумя архитектурами
/ bin / cat [для архитектуры ppc7400 ): исполняемый файл Mach-O ppc
/ bin / cat (для архитектуры i386 ): исполняемый файл Mach-O i386 

Библиотека Libmagic [ править ]

Начиная с версии 4.00 версии Ian Darwin / Christos Zoulas file, функциональные возможности fileвключены в libmagic библиотеку , доступную через C (и C-совместимую) компоновку; [7] [8] file реализуется с использованием этой библиотеки. [9] [10]

Ссылки [ править ]

  1. ^ "Источник файла UNIX V4" "справочная страница" .
  2. ^ Ранняя история этой программы записана в ее частном репозитории CVS; см. [1] журнал основной программы
  3. ^ IBM . «Qshell для программирования IBM System i версии 7.2» (PDF) . Проверено 5 сентября 2020 .
  4. ^ The Open Group Base Specifications Issue 7 - команда file
  5. ^ file(1)  -  Linux пользователя Руководство Команды пользователя -
  6. ^ file(1)  -  Руководство по основным командам NetBSD
  7. ^ libmagic(3)  -  Руководство программиста Linux - Функции библиотеки
  8. ^ libmagic(3)  -  Руководство по функциям библиотеки NetBSD
  9. ^ Zoulas, Christos (27 февраля 2003). "file-3.41 теперь доступен" . Файл (список рассылки) . Проверено 1 января 2013 года .
  10. ^ Zoulas, Christos (24 марта 2003). "file-4.00 теперь доступен" . Файл (список рассылки) . Проверено 1 января 2013 года .

Внешние ссылки [ править ]

  • file: определение типа файла - Справочник по командам и утилитам, Единая спецификация UNIX , Выпуск 7 от The Open Group
  • список рассылки файлов
  • файловые релизы

Страницы руководства [ править ]

  • file(1) -  Руководство программиста Plan 9 , том 1
  • file(1) -  Руководство по командам пользователя Linux
  • libmagic(3) -  Руководство по функциям библиотеки NetBSD
  • libmagic(3) -  Руководство по функциям библиотеки Linux
  • file(1) -  Руководство по основным командам OpenBSD

Другое [ править ]

  • Fine Free File Command - домашняя страница для версии, fileиспользуемой в основных дистрибутивах BSD и Linux.
  • Файл для Windows - веб-страница собственного порта GnuWin32file для 32-битной Windows.
  • Пакет libmagic-dev на packages.debian.org
  • TrID , альтернатива, предоставляющая ранжированные ответы (вместо одного) на основе статистики.