Как Linux выбирает который приложение открыть файл?

Если /sys/block/xxx/ro 1, затем гарантии ядра, это только для чтения

$ sudo losetup /dev/loop0 a
$ sudo losetup -r /dev/loop1 b
$ cat /sys/block/loop0/ro
0
$ cat /sys/block/loop1/ro
1

Если это не, то ядро может позволить Вам попытаться записать на нем, но запись может быть заблокирована на более низком уровне.

Для CD/DVD можно узнать тип медиа (перезаписываемое, перезаписываемое, открытое заседание только для чтения...), с cdrdao disk-info.

Теперь устройство может быть перезаписываемо, но у Вас не может быть разрешения записи к файлу устройств, но это - другая история и может быть легко сверено [ -w "$dev" ]

39
08.08.2014, 00:48
6 ответов

Для работы с этими настройками по умолчанию могут использоваться различные механизмы. Однако, Другие ответы, как правило, сосредоточены на полнофункциональных средах рабочего стола, каждая из которых имеет свой собственный механизм. Однако, они не всегда устанавливаются на систему (я часто использую OpenBox), и в этом случае могут быть использованы такие инструменты, как xdg-open.

Цитируя Arch Wiki:

xdg-open - это не зависящий от рабочего стола инструмент для настройки пользовательских приложений по умолчанию. Многие приложения используют команду xdg-open внутренне.

На данный момент я использую Ubuntu (12.04) и xdg-open доступен. Однако, когда вы используете полное окружение рабочего стола, такое как GNOME, xdg-open действует как простой пересылка, и перенаправляет запросы файлов в вашу DE, которая затем свободна обрабатывать их так, как она хочет (смотрите другие ответы для GNOME и Nautilus, например).

Внутри окружения рабочего стола (e. g. GNOME, KDE или Xfce), xdg-open просто передаёт аргументы в файл-открыватель этого окружения (gvfs-open, kde-open или exo-open, соответственно), что означает, что ассоциации оставлены до окружения рабочего стола.

... что возвращает вас к остальным ответам в этом случае. Тем не менее, так как это Unix & Linux, а не Ask Ubuntu:

Когда окружение рабочего стола не обнаружено (например, при запуске автономного оконного менеджера, например, Openbox), xdg-open будет использовать свои собственные файлы конфигурации.

В общем:

                            |-- no desktop env. > handle directly.
User Request > xdg-open > --|
                            |-- desktop env.    > pass information to the DE.

Если в первом случае вам нужно будет напрямую xdg-open настроить , используя команду xdg-mime (которая также позволит вам увидеть, какое приложение должно обрабатывать какой файл). Во втором случае...

                        |-- GNOME? > gvfs-open handles the request.
                        |
Info. from xdg-open > --|-- KDE?   > kde-open handles the request.
                        |
                        |-- XFCE?  > exo-open handles the request.

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

.
36
27.01.2020, 19:35

Это сделано аналогично MS-Windows.

Это не сделано операционной системой. Это делает файловый менеджер, часть оконной системы. Обычно часть имени файла после последней точки . используется для выполнения команды Решение. Есть способ их задать в настройках, или при щелчке правой кнопкой мыши по файлу.

Так что файл не сообщает операционной системе, файл не активен, поэтому сам по себе ничего не может сделать, но файловый менеджер смотрит на имя файла, файловый менеджер также может заглянуть внутрь файла так же, как и утилита file.

.
4
27.01.2020, 19:35

Из записи wiki

графические интерфейсы на базе Linux, такие как KDE и GNOME, поддерживают MIME-тип. ассоциации. Например, MIME-тип текста/объявления будет иметь вид

Также, этот ответ содержит более подробную информацию.

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

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

Из ответа this я вижу информацию, приведенную ниже.

Файловый менеджер (Nautilus, по умолчанию) использует MIME-тип файла. чтобы определить, какой программой его открыть. Когда приложение устанавливается, он может указать, какие MIME типы он может открыть и команду использовать для открытия файлов в файле .desktop, который расположен в /пользователь/акционер/приложения. Это файл, используемый для меню, рабочего стола. ярлыки и т.д.

