Як Linux обирає, яку програму відкрити файл?


38

Якщо файл повідомляє ОС його формат файлу, як ОС вибирає, яку програму відкрити за замовчуванням?

Чи в Асоціації зберігається асоціація в таблиці реєстру?

Як Linux обирає, яку програму відкрити файл?

Раніше я багато використовував Nautilus, але тепер переходжу до терміналу. Чи правда, що в терміналі нам завжди потрібно чітко вказати, яку програму відкрити файл? Чи належать настройки якої програми для відкриття файлу певного формату за замовчуванням належать файловому менеджеру (наприклад, Nautilus), і це не проблема, коли ми живемо в терміналах?


24
Linux - це лише ядро ​​ОС. Я думаю, тут ви маєте на увазі середовище робочого столу чи файловий менеджер . Мабуть, це буде інакше на ОС Android, ChromeOS, Linux (або не-Linux), на яких працює ОС KDE, Gnome, XFCE ... або інших)
Stéphane Chazelas

мабуть. Я не знаю, що робить цю роботу. Я використовую gnome, але також хотів би знати про загальне.
Тім

Потім з’ясуйте середовище ОС та робочий стіл та додаток. Як і nautilus в Ubuntu 12.04 з робочим столом "єдність".
Стефан Шазелас

(1) Я перебуваю під Ubuntu 12.04. Чи мій робочий стіл Gnome чи "Unity"? (2) Раніше я багато користувався Nautilus, але тепер переходжу до терміналу. Чи правда, що в терміналі нам завжди потрібно чітко вказати, яку програму відкрити файл? Чи належать настройки якої програми для відкриття файлу певного формату за замовчуванням належать файловому менеджеру (наприклад, Nautilus), і це не проблема, коли ми живемо в терміналах?
Тім

Відповіді:


35

Можливо, існують різні механізми обробки цих параметрів за замовчуванням. Однак інші відповіді, як правило, зосереджуються на повному середовищі робочого столу, кожен з яких має свій механізм. Тим не менш, вони не завжди встановлюються в системі (я багато використовую OpenBox), і в цьому випадку xdg-openможуть використовуватися такі інструменти, як .

Цитуючи Arch Wiki :

xdg-open - це незалежний від настільних інструментів для налаштування програм за замовчуванням користувача. Багато додатків викликають команду xdg-open внутрішньо.

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

