Руководства по командной строке

Man » Онлайн-руководство по file — подробная онлайн-документация для страницы man file

🌍
file — определить тип файла

СИНТАКСИС

file   [-bcdEhiklLNnprsSvzZ0]   [--apple]   [--exclude-quiet]   [--extension]   [--mime-encoding]
[--mime-type] [-e testname] [-F separator] [-f namefile]  [-m  magicfiles]  [-P  name=value]
file ...
file -C [-m magicfiles]
file [--help]

ОПИСАНИЕ

Эта страница руководства содержит документацию к версии 5.46 команды file.

file  проверяет каждый аргумент, чтобы классифицировать его. Выполняется три набора проверок в следующем порядке: проверки файловой системы, проверки с использованием «магических» чисел и проверки языка. Первая успешно выполненная проверка приводит к выводу типа файла.

Выводимый тип обычно содержит одно из слов text (файл содержит только символы для печати и несколько распространенных управляющих символов и, вероятно, безопасен для чтения в ASCII-терминале), executable (файл содержит результат компиляции программы в форме, понятной для какого-либо ядра UNIX или другого) или data (что означает все остальное; данные обычно являются «двоичными» или непечатаемыми). Исключения составляют хорошо известные форматы файлов (файлы дампа памяти, архивы tar), которые, как известно, содержат двоичные данные. При изменении файлов «магических» чисел или самой программы убедитесь, что эти ключевые слова сохранены. Пользователи должны знать, что все читаемые файлы в каталоге имеют слово «text» в выводе. Не делайте, как это сделала Berkeley, и не меняйте «shell commands text» на «shell script».

Проверки файловой системы основаны на проверке возвращаемого значения системного вызова stat(2). Программа проверяет, пуст ли файл или является ли он каким-либо специальным файлом. Известные типы файлов, соответствующие системе, в которой вы работаете (сокеты, символические ссылки или именованные каналы (FIFO) в системах, которые их реализуют), выводятся, если они определены в системном заголовочном файле .

Проверки с использованием «магических» чисел используются для проверки файлов с данными в определенном фиксированном формате. Классическим примером является двоичный исполняемый файл (скомпилированная программа) a.out, формат которого определен в , и, возможно, в каталоге стандартных заголовочных файлов. Эти файлы имеют «магическое число», хранящееся в определенном месте в начале файла, которое сообщает операционной системе UNIX, что файл является двоичным исполняемым файлом и какой из нескольких типов. Концепция «магического числа» была расширена на файлы данных. Любой файл с некоторым неизменным идентификатором в небольшом фиксированном смещении в файле обычно может быть описан таким образом. Информация, идентифицирующая эти файлы, считывается из /etc/magic и скомпилированного файла «магических» чисел /usr/share/misc/magic.mgc или из файлов в каталоге /usr/share/misc/magic, если скомпилированный файл не существует. Кроме того, если $HOME/.magic.mgc или $HOME/.magic существует, он будет использоваться вместо системных файлов «магических» чисел.


Если файл не соответствует ни одной из записей в файле «магии», он проверяется на предмет того, является ли он текстовым файлом. ASCII, ISO-8859-x, расширенные 8-битные кодировки ASCII (например, используемые в системах Macintosh и IBM PC), UTF-8, UTF-16 и кодировки EBCDIC могут быть различены по различным диапазонам и последовательностям байтов, которые составляют печатный текст в каждой кодировке. Если файл проходит какую-либо из этих проверок, его кодировка сообщается. Файлы ASCII, ISO-8859-x, UTF-8 и с расширенной кодировкой ASCII идентифицируются как «текст», поскольку они будут в основном читаемы на практически любом терминале; UTF-16 и EBCDIC идентифицируются только как «символьные данные», поскольку, хотя они и содержат текст, этот текст потребует преобразования, прежде чем его можно будет прочитать.

Кроме того, file попытается определить другие характеристики текстовых файлов. Если строки файла завершаются символами CR, CRLF или NEL, а не стандартным для Unix символом LF, это будет указано. Файлы, содержащие встроенные управляющие последовательности или символы перезаписи, также будут идентифицированы.

После того как file определила кодировку, используемую в текстовом файле, она попытается определить язык, на котором написан файл. Языковые тесты ищут определенные строки (см. <names.h>), которые могут появляться в любом месте в первых нескольких блоках файла. Например, ключевое слово .br указывает на то, что файл, скорее всего, является входным файлом для troff(1), как и ключевое слово struct указывает на программу на C. Эти тесты менее надежны, чем предыдущие две группы, поэтому они выполняются последними. Подпрограммы языковых тестов также проверяют наличие различных других элементов (например, архивы [tar]({filename}../../tar)(1)).

