Расширения файлов в Linux часто вводят в заблуждение. Файл с именем script.sh может не быть скриптом. Файл с именем backup.tar.gz может не быть архивом. Поэтому администраторы Linux полагаются на команду file.
Команда file определяет истинный тип файла, считывая его содержимое, а не имя. В этом руководстве мы расскажем вам, как использовать команду file на примерах. Мы также приведем несколько реальных историй о решении проблем и краткую шпаргалку.
Что делает команда file (и почему это важно)
Команда file проверяет магические байты и структуру файла и сравнивает их с данными в системной базе. Она стабильно работает на:
- Linux
- macOS
- FreeBSD и другие системы BSD
- Большинство Unix-подобных систем
Поскольку он игнорирует расширения, его можно использовать для отладки, проверки безопасности и автоматизации.
Четыре команды file, которые вам действительно понадобятся
1. Определение реального типа файла
file filename
Пример:
file /bin/ls
Пример вывода:
/bin/ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=15dfff3239aa7c3b16a71e6b2e3b6e4009dab998, for GNU/Linux 3.2.0, stripped
Другой пример:
file /etc/passwd
Пример вывода:
/etc/passwd: ASCII text
Вы можете использовать это, когда
- Скрипт не работает
- Бинарный файл не запускается
- Файл выглядит подозрительно
2. Правильное определение типа MIME
file -i filename
Пример:
file -i upload.bin
Выходной сигнал:
application/octet-stream; charset=binary
Это важно для:
- Загрузка файлов
- Веб-серверы
- Фильтры безопасности
- Проверка API
Расширения ненадежны. Надежно определение MIME.
3. Безопасное изучение сжатых файлов
file -z archive.gz
Пример:
file -z logs.tar.gz
Это подтверждает:
- формат архива
- тип сжатия
Работает с:
- gzip
- bzip2
- xz
- zip
- tar-архивы
Это быстрая проверка безопасности перед извлечением.
4. Проверьте диски и блочные устройства
file -s /dev/sdX
Пример:
sudo file -s /dev/sda1
Возможный результат:
/dev/sda1: Linux rev 1.0 ext4 filesystem data
Полезно для:
- Восстановление диска
- Проверка RAID
- Устранение неполадок LVM
Реальные истории об устранении неполадок
1. Сбой в работе скрипта
Скрипт развертывания с именем deploy.sh внезапно выдает ошибку разрешения.
file deploy.sh
Выходной сигнал:
ELF 64-bit LSB executable
Основная причина:
Во время неудачной операции копирования двоичный файл заменил скрипт.
Решение:
Восстановите скрипт и заблокируйте права на запись.
2. Поддельный PDF-файл, загруженный на веб-сервер
Пользователь загружает invoice.pdf. Приложение аварийно завершает работу при его обработке.
file invoice.pdf
Выходной сигнал:
POSIX shell script
Основная причина:
Файл представлял собой скрипт, замаскированный под PDF.
Решение:
Блокируйте загрузку на основе типа MIME с помощью file -i.
3. Диск отображается, но не монтируется
Новый диск отображается как /dev/sdb1, но не монтируется.
file -s /dev/sdb1
Выходной сигнал:
LVM2 PV (Linux Logical Volume Manager)
Основная причина:
Раздел принадлежит группе томов LVM.
Решение:
Активируйте группу томов вместо прямого монтирования.
4. Повреждённый архив резервной копии
При извлечении данных задание на восстановление завершается ошибкой.
file -z backup.tar.gz
Выходной сигнал:
gzip compressed data, truncated
Основная причина:
Загрузка резервной копии была прервана.
Решение:
Создайте резервную копию заново и добавьте проверку целостности.
Распространённые шаблоны администрирования, которые стоит использовать
1. Сканирование всего каталога
file *
Подходит для:
- выявление неправильных файлов
- обнаружение повреждённых данных
- проверка загруженных файлов
2. Проверяйте скрипты перед выполнением
file script.sh
Ожидаемый результат будет следующим:
ASCII text
Неожиданный результат — это сигнал тревоги.
Что не может сделать команда file
- Не сканирует на наличие вредоносного ПО
- Не проверяет содержимое архива
- Не гарантирует безопасность файлов
Воспринимайте это как первую проверку, а не как окончательную.
fileТаблица команд
# Определение реального типа файла
file filename
# Определение типа MIME
file -i filename
# Проверка сжатых файлов
file -z archive.gz
# Проверка дисков и блочных устройств
file -s /dev/sdX
# Сканирование всех файлов в каталоге
file *
# Быстрая проверка неизвестных файлов
file -i -z suspicious_file
Если вам больше нравится изображение, вы можете распечатать его и держать рядом с рабочим столом.
Вопросы и ответы
В: Как проверить тип файла в Linux?
О: Используйте:
file filename
Программа считывает содержимое файла и определяет его реальный тип.
В: Как узнать MIME-тип файла в Linux?
О: Используйте:
file -i filename
Это безопаснее, чем использовать расширения.
В: Может ли команда file проверять архивы?
О: Да. Используйте:
file -z archive.gz
Эта функция проверяет сжатые файлы без их распаковки.
В: Безопасно ли использовать команду file для работы с ненадежными файлами?
О: Да. Она считывает только заголовки файлов и не выполняет их содержимое.
В: Может ли команда file обнаружить вредоносное ПО?
О: Нет. Она определяет только тип файла. Для обнаружения вредоносного ПО используйте сканеры безопасности.
Заключение
Команда file — одна из самых мощных команд. Она помогает увидеть за обманчивыми именами и расширениями то, чем файл является на самом деле.
Вам не нужны все опции.
Если вы запомните всего четыре из них, то уже будете использовать file как профессионал:
file filename file -i filename file -z archive file -s /dev/sdX
При устранении неполадок в Linux эта команда часто выдаёт первый правильный ответ.