Всередині робочого середовища (наприклад, 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може бути перенаправлена ​​на відповідний інструмент конфігурації у вашому оточенні.


11
В ідеальному світі Gnome та KDE використовуватимуть параметри xdg, щоб вибрати додаток для відкриття файлу, а також нададуть інтерфейси для зміни параметрів xdg. Тоді ми могли мати лише одну базу даних налаштувань, а не одну для кожного DE. На жаль, xdg з'явився занадто пізно.
joeytwiddle

2
В ідеальному світі у вас не було б три DE.
Рассел Борогов

1
@RussellBorogove - тоді всі ми повинні перейти до Windows. Це ідеальний світ.
don_crissti

@don_crissti Я думаю, що це більше означалося як "ідеальний для розробника чи адміністратора". Незважаючи на те, що кінцевому користувачеві пропонувати різноманітність, справді було б набагато простіше (але не обов'язково «краще») дизайнерам зосередитися на єдиній системі. xdg-openє лише одним із цих компонентів, які намагаються звести обидва кінці.
Джон У. Сміт

1
@John - про адміністраторів та різних програм розробники / дизайнери: погоджено ... але тоді, верхні розробки можуть зробити лише стільки. В ідеальному світі, замість того, щоб скаржитися на те чи інше , ми всі зробили б внесок у такі проекти, як KDE, Gnome тощо, для поліпшення зручності використання та ітерапевтичної взаємодії між ДП. Якби ми всі (мільйони) доклали лише невеликих зусиль, усі ці питання були б вирішені за кілька днів.
don_crissti

11

З вікі- запису,

Графічні інтерфейси на базі Linux, такі як KDE та GNOME, підтримують об'єднання на основі MIME. Наприклад, текст / звичайний текст MIME буде пов'язаний з текстовим редактором.

Крім того , цей відповідь має більше деталей.

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

Тип файлу не зберігається як метадані у загальних файлових системах Linux.

З цієї відповіді я бачу нижню інформацію.

Файловий менеджер (Nautilus, за замовчуванням) використовує тип файлу MIME, щоб визначити, з якою програмою відкрити його. Коли програма встановлена, вона може вказати, які типи MIME він може відкрити, і команду, яку слід відкрити для файлів у файлі .desktop, який розміщується в / usr / share / застосунках. Це файл, який використовується для меню, ярликів робочого столу тощо.


1
Моє запитання "задано тип формату файлу", визначає, яку програму відкрити файл.
Тім

11

Файл не вказує ОС його формат файлу, за винятком одного:

Якщо виконуваний файл починається з так званої лінії shebang, наприклад

#! /usr/bin/perl

потім цей рядок повідомляє ядро ​​Linux, що його слід починати /usr/bin/perl(тобто замість виконання цього файлу він повинен виконати usr/bin/perlі надати цей файл як аргумент). Звичайно, це працює лише з форматами файлів, які ігнорують (або розуміють) таку лінію шебангу.

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

Зазвичай ці механізми розглядають лише ім'я файлу, щоб визначити, який тип файлу; виняток становлять клієнти електронної пошти та веб-браузери, де зазвичай тип файлу явно задається сервером / зазначено в пошті.

Механізм, як правило, двоетапний:

  • Спочатку з імені файлу чи наданої інформації визначте тип файлу MIME (тип MIME - це стандартизований, але розширюваний список типів файлів).
  • По-друге, від типу MIME визначте, яку програму потрібно виконати, як правило, за допомогою реєстру, який підтримує сама програма або середовище робочого столу, для якого програма була написана.

Спасибі. Це правда, що в терміналі ми завжди повинні чітко вказувати, яку програму відкрити файл (крім сценарію з шебангом)? Чи належать установки якої програми для відкриття файлу певного формату за замовчуванням належать до файлового менеджера (наприклад, Nautilus), хоча це не проблема, коли ми живемо в терміналах?
Тім

Якщо ви хочете використовувати асоціації Gnome з командного рядка, ви можете використовувати команду gnome-open. Я впевнений, що для інших середовищ робочого столу є подібні інструменти командного рядка. Редагувати: Я лише зазначу, що Джон У. Сміт дає команду, незалежну від вашого робочого середовища.
celtschk

6
Виправлення : рядок shebang не є ядром; це повідомлення оболонці .
Казарк


2
Оскільки, схоже, посилання на фактичний код на цій пов’язаній сторінці зараз не працює, ось ще одна посилання на код ядра, що обробляє рядки shebang: lxr.free-electrons.com/source/fs/binfmt_script.c - звичайно, ви також можете просто встановіть джерела ядра самостійно і загляньте у файл.
celtschk

4

Робиться це аналогічно MS-Windows.

Це не робиться ОС. Це робиться менеджером файлів, що є частиною віконної системи. Зазвичай .для прийняття рішення використовується частина імені файлу після останньої крапки . Існує спосіб встановити їх у налаштуваннях або при натисканні правою кнопкою миші на файл.

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


Можливо, в Windows це не робиться менеджером файлів сам по собі. Будь-яка програма може зателефонувати shell32!ShellExecute(), і хоча shell32 є частиною Windows Shell, вона не є частиною Windows Explorer, яка є файловим менеджером за замовчуванням.
Руслан

3

Як говорить @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'


2
Деякі менеджери файлів аналізують вміст файлу перед розширенням імені файлу (можливо, вони навіть завжди ігнорують розширення, не впевнені). Наприклад, у Dolphin KDE, якщо у вас є зображення GIF, пов’язані з браузером, та PNG із переглядачем зображень, перейменування file.pngфайлу PNG file.gifвсе одно відкриє програму перегляду зображень. І якщо ви випорожните файл, він відкриється в текстовому редакторі.
Руслан

3

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

В операційних системах Unix та Windows файли структуруються просто як послідовність байтів. Третє видання з операційних систем Tanenbaum:

Фактично, операційна система не знає і не цікавить, що є у файлі. Все, що вона бачить, - це байти. Програми на рівні користувачів повинні нав'язувати будь-яке значення.

Ось чому в настільному середовищі xdg-openвикористовується для визначення програм за замовчуванням для відкриття конкретних типів файлів.

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

Це за умовою, що імена файлів містять розширення, щоб вказати, який тип файлу вони можуть бути, наприклад * .c для вихідного коду C, * .html для веб-сторінок тощо. З Tanenbaum:

У деяких системах (наприклад, UNIX) розширення файлів є лише умовами і не застосовуються операційною системою. Файл з назвою file.txt може бути текстовим файлом, але це ім’я більше нагадує власника, ніж передавати будь-яку фактичну інформацію на комп'ютер. З іншого боку, компілятор C може насправді наполягати на тому, що файли для компілювання закінчуються в .c, і він може відмовитись від їх компіляції, якщо вони цього не роблять.

Якщо файл зберігається чи перейменовується без належного розширення, він все одно зберігає той самий формат для цього типу файлу. Ось як більшість менеджерів файлів вирішують, з якими програмами відкривати файли, і чому без розширення більшість підкаже користувачеві "Виберіть програму, яку ви хочете використовувати для відкриття цього файлу:".

Нарешті, змінні середовища використовуються для визначення параметрів на загальному рівні системи та користувачів. Наприклад, змінний EDITORвикористовуються для вказівки текстового редактора , щоб відкрити при обробці тексту , наприклад vim, nanoі т.д. Це як процеси знати , який редактор відкривати, як при редагуванні gitповідомлення фіксації. В іншому випадку ви праві, що вам потрібно вказати, яку програму використовувати. Зауважте, що vimвиявляє типи файлів, перевіряючи розширення та перевіряючи вміст файлу, якщо встановлено filetype onналаштування, яке потім застосовує правильне виділення синтаксису, відступ тощо. ²

TL; DR

Підсумовуючи, саме програми на рівні користувача визначають, з якими програмами відкривати конкретний тип файлу, а не саму ОС.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.