Любой файл, который не может быть идентифицирован как написанный в одной из перечисленных выше кодировок, просто определяется как «данные».

ОПЦИИ

`--apple`
Заставляет команду `file` выводить тип файла и код создателя, используемые в старых версиях MacOS. Код состоит из восьми букв, первая из которых описывает тип файла, а остальные — создателя. Эта опция работает правильно только для форматов файлов, для которых определен вывод в стиле Apple.

`-b`, `--brief`
Не добавляет имена файлов в начало строк вывода (краткий режим).

`-C`, `--compile`
Создает файл `magic.mgc`, содержащий предварительно проанализированную версию файла или каталога «магии».

`-c`, `--checking-printout`
Выводит отладочную информацию о проанализированной форме файла «магии». Обычно используется в сочетании с опцией `-m` для отладки нового файла «магии» перед его установкой.

`-d`
Выводит внутреннюю отладочную информацию в stderr.

`-E`
При возникновении ошибок файловой системы (файл не найден и т. д.) вместо обработки ошибки как обычного вывода, как того требует POSIX, выводит сообщение об ошибке и завершает работу.

-e, --exclude testname

Исключить тест с именем testname из списка тестов, используемых для определения типа файла. Допустимые имена тестов:

apptype   Тип приложения EMX (только в EMX).

ascii     Различные типы текстовых файлов (этот тест попытается определить кодировку текста, независимо от настройки опции «encoding»).

encoding  Различные кодировки текста для тестов с использованием soft magic.

tokens    Игнорируется для обеспечения обратной совместимости.

cdf       Выводит сведения о файлах Compound Document Files.

compress  Проверяет и анализирует сжатые файлы.

csv       Проверяет файлы Comma Separated Value.

elf       Выводит сведения о файлах ELF, при условии, что включены тесты soft magic и обнаружено magic-значение.

json      Анализирует файлы JSON (RFC-7159) для проверки соответствия.

soft      Использует magic-файлы.

simh      Анализирует файлы SIMH tape.

tar       Анализирует tar-файлы, проверяя контрольную сумму 512-байтового заголовка tar. Исключение этого теста может предоставить более подробное описание содержимого с использованием метода soft magic.

text      Синоним для «ascii».

--exclude-quiet

Аналогично --exclude, но игнорирует тесты, о которых file не знает. Предназначено для обеспечения совместимости со старыми версиями file.

--extension

Выводит список допустимых расширений для найденного типа файла, разделенных символом /.

-F, --separator separator

Использовать указанную строку в качестве разделителя между именем файла и результатом, возвращаемым file. По умолчанию используется :.

-f, --files-from namefile

Считывает имена файлов, подлежащих проверке, из файла namefile (по одному в каждой строке) перед списком аргументов. Должен быть указан либо namefile, либо, по крайней мере, один аргумент имени файла; чтобы проверить стандартный ввод, используйте - в качестве аргумента имени файла. Обратите внимание, что namefile распаковывается, и заключенные в него имена файлов обрабатываются при обнаружении этой опции и перед дальнейшей обработкой опций. Это позволяет обрабатывать несколько списков файлов с разными аргументами командной строки при одном запуске file. Таким образом, если вы хотите установить разделитель, вам нужно сделать это до того, как указать список файлов, например: -F @ -f namefile, а не: -f namefile -F @.

-h, --no-dereference

Эта опция предотвращает переход по символическим ссылкам (в системах, поддерживающих символические ссылки). Это значение по умолчанию, если не определена переменная окружения POSIXLY\_CORRECT.

-i, --mime

Заставляет команду file выводить строки MIME-типов, а не более традиционные удобочитаемые строки. Таким образом, она может выводить «text/plain; charset=us-ascii», а не «ASCII text».

--mime-type, --mime-encoding

Аналогично -i, но выводит только указанные элементы.

-k, --keep-going

Не останавливаться после первого совпадения, продолжать обработку. Последующие совпадения будут иметь префикс \012-. (Если вам нужна новая строка, используйте опцию -r). Шаблон magic с наибольшей силой (см. опцию -l) будет первым.


-l, --list
Отображает список шаблонов и их силу, отсортированный по убыванию значения «magic(5)», которое используется для сопоставления (см. также опцию -k).

