Intereting Posts
Как получить показатели о снижении трафика через iptables? Нужен ли мне набор ulimit для системных служб, таких как nginx.service (systemd) / nginx (sysv)? Почему я не могу установить Debian amd64 в VirtualBox? Как сопоставить / sys / bus / usb / devices с / dev / video *? Какая версия NFS используется моим сервером NFS? Локальные и основные правила таблицы маршрутизации Может ли libvirt проверить, полностью ли загружена виртуальная машина? Может ли другой инструмент? Современное руководство для настольных компьютеров Linux? Входное поведение Stdin между «cat» и «less» Как найти неответствующие приложения в Linux Linux отбрасывает пакеты, если они получены от другого оборудования Отправка электронной почты в определенное время Восстановленный VG имеет сдвинутые объемы Является ли это так называемой «Гибридной» таблицей разделов Mac и как ее смонтировать в Linux? разрешить все IP-адреса в выводе команды с помощью стандартных инструментов командной строки

Как Linux знает тип файла, с которым он имеет дело?

В Windows ОС знает тип файла, используя расширение: exe, doc, ppt, pdf …. и т. Д.

В Linux, поскольку мы знаем, что расширение бесполезно.

Мой вопрос в том, как Linux может узнать тип файла, с которым он имеет дело: сценарий оболочки, аудиофайл, видеофайл … или т. Д. Или он имеет дело со всеми файлами одинаково?

Расширения файлов не являются бесполезными для дистрибутивов Linux, они всего лишь ярлык, который часто не используется. Есть несколько инструментов, которые использует Linux, которые делают расширения файлов в значительной степени неизменными. Первым, и, возможно, самым очевидным является shebang ( #! ).

Shebang – это строка в верхней части скриптов, выполняемых оболочкой, чтобы сообщить оболочке, что нужно использовать для ее выполнения. Например, стандартная строка, которая должна быть включена для сценария bash, выглядит примерно так:

 #!/usr/bin/bash 

Эта строка сообщает оболочке, что содержимое скриптов должно выполняться утилитой, расположенной в /usr/bin/bash . Тем не менее, shebangs действительно полезны только для исполняемых элементов.

Следующим инструментом, широко используемым современными приложениями, являются MIME-типы. Типы Mime – это объявление типа файла, широко используемого в Интернете, так что веб-браузеры и почтовые клиенты могут знать, какой тип файла передается. Однако многие программы полагаются на эти типы, чтобы знать, как их обрабатывать (например, файлы .desktop X могут включать в себя строку типа mimetype, чтобы объявить ассоциацию типа файла с конкретной программой).

Наконец, была разработана библиотека C и интерфейс командной строки для обнаружения миметиков посредством эвристики. Это libmagic и file , соответственно. Libmagic и file позволяют программе или пользователю определять тип файла, даже если он явно не объявлен.


По общему признанию, shebangs играют гораздо меньшую роль в том, как современные операционные системы определяют тип файла, но они все еще широко используются в мире сценариев и, безусловно, все еще являются частью уравнения.

Некоторые объявленные ассоциации filetype через mimetypes для X можно найти в файле $HOME/.local/share/applications/mimeapps.list (например).

Тип

% man file

По сути, большинство разработчиков формата файлов резервируют первые 4 символа или так, чтобы идентифицировать формат.

Эти символы известны как magic number файла.

Имейте в виду, что в отличие от Windows или Mac, в Unix отсутствует ассоциация файлов.

Исполняемые файлы идентифицируются некоторыми внутренними флагами ('x').

Команда

ls -l

показывает эти флаги.