Каковы отношения между типами MIME и Файлом .extensions?

Я могу иметь неверное представление здесь, но я думал что:

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

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

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

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

Существует ли ясная иерархия на работе здесь?

19
задан 15 October 2010 в 18:19

3 ответа

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

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

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

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

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

0
ответ дан 15 October 2010 в 18:19

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

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

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

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

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

0
ответ дан 15 October 2010 в 18:19

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

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

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

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

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

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

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

0
ответ дан 15 October 2010 в 18:19

Другие вопросы по тегам:

Похожие вопросы: