linux-labs

Вики / Базовые команды

file — тип файла

Команда Linux БазовоеФайлы

Определить, что внутри файла (текст, ELF, архив, картинка) по содержимому, а не по расширению.

file определяет тип файла по содержимому (сигнатуре, «магическим байтам»), а не по расширению. В Linux расширение ничего не значит — file говорит правду.

file report           # report: ASCII text
file /bin/ls          # ELF 64-bit LSB pie executable, x86-64 …
file archive          # gzip compressed data  (даже если без .gz)
file photo            # JPEG image data, …
file *                        # типы всех файлов в каталоге
file -i notes.txt             # MIME-тип: text/plain; charset=utf-8
file -b script.sh             # без имени файла (только тип) — удобно в скриптах
file -L symlink               # идти по симлинку и смотреть цель
file -s /dev/sda1             # -s: заглянуть в блочное устройство (тип ФС)
file -z archive.gz            # заглянуть ВНУТРЬ сжатого

Ключи: -b (кратко), -i (MIME), -L (по симлинку), -s (спецфайлы/устройства), -z (внутрь сжатого).

«Скрипт не запускается: cannot execute binary file»

file script покажет реальный тип. Частые причины: это HTML/текст ошибки вместо бинаря (скачалось не то), или CRLF-переводы строк (file скажет «with CRLF line terminators») — почини sed -i 's/\r$//' script.

Кодировка текста под вопросом

file -i file покажет charset (utf-8 / iso-8859-1). Для перекодировки — iconv.

Определить тип ФС на разделе

file -s /dev/sdXN (от root) — быстрый способ без монтирования; для разметки см. mount.

file f               # тип по содержимому
file -i f            # MIME + кодировка
file -b f            # только тип (для скриптов)
file -s /dev/sda1    # тип ФС на устройстве (root)

См. также