11
27.01.2020, 19:35

Как говорит @richard, это похоже на Windows. Общий файловый менеджер может сначала посмотреть на имя файла и попытаться распознать расширение файла, связанное с программой. Если это не удается, он может попытаться открыть файл и найти заголовок. Если вы попытаетесь прочитать нетекстовый файл (скажем, .jpeg), вы увидите строку данных, которая описывает файл. Например, это первая строка .jpeg, которая у меня лежала:

'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x00\x00\xff\xfe\x00;CREATOR: gd-jpeg v1.0 (с использованием IJG JPEG v80), качество = 90'.

3
27.01.2020, 19:35

Файл не сообщает операционной системе о своем формате файла, за одним исключением:

Если исполняемый файл начинается с так называемой shebang-строки, например

#! /usr/bin/perl

то в этой строке ядро Linux должно быть запущено с /usr/bin/perl (т.е. вместо выполнения этого файла он должен выполнить usr/bin/perl и привести этот файл в качестве аргумента). Это, конечно, работает только с теми форматами файлов, которые игнорируют (или понимают) такую шебанговую строку.

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

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

Обычно механизм состоит из двух шагов:

  • Во-первых, по имени файла или предоставленной информации определите MIME-тип файла (MIME-тип - это стандартизированный, но расширяемый список типов файлов)
  • Во-вторых, по MIME-типу определите, какую программу нужно выполнить, обычно через своего рода реестр, поддерживаемый либо самой программой, либо окружением рабочего стола, для которого она была написана.
11
27.01.2020, 19:35

Я попытаюсь дать основной ответ относительно того, как системы Unix обрабатывают файлы. Как указывали другие, ваша формулировка вопроса вводит в заблуждение, поскольку сами файлы не сообщают, какого они типа, а само ядро ​​не решает, какие приложения использовать.

В операционных системах Unix и Windows файлы структурированы просто как последовательность байтов. Из операционных систем Таненбаума , третье издание:

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

Вот почему в среде рабочего стола xdg-open используется для определения приложений по умолчанию для открытия определенных типов файлов.

В системе Unix файлы различаются между обычными файлами и специальными файлами . Обычный файл - это просто пользовательские данные, которые могут быть текстовым файлом (кодировка ASCII или Unicode) или двоичным (исполняемый код). Специальные файлы - это файлы, которые необходимы для работы ОС. К ним относятся каталоги, ссылки, каналы, сокеты и файлы устройств. ¹

По соглашению имена файлов содержат расширения, указывающие, к какому типу файлов они могут принадлежать, например * .c для исходного кода C, * .html для веб-страниц и т. д. Из Таненбаума:

В некоторых системах (например, UNIX) расширения файлов являются просто соглашениями и не поддерживаются операционной системой. Файл с именем file.txt может быть чем-то вроде текстового файла, но это имя больше напоминает владельцу, чем передает фактическую информацию компьютеру. С другой стороны, компилятор C может на самом деле настаивать на том, чтобы файлы, которые он компилирует, заканчивались на .c, и может отказаться компилировать их, если они этого не сделают.

Если файл сохранен или переименован без правильного расширения, он по-прежнему сохраняет тот же формат для этого типа файла. Вот как большинство файловых менеджеров решают, с какими приложениями открывать файлы, и почему без расширения пользователю будет предложено: «Выберите программу, которую вы хотите использовать для открытия этого файла:».

Наконец, переменные среды используются для определения общесистемных и пользовательских настроек. Например, переменная EDITOR используется, чтобы указать, какой текстовый редактор открывать при обработке текста, например. vim , nano и т. Д. Таким образом процессы узнают, какой редактор открыть, как при редактировании сообщения фиксации git . В противном случае вы правы, что должны указать, какое приложение использовать. Обратите внимание, что vim определяет типы файлов путем проверки расширений и проверки содержимого файлов, если установлен параметр filetype на , который затем применяет правильную подсветку синтаксиса, отступы и т. Д. ²

TL; DR

Таким образом, именно приложения уровня пользователя определяют, с какими программами открывать конкретный тип файла, а не сама ОС.

3
27.01.2020, 19:35

Теги

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