Какая связь между типами MIME и File .extensions?

19

Возможно, у меня неправильная идея, но я подумал, что:

Типы MIME являются идентифицирующие коды, встроенные в файл.
Файл .extensions является idenifying коды, суффикса к файлу по имени .

Из того, что я слышал в смутные темные века, я подумал, что Linux не зависит от расширения ... (может быть, это было в первые дни, и с тех пор все изменилось ...?)

Я недавно пришел из мира Windows, где на уровне операционной системы файл .extension является единственным способом (насколько мне известно) связать его с соответствующей прикладной программой.

Поскольку я не знаю почему , я нахожу немного смущающим, что файл с именем "fred" и файл с именем "fred.txt" открываются в текстовом редакторе.

Есть ли здесь четкая иерархия в работе?

Peter.O
источник

Ответы:

16

MIME-типы - это просто способ именования типов. Они не имеют никакого отношения к тому, как определяется тип файла.

Существует два способа определить тип файла: а) посмотреть на его расширение и надеяться, что он точный, или б) посмотреть на его содержимое, а затем угадать на основе этого. Если файл не имеет расширения b, это единственный вариант.

Многие (двоичные) форматы файлов имеют специальный заголовок, который вы можете посмотреть, чтобы определить их тип. Это делает вариант b достаточно надежным для этих типов.

Форматы простых текстовых файлов часто определяются их структурой (если файл содержит много тегов html, это, вероятно, файл html).

В системах Unix и Linux вы можете использовать fileутилиту командной строки, чтобы узнать тип файла на основе его содержимого.

Файловый менеджер часто использует некоторую комбинацию параметров a и b (например, сначала посмотрите на расширение файла, если оно неизвестно (или у файла нет расширения), посмотрите на содержимое).

Тип файла не сохраняется как метаданные в распространенных файловых системах Linux.

sepp2k
источник
14

В Linux расширение файла является частью имени файла и фактически ничего не значит для операционной системы. Тип MIME - это описание содержимого файла. fredи fred.txtоба будут иметь тип MIME text/plain.

Файловые менеджеры, такие как Nautilus, используют этот тип MIME, чтобы узнать, с какой программой открыть файл. В терминале xdg-openкоманда делает то же самое. Однако это уровень пространства пользователя, а не уровень операционной системы.

Файлы на самом деле не содержат этот тип MIME, но программы, которые их открывают, используют различные методы, чтобы определить, что это за тип MIME. Некоторые полагаются только на расширение файла, но большинство используют комбинацию методов, включая просмотр данных в начале файла.

Если начало файла содержит только байты, которые могут быть представлены как символы ASCII, можно предположить, что это текстовый файл. Если тогда расширение является чем-то вроде .html, программа предполагает, что это HTML-страница и открывает ее через веб-браузер. То же самое работает с двоичными форматами файлов. Например, я знаю, что формат файла растрового изображения начинается с 'BMP' в ASCII, за которым следуют двоичные данные, представляющие изображение.

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

dv3500ea
источник
5

В мире Linux расширения файлов являются только одним индикатором типа файла. Существует инструмент командной строки под названием «файл», который угадывает тип файла.

Для получения этого типа есть в основном 3 показателя:

  • Расширение
  • Специальные атрибуты в файловой системе (например, для символьных или жестких ссылок, папок, устройства ввода и т. Д.)
  • Содержимое
    • Двоичный (как информация ELF в исполняемых файлах)
    • Текстовое (как <html>, например #!/bin/bash)

Отношение между типом файла и типом MIME заключается в том, что MIME является только стандартом для представления типа файла (например text/css).

Linux «угадывает» тип файла и открывает соответствующую программу для этого типа.

Линкольн
источник