В 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: она смотрит на данные, а не на то, как файл назвали.