Главная > Управление файлами и каталогами > file

file: Руководство по определению типа файла

Определяет тип файла и информацию MIME, проверяя фактическое содержимое байтов вместо расширения. Использует базу данных libmagic.

Обзор

Команда file определяет тип файла, анализируя его содержимое, не полагаясь на расширение. Она распознает различные форматы, такие как текстовые/бинарные файлы, исполняемые файлы (ELF), архивы, изображения/аудио, а также может выводить MIME-тип и кодировку.

Основные особенности

  • Определение по фактическому содержимому, независимо от расширения
  • Возможность вывода MIME-типа и кодировки символов
  • Возможность определения цели символической ссылки или самой ссылки
  • Попытка проверки содержимого сжатых файлов (-z)

Примеры сценариев использования

Ситуации, в которых команда file особенно полезна.

  • Определение фактического формата файла с неправильным расширением (например, PDF, замаскированный под .jpg)
  • Определение типа файла без расширения
  • Разделение обработки в скриптах в зависимости от типа файла
  • Определение MIME-типа загруженных файлов в веб-/сетевых службах
  • Определение самой символической ссылки или её цели
  • Анализ содержимого сжатых файлов
  • Определение формата исполняемых файлов в целях анализа безопасности и криминалистики

Основные опции

Опции, часто используемые в различных сценариях, сгруппированы.

1) Базовое поведение и управление выводом

2) Указание ввода/цели

3) База данных magic/исключения/отладка

4) Справка/Версия

Сгенерированная команда:

Комбинируйте команды.

Описание:

`file` Запускает команду.

Комбинируйте эти опции, чтобы виртуально выполнять команды с помощью ИИ.

Примеры использования

Часто используемые шаблоны собраны в примерах.

Базовое определение

file /bin/ls

Вывод типа файла в базовом формате

Краткий вывод без имени файла

file -b /bin/ls

Простой вывод, легко обрабатываемый в скриптах

MIME-тип/кодировка

file --mime-type index.html && file --mime-encoding README.md

Полезно для определения типа в веб/пайплайнах

Проверка содержимого архива

file -z backup.tar.gz

Определение фактического содержимого сжатого файла

Символическая ссылка: сама или цель

file -h symlink && file -L symlink

Проверка самой ссылки (-h) или следование за целью (-L)

Массовая проверка MIME-типов с find

find . -type f -print0 | xargs -0 file --mime-type

Безопасная передача списка файлов с использованием разделителя NUL

Расположение базы данных magic

Путь может отличаться в зависимости от системы и дистрибутива.

🪄 Базовая скомпилированная база данных magic

/usr/share/file/magic.mgc

Расположение по умолчанию в большинстве дистрибутивов

📁 Каталог исходных файлов magic

/usr/share/file/magic/

Исходные правила до компиляции (оригиналы, не .mgc)

Коды выхода

См. для обработки ветвлений в скриптах.

Код Значение
0 Нормально: определение успешно (или запрошенная операция успешна)
1 Общая проблема: файл не существует/недоступен/определение не удалось и т.д.
2 Ошибка использования или системная ошибка

Установка

В большинстве случаев предустановлено, но если нет, установите следующим образом.

Debian/Ubuntu

sudo apt update && sudo apt install -y file

RHEL/CentOS/Fedora

sudo dnf install -y file

Arch Linux

sudo pacman -S --needed file

openSUSE

sudo zypper install -y file

Советы и примечания

  • Явное использование `--mime-type` и `--mime-encoding` позволяет избежать различий в поведении `-i/--mime` в зависимости от дистрибутива/версии.
  • Обработка символических ссылок: используйте `-h` для проверки самой ссылки, `-L` для проверки целевого файла.
  • При массовой обработке используйте шаблон `find -print0 | xargs -0` для безопасной обработки имен файлов, содержащих пробелы/переносы строк.
  • В зависимости от формата сжатия, `-z` не всегда может проверить содержимое. При необходимости сначала распакуйте и проверьте.

Связанные команды

Функционально схожие или часто используемые команды.


Те же команды в категории