Saya akan berusaha memberikan jawaban yang mendasari bagaimana sistem Unix menangani file. Seperti yang telah ditunjukkan orang lain, frasa pertanyaan Anda menyesatkan karena file-file itu sendiri tidak melaporkan jenisnya dan kernel itu sendiri tidak memutuskan aplikasi mana yang akan digunakan.
Dalam sistem operasi Unix dan Windows, file disusun hanya sebagai urutan byte. Dari Sistem Operasi Tanenbaum , edisi ketiga:
Akibatnya, sistem operasi tidak tahu atau peduli apa yang ada di file. Semua yang dilihatnya adalah byte. Makna apa pun harus dipaksakan oleh program tingkat pengguna.
Inilah sebabnya, di lingkungan desktop, xdg-open
digunakan untuk menentukan aplikasi default untuk membuka jenis file tertentu.
Pada sistem Unix, file dibedakan antara file biasa dan file khusus . File biasa hanyalah data pengguna yang bisa berupa file teks (ASCII atau Unicode encoding) atau biner (kode yang dapat dieksekusi). File khusus adalah file yang sangat penting untuk menjalankan OS. Ini termasuk direktori, tautan, pipa, soket, dan file perangkat. ¹
Hal ini dengan konvensi yang nama file mengandung ekstensi untuk menunjukkan apa jenis file mereka mungkin menjadi misalnya * c untuk C kode sumber, * .html untuk halaman web, dll Dari Tanenbaum:
Dalam beberapa sistem (misalnya, UNIX), ekstensi file hanya konvensi dan tidak diberlakukan oleh sistem operasi. File bernama file.txt mungkin semacam file teks, tetapi nama itu lebih untuk mengingatkan pemiliknya daripada menyampaikan informasi aktual apa pun ke komputer. Di sisi lain, kompiler C mungkin benar-benar bersikeras bahwa file itu untuk dikompilasi dan diakhiri dengan .c, dan ia mungkin menolak untuk mengkompilasinya jika tidak.
Jika file disimpan atau diganti namanya tanpa ekstensi yang tepat, itu masih mempertahankan format yang sama untuk jenis file itu. Ini adalah cara sebagian besar pengelola file memutuskan aplikasi apa yang akan dibuka file, dan mengapa tanpa ekstensi sebagian besar akan meminta pengguna dengan "Pilih program yang ingin Anda gunakan untuk membuka file ini:".
Terakhir, variabel lingkungan digunakan untuk mendefinisikan pengaturan tingkat sistem dan tingkat pengguna. Misalnya, variabel EDITOR
yang digunakan untuk menentukan editor teks untuk membuka saat menangani teks misalnya vim
, nano
, dll Ini adalah bagaimana proses tahu mana editor untuk terbuka, seperti saat mengedit git
pesan commit. Jika tidak, Anda benar bahwa Anda harus menentukan aplikasi mana yang akan digunakan. Perhatikan bahwa vim
mendeteksi jenis file dengan memeriksa ekstensi dan memeriksa konten file, jika pengaturannya filetype on
ditetapkan, yang kemudian menerapkan penyorotan sintaks yang benar, indentasi, dll. ²
TL; DR
Singkatnya, itu adalah aplikasi tingkat pengguna yang menentukan program mana untuk membuka jenis file tertentu, dan bukan OS itu sendiri.