Обзор
Команда 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` не всегда может проверить содержимое. При необходимости сначала распакуйте и проверьте.