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


2

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

У світі ОС Windows файли пов'язані з додатком шляхом їх розширення. Наприклад, foo.txt може бути відкритий блокнотом (txt). І foo.xls буде відкрито за допомогою Excel (xls).

У Linux імена файлів не мали розширень (чи є вони зараз?), Тож як це знати, яку програму використовувати для відкриття файлу? Якби файл називався foo, і я двічі клацнув його, він фактично відкриється в правильній програмі. Як?


Спробуйте man 1 file.

2
Linux не має поняття асоціації файлів із програмами. Це особливість файлових менеджерів, і кожен може зробити це по-своєму.
Бармар

Відповіді:


3

Власне, сам Linux не дбає про типи файлів, його хвилює лише те, чи файл виконується чи ні, і це встановлюється властивостями файлу, а не вмістом. Однак fileтут може допомогти інструмент, який розповсюджується за допомогою Linux. fileпорівнює вміст файлу з базою даних та шукає відповідність. Різні формати файлів використовують магічні числа у своїх заголовках, наприклад, кожен файл JPEG починається з FFD8і закінчується FFD9. Ви можете пам’ятати, що старі виконувані файли DOS завжди починаються з цього MZ, що знову ж таки є магічним числом.


4

Більшість робочих столів Linux використовують xdg-openдля цього за кадром. Це запитує локальну xdg-mimeбазу даних XML, яка може ідентифікувати файли за їх розширеннями, як у Windows, або за допомогою магічних байтів у самих файлах, залежно від конфігурації.

Якщо ви хочете додати підтримку додаткових типів файлів, ви можете зробити це за допомогою xdg-mime. Ця сторінка документує свою XML-семантику.

В принципі, також можна використовувати mailcap для цього (з run-mailcap), який розглядає лише розширення, але я не бачив робочого середовища, яке це робить дуже давно.

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