Если файл сообщает ОС свой формат файла, как ОС выбирает, какое приложение открыть по умолчанию?
В Windows хранится ли связь в таблице реестра?
Как Linux выбирает, какое приложение открыть файл?
Раньше я часто использовал Nautilus, но теперь перехожу на терминал. Правда ли, что в терминале мы всегда должны явно указывать, в каком приложении открывать файл? Принадлежат ли настройки какого приложения для открытия файла определенного формата по умолчанию файловому менеджеру (например, Nautilus), и это не проблема, когда мы живем в терминалах?
Ответы:
Могут быть разные механизмы для обработки этих настроек по умолчанию. Тем не менее, другие ответы, как правило, сосредоточены на полной среде рабочего стола, каждый из которых имеет свой собственный механизм. Тем не менее, они не всегда устанавливаются в системе (я часто использую OpenBox), и в этом случае
xdg-open
могут использоваться такие инструменты, как .Цитирую Arch Wiki :
На данный момент я использую Ubuntu (12.04) и
xdg-open
доступен. Однако, когда вы используете полную настольную среду, такую как GNOME,xdg-open
действует как простой сервер пересылки и передает запросы файлов вашему DE, который затем может обрабатывать его так, как хочет (см., Например, другие ответы для GNOME и Nautilus) ,... что возвращает вас к другим ответам в этом случае. Тем не менее, поскольку это Unix и Linux, а не Ask Ubuntu:
В конце концов:
В первом случае вам нужно будет выполнить настройку
xdg-open
напрямую , используяxdg-mime
команду (которая также позволит вам увидеть, какое приложение должно обрабатывать какой файл). Во втором случае ...... вам нужно настроить средство открытия файлов, связанное с вашей рабочей средой. В некоторых случаях выполненная конфигурация
xdg-mime
может быть перенаправлена на соответствующий инструмент конфигурации в вашей среде.источник
xdg-open
это только один из этих компонентов, которые пытаются объединить оба конца.Из вики ,
Кроме того, этот ответ имеет больше деталей.
Из этого ответа я вижу приведенную ниже информацию.
источник
Файл не сообщает ОС свой формат файла, за одним исключением:
Если исполняемый файл начинается с так называемой строки Шебанга, например
затем эта строка сообщает ядру Linux, что его следует запустить
/usr/bin/perl
(то есть вместо того, чтобы выполнять этот файл, он должен выполнятьсяusr/bin/perl
и давать этот файл в качестве аргумента). Это, конечно, работает только с форматами файлов, которые игнорируют (или понимают) такую строку.Кроме этого, операционная система как таковая ничего не знает о типах файлов. Однако многие программы, которые позволяют открывать другие файлы, имеют свой собственный механизм, чтобы решить, какую программу использовать для открытия какого файла. Это может быть список внутри самой программы (например, Firefox поддерживает такой список), или программа может делегировать его в среду рабочего стола (из которых есть несколько для Linux).
Обычно эти механизмы учитывают только имя файла, чтобы определить тип файла; Исключением являются почтовые клиенты и веб-браузеры, где обычно тип файла явно задается сервером / указывается в письме.
Механизм обычно двухступенчатый:
источник
gnome-open
. Я уверен, что есть аналогичные инструменты командной строки для других сред рабочего стола. Редактировать: я просто отмечаю, что Джон У. С. Смит дает команду, независимую от среды вашего рабочего стола.Это сделано аналогично MS-Windows.
Это не сделано ОС. Это делается файловым менеджером, частью системы управления окнами. Обычно часть имени файла после последней точки
.
используется для принятия решения. Есть способ установить их в настройках или при щелчке правой кнопкой мыши по файлу.Таким образом, файл не сообщает ОС, файл не активен, поэтому сам по себе ничего не может сделать, но файловый менеджер просматривает имя файла, файловый менеджер также может заглянуть внутрь файла, как это
file
делает утилита.источник
shell32!ShellExecute()
, и хотя shell32 является частью Windows Shell, он не является частью Windows Explorer, который является файловым менеджером по умолчанию.Как говорит @richard, это похоже на Windows. Универсальный файловый менеджер может сначала посмотреть на имя файла и попытаться распознать расширение файла, связанное с программой. Если это не удается, он может попытаться открыть файл и найти заголовок. Если вы попытаетесь прочитать нетекстовый файл (скажем, .jpeg), вы увидите строку данных, которая описывает файл. Например, это первая строка файла .jpeg, который у меня был:
'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xfe\x00;CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), quality = 90'
источник
file.png
файла PNG по-file.gif
прежнему будет открывать средство просмотра изображений. И если вы очистите файл, он откроется в текстовом редакторе.Я попытаюсь дать основной ответ относительно того, как системы Unix обрабатывают файлы. Как указывали другие, ваша формулировка вопроса вводит в заблуждение, поскольку сами файлы не сообщают, какого они типа, а само ядро не решает, какие приложения использовать.
В операционных системах Unix и Windows файлы структурированы просто как последовательность байтов. Из Операционных систем Таненбаума , третье издание:
Вот почему в среде рабочего стола
xdg-open
используется для определения приложений по умолчанию для открытия определенных типов файлов.В системе Unix файлы различаются между обычными и специальными файлами . Обычный файл - это просто пользовательские данные, которые могут быть либо текстовым файлом (кодировка ASCII или Unicode), либо двоичным (исполняемый код). Специальные файлы - это файлы, которые необходимы для работы ОС. К ним относятся каталоги, ссылки, каналы, сокеты и файлы устройств.¹
По соглашению имена файлов содержат расширения, указывающие, к какому типу файлов они могут относиться, например * .c для исходного кода C, * .html для веб-страниц и т. Д. От Tanenbaum:
Если файл сохранен или переименован без надлежащего расширения, он все равно сохраняет тот же формат для этого типа файла. Именно так большинство файловых менеджеров решают, с какими приложениями открывать файлы, и почему без расширения большинство будет предлагать пользователю «Выберите программу, которую вы хотите использовать для открытия этого файла:».
Наконец, переменные среды используются для определения общесистемных и пользовательских настроек. Например, переменная
EDITOR
используется для указания, какой текстовый редактор открывать при обработке текста, напримерvim
,nano
и т. Д. Таким образом, процессы знают, какой редактор открывать, например, при редактированииgit
сообщения фиксации. В противном случае вы правы, указав, какое приложение использовать. Обратите внимание, чтоvim
обнаруживает типы файлов путем проверки расширений и проверки содержимого файла, если установлен параметрfiletype on
, который затем применяет правильную подсветку синтаксиса, отступы и т. Д. ²TL; DR
Итак, приложения уровня пользователя определяют, с какими программами открывать файл определенного типа, а не саму ОС.
источник