Я спробую дати основну відповідь щодо того, як системи 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
Підсумовуючи, саме програми на рівні користувача визначають, з якими програмами відкривати конкретний тип файлу, а не саму ОС.