Утилита file: определяем тип файла в Linux по содержимому

В Linux расширение имени файла – лишь подсказка. Настоящий тип данных утилита file определяет по содержимому: magic-байтам, сигнатурам форматов и эвристикам. Это спасает, когда файл без расширения, переименован «как удобно» или пришёл из сомнительного источника.

Как работает file

Команда читает начало файла (и при необходимости чуть дальше) и сопоставляет данные с базой правил – magic database. По ней узнаются текст, shell-скрипты, PNG/JPEG, ZIP/tar, ELF-бинарники и сотни других форматов. Расширение .txt или .jpg для решения почти не важно.

Базовый синтаксис

Минимальный вызов:

file имя_файла

Пример:

file example.txt

Типичный ответ:

example.txt: ASCII text

Файл распознан как обычный текст в ASCII. Для UTF-8 часто будет что-то вроде UTF-8 Unicode text.

Примеры

Скрипт

file script.sh

Возможный вывод:

script.sh: Bourne-Again shell script, ASCII text executable

Утилита видит shebang или характерные признаки bash-скрипта и помечает файл как исполняемый текст.

Изображение

file image.png

Пример ответа:

image.png: PNG image data, 800 x 600, 8-bit/color RGB, non-interlaced

Кроме формата часто приходят размер в пикселях, глубина цвета и способ хранения. Для JPEG, GIF, WebP картина похожая: тип и полезные метаданные из заголовка.

Архив

file archive.zip

Вывод:

archive.zip: Zip archive data, at least v2.0 to extract

Аналогично определяются .tar, .gz, .xz, .7z и смешанные контейнеры вроде .tar.gz.

Бинарник (ELF)

file программа

Типичный вывод для нативного исполняемого файла:

программа: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2

Здесь видно: формат ELF, 64 бита, little-endian, архитектура x86-64, динамическая линковка и путь к интерпретатору. Удобно быстро понять, «свой» ли бинарник для текущей машины (x86_64 vs aarch64, static vs dynamic).

Полезные ключи

Символическая ссылка по умолчанию описывается как symlink. Чтобы смотреть на целевой файл, добавьте -L (follow):

file -L ссылка

Другие часто нужные опции:

  • -b / --brief – только описание, без имени файла (удобно в скриптах);
  • -i / --mime – MIME-тип, например text/plain; charset=utf-8;
  • -z – заглянуть внутрь сжатых данных, если формат это позволяет.

Несколько файлов за раз:

file *.bin data/*

Когда это реально нужно

  • файл скачан без расширения или с «левым» именем;
  • нужно отличить текст от бинарника до открытия в редакторе;
  • проверка архитектуры ELF перед копированием на сервер;
  • быстрый разбор каталога с дампами, образами и архивами в админке или CI.

На расширении по-прежнему можно ориентироваться в быту, но когда важна уверенность, спрашивайте у file: она смотрит на данные, а не на то, как файл назвали.

Источники и ссылки


Комментарии загружаются…