-L, --dereference
Эта опция приводит к тому, что символические ссылки следуются, как у одноименной опции в [ls]({filename}../../ls)(1) (на системах, поддерживающих символические ссылки). Это значение по умолчанию, если определена переменная среды POSIXLY_CORRECT.

-m, --magic-file magicfiles
Укажите альтернативный список файлов и каталогов, содержащих магические данные. Это может быть один элемент или список, разделенный двоеточиями. Если рядом с файлом или каталогом найден скомпилированный файл с магическими данными, он будет использоваться.

-N, --no-pad
Не выравнивайте имена файлов в выходных данных.

-n, --no-buffer
Принудительно очищайте стандартный вывод после проверки каждого файла. Это полезно только при проверке списка файлов. Предназначено для использования программами, которым требуется вывод типа файла из канала.

-p, --preserve-date
На системах, поддерживающих utime(3) или utimes(2), попытайтесь сохранить время доступа к анализируемым файлам, чтобы создать впечатление, что файлы не были прочитаны.

-P, --parameter name=value
Установите различные пределы параметров.

Name         Default    Explanation
bytes        1M         максимальное количество байт для чтения из файла
elf_notes    256        максимальное количество обрабатываемых ELF-заметок
elf_phnum    2K         максимальное количество обрабатываемых ELF-программных секций
elf_shnum    32K        максимальное количество обрабатываемых ELF-секций
elf_shsize   128MB      максимальный размер обрабатываемой ELF-секции
encoding     65K        максимальное количество байт для определения кодировки
indir        50         предел рекурсии для непрямой магии
name         100        предел использования для магии «имя/использование»
regex        8K         предел длины для поисков с использованием регулярных выражений

-r, --raw
Не преобразуйте непечатаемые символы в \ooo. Обычно программа file преобразует непечатаемые символы в их восьмеричное представление.

-s, --special-files
Обычно программа file пытается читать и определять тип только тех файлов аргументов, которые [stat]({filename}../../stat)(2) сообщает как обычные файлы. Это предотвращает проблемы, поскольку чтение специальных файлов может иметь необычные последствия. Указание опции -s приводит к тому, что программа file также читает файлы аргументов, которые являются блочными или символьными специальными файлами. Это полезно для определения типов файловых систем, содержащихся в необработанных разделах диска, которые являются блочными специальными файлами. Эта опция также приводит к тому, что программа file игнорирует размер файла, сообщаемый [stat]({filename}../../stat)(2), поскольку в некоторых системах он сообщает нулевой размер для необработанных разделов диска.

-S, --no-sandbox
На системах, где доступна libseccomp (https://github.com/seccomp/libseccomp), опция -S отключает песочницу, которая включена по умолчанию. Эта опция необходима для выполнения программой file внешних программ распаковки, т. е. когда указана опция -z, и встроенные распаковщики недоступны. На системах, где песочница недоступна, эта опция не имеет эффекта.

Примечание: эта версия для Debian была собрана без поддержки seccomp, поэтому эта опция
не имеет эффекта.

-v, --version

Вывести версию программы и завершить работу.

-z, --uncompress

Попытаться просмотреть содержимое сжатых файлов.

-Z, --uncompress-noreport

Попытаться просмотреть содержимое сжатых файлов, но выводить информацию о содержимом, а не о сжатии.

-0, --print0

Вывести нулевой символ «\0» после конца имени файла. Удобно для использования с cut(1). Это не влияет на разделитель, который по-прежнему выводится.

Если эта опция повторяется более одного раза, то file выводит только имя файла, за которым следует
символ NUL, а затем описание (или сообщение об ошибке), за которым следует второй символ NUL для каждой записи.

--help  Вывести сообщение о справке и завершить работу.

ПЕРЕМЕННЫЕ СРЕДЫ

Переменная среды MAGIC может использоваться для задания имени файла магии по умолчанию. Если эта переменная задана, то file не будет пытаться открыть $HOME/.magic. file добавляет к значению этой переменной суффикс «.mgc», если это необходимо. Переменная среды POSIXLY_CORRECT определяет (в системах, поддерживающих символические ссылки), будет ли file пытаться следовать за символическими ссылками или нет. Если она задана, то file следует за символической ссылкой, в противном случае она не следует. Это также контролируется опциями -L и -h.

ФАЙЛЫ

/usr/share/misc/magic.mgc  Список магии, скомпилированный по умолчанию.
/usr/share/misc/magic  Каталог, содержащий файлы магии по умолчанию.

КОДЫ ВЫХОДА

file завершит работу с кодом 0, если операция прошла успешно, или >0, если возникла ошибка.
Следующие ошибки вызывают диагностические сообщения, но не влияют на код выхода программы (как того требует POSIX), если не указана опция -E:
Файл не найден
Нет разрешения на чтение файла
Невозможно определить тип файла

ПРИМЕРЫ

$ file file.c file /dev/{wd0a,hda}
file.c:   C program text
file:     ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
dynamically linked (uses shared libs), stripped
/dev/wd0a: block special (0/0)
/dev/hda: block special (3/0)

$ file -s /dev/wd0{b,d}
/dev/wd0b: data
/dev/wd0d: x86 boot sector

$ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
/dev/hda:   x86 boot sector
/dev/hda1:  Linux/i386 ext2 filesystem
/dev/hda2:  x86 boot sector
/dev/hda3:  x86 boot sector, extended partition table
/dev/hda4:  Linux/i386 ext2 filesystem
/dev/hda5:  Linux/i386 swap file
/dev/hda6:  Linux/i386 swap file
/dev/hda7:  Linux/i386 swap file
/dev/hda8:  Linux/i386 swap file
/dev/hda9:  empty
/dev/hda10: empty

$ file -i file.c file /dev/{wd0a,hda}
file.c:      text/x-c
file:        application/x-executable
/dev/hda:    application/x-not-regular-file
/dev/wd0a:   application/x-not-regular-file

СМОТРИТЕ ТАКЖЕ

hexdump(1), od(1), strings(1), magic(5)

СООТВЕТСТВИЕ СТАНДАРТАМ

Считается, что эта программа превосходит определение System V Interface для FILE(CMD), насколько это можно определить по неявному языку, содержащемуся в нем. Ее поведение в основном совместимо с программой System V с тем же именем. Однако в этой версии больше данных о магии, поэтому она будет выдавать другие (хотя и более точные) результаты во многих случаях.


Одно из существенных отличий этой версии от System V заключается в том, что в ней любой пробел рассматривается как разделитель, поэтому пробелы в строках шаблонов необходимо экранировать. Например:

>10     string  language impress        (imPRESS data)

в существующем файле magic необходимо изменить на:

>10     string  language\ impress       (imPRESS data)

Кроме того, в этой версии, если строка шаблона содержит обратную косую черту, ее необходимо экранировать. Например:

0      string          \begindata      Andrew Toolkit document

в существующем файле magic необходимо изменить на:

0      string          \\begindata     Andrew Toolkit document

В SunOS версии 3.2 и более поздних, поставляемых компанией Sun Microsystems, есть команда file, основанная на версии System V, но с некоторыми расширениями. Эта версия отличается от версии Sun лишь в незначительных деталях. Она включает расширение оператора «&», который используется, например, следующим образом:

>16     long&0x7fffffff >0              not stripped

БЕЗОПАСНОСТЬ

На системах, где доступна библиотека libseccomp, команда file обеспечивает ограничение системных вызовов только теми, которые необходимы для работы программы. Это ограничение не обеспечивает никакой дополнительной безопасности, когда команде file поручено распаковывать входные файлы с помощью внешних программ с помощью опции -z. Чтобы разрешить выполнение внешних распаковщиков, необходимо отключить песочницу с помощью опции -S.

ДИРЕКТОРИЯ MAGIC

Записи в файле magic были собраны из различных источников, в основном из USENET, и предоставлены различными авторами. Христос Зулас (адрес указан ниже) будет собирать дополнительные или исправленные записи в файле magic. Объединенный набор записей в файле magic будет периодически распространяться.

Порядок записей в файле magic имеет значение. В зависимости от используемой системы, порядок, в котором они собраны, может быть неправильным.

ИСТОРИЯ

Команда file существует в каждой системе UNIX, по крайней мере, начиная с версии Research Version 4 (страница руководства датирована ноябрем 1973 г.). В версии System V было внесено одно важное изменение: внешний список типов magic. Это немного замедлило работу программы, но сделало ее гораздо более гибкой.

Эта программа, основанная на версии System V, была написана Яном Дарвином ⟨_\⟩ без ознакомления с исходным кодом кого-либо другого.

Джон Гилмор значительно переработал код, сделав его лучше, чем первая версия. Джефф Коллиер обнаружил несколько недостатков и предоставил некоторые записи в файле magic. Вклад в оператор «&» от Роба МакМагона, ⟨_\⟩, 1989 г.

Гай Харрис, ⟨_\⟩, внес много изменений с 1993 года по настоящее время.

Основная разработка и поддержка с 1990 года по настоящее время осуществляются Христосом Зуласом ⟨_\⟩.

Изменено Крисом Лоутом ⟨_\⟩, 2000 г.: добавлена обработка опции -i для вывода строк MIME-типов с использованием альтернативного файла magic и внутренней логики.


Изменен Эриком Фишером ⟨_\⟩, июль 2000 г., для определения кодов символов и попытки определения языков не-ASCII файлов.

Изменен Рубеном Томасом ⟨_\⟩, 2007–2011 гг., для улучшения поддержки MIME, объединения MIME и не-MIME магии, поддержки каталогов, а также файлов магии, применения множества исправлений ошибок, обновления и исправления большого количества магии, улучшения системы сборки, улучшения документации и переписывания Python-привязок на чистом Python.

Список участников, внесших вклад в каталог «magic» (файлы магии), слишком велик, чтобы его здесь перечислить. Вы знаете, кто вы; спасибо. Многие участники указаны в исходных файлах.

ЮРИДИЧЕСКОЕ УВЕДОМЛЕНИЕ

Авторское право (c) Ian F. Darwin, Торонто, Канада, 1986–1999 гг. Распространяется в соответствии со стандартной лицензией Berkeley Software Distribution; см. файл COPYING в исходном дистрибутиве.

Файлы tar.h и is_tar.c были написаны Джоном Гилмором из его программы, находящейся в общественном достоянии tar(1), и не подпадают под действие вышеуказанной лицензии.

ОШИБКИ

Пожалуйста, сообщайте об ошибках и отправляйте исправления в систему отслеживания ошибок по адресу https://bugs.astron.com/ или в рассылку по адресу ⟨_\⟩ (посетите https://mailman.astron.com/mailman/listinfo/file, чтобы сначала подписаться).

ПЛАНЫ НА БУДУЩЕЕ

Исправьте вывод, чтобы не требовались проверки на флаги MIME и APPLE повсюду, и чтобы фактический вывод выполнялся только в одном месте. Это требует проектирования. Предложение: помещайте возможные результаты в список, а затем выбирайте последнее добавленное (надеемся, наиболее конкретное) значение в конце, или используйте значение по умолчанию, если список пуст. Это не должно замедлять оценку.

Обработка MAGIC_CONTINUE и вывод символа \012 между записями неудобна и сложна; реорганизуйте и централизуйте.

Часть логики кодирования жестко закодирована в encoding.c и может быть перемещена в файлы магии, если бы у нас была аннотация !:charset.

Продолжайте исправлять все ошибки в магии. Хороший источник — Debian BTS.

Храните произвольно длинные строки, например, для шаблонов %s, чтобы их можно было выводить. Исправляет ошибку Debian #271672. Это можно сделать, выделив строки в пуле строк, сохранив пул строк в конце файла магии и преобразовав все указатели строк в относительные смещения от пула строк.

Добавьте синтаксис для относительных смещений после текущего уровня (ошибка Debian #466037).

Сделайте так, чтобы работала команда file -ki, т. е. чтобы выдавались множественные типы MIME.

Добавьте библиотеку zip, чтобы мы могли просматривать содержимое документов Office2007 и выводить больше подробностей об их содержимом.

Добавьте опцию для вывода URL-адресов источников описаний файлов.

Объедините поиск скриптов и добавьте способ сопоставления имен исполняемых файлов с типами MIME (например, создайте значение магии для !:mime, которое заставит полученную строку искать в таблице). Это позволит избежать повторного добавления одного и того же значения магии для каждого нового интерпретатора hash-bang.

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


Исправьте “name” и “use”, чтобы проверять их согласованность во время компиляции (дублирование “name”, “use”, указывающее на неопределенный “name”). Сделайте “name” / “use” более эффективными, поддерживая отсортированный список имен.

Сделайте специальную обработку для символа ^, чтобы он переворачивал порядок байтов в парсере, чтобы его не нужно было экранировать, и задокументируйте это.

Если указанные внутри файла смещения превышают размер буфера (переменная HOWMANY в файле file.h), мы не переходим к этому смещению, а прекращаем работу. Было бы лучше, если бы управление буфером осуществлялось при наличии файлового дескриптора, чтобы можно было перемещаться по файлу. Однако следует быть осторожным, поскольку это может повлиять на производительность и, следовательно, на безопасность, так как можно замедлить работу, многократно выполняя операции поиска.

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

ДОСТУПНОСТЬ

Вы можете получить последнюю версию от оригинального автора, используя анонимный FTP на ftp.astron.com в каталоге /pub/file/file-X.YZ.tar.gz.