Я искал вокруг, но, может казаться, не нахожу информации о теме.
Как Вы устанавливаете тип MIME для существующего файла?
Например, я пытаюсь создать файл с типом text/html
Типы MIME на самом деле не хранятся в файловой системе. Они - просто удобный способ знать, как обработать файл. Для получения типа MIME необходимо запустить программу.
Некоторые программы обнаружат тип пантомимы файла только путем рассмотрения расширения файла, в то время как другие проверят файл на магическое число или специальный волшебный шаблон (по существу regex).
Как пример, выполненный touch test.html
, который создает пустой файл.
Затем выполненный xdg-mime query filetype test.html
или mimetype test.html
. Они оба возвратят тип text/html
.
Однако, если Вы работаете file --mime-type -b test.html
, это возвратится inode/x-empty
.
Так, если Вы хотите, чтобы все программы действовали одинаково на Вашем файле, файл должен иметь соответствующий формат (данные) наряду с правильным номером.
Что такое магическое число?
Выполнение
xxd image | head -1
на моем аватаре создает вывод следующим образом:
00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR
Согласно Википедии,
89 50 4E 47 0D 0A 1A 0A
стандартный заголовок для всехimage/png
файлы.
Как файл управляет работой?
От file(1)
страница справочника:
Существует три набора тестов, выполненных в этом порядке: тесты файловой системы, волшебные тесты и тесты языка...
Тесты файловой системы основаны на исследовании возврата из a
stat(2)
системный вызов. Проверки программы, чтобы видеть, пуст ли файл, или если это - своего рода специальный файл...Волшебные тесты используются для проверки на файлы с данными в особенности фиксированных форматов.... Этим файлам сохранили 'магическое число' в конкретном месте около начала файла, который говорит операционной системе UNIX, что файл является двоичным исполняемым файлом, и который из нескольких типов этого.... Если файл не соответствует ни одной из записей в волшебном файле, он исследован, чтобы видеть, кажется ли это, текстовый файл...
Любой файл, который не может быть определен как записанный ни в одном из наборов символов, перечисленных..., как просто говорят, является 'данными'.
Как файл знает что волшебные шаблоны использовать?
Снова, от file(1)
страница справочника:
Информация, определяющая эти файлы, читается из скомпилированного волшебного файла
/usr/share/misc/magic.mgc
, или файлы в каталоге/usr/share/misc/magic
если скомпилированный файл не существует. Кроме того, если$HOME/.magic.mgc
или$HOME/.magic
существует, это будет использоваться в предпочтении к системным файлам волшебства. Если/etc/magic будет существовать, то он будет использоваться вместе с другими волшебными файлами.
Если я работаю strace file image |& grep magic
мы видим это file
команда ищет эти файлы:
/usr/lib/x86_64-linux-gnu/libmagic.so.1 => libmagic (3) ~/.magic.mgc
~/.magic
/etc/magic.mgc
/etc/magic
/usr/share/misc/magic.mgc
Существуют другие файлы как /etc/mime.types
который используют другие программы. Этот файл присваивает расширение типа пантомимы. Например, grep -i text/html /etc/mime.types
производит:
text/html html htm shtml