Jika suatu file memberitahukan format file kepada OS, bagaimana cara OS memilih aplikasi mana yang akan membukanya secara default?
Di Windows, apakah asosiasi disimpan di tabel registri?
Bagaimana Linux memilih aplikasi mana untuk membuka file?
Saya dulu sering menggunakan Nautilus, tapi sekarang saya ganti ke terminal. Benarkah di terminal, kita selalu harus secara eksplisit menentukan aplikasi mana yang membuka file? Apakah pengaturan aplikasi mana yang membuka file format tertentu secara default milik manajer file (misalnya Nautilus), dan itu tidak menjadi masalah ketika kita tinggal di terminal?
files
file-opening
Tim
sumber
sumber
Jawaban:
Mungkin ada mekanisme berbeda untuk menangani pengaturan default ini. Namun, jawaban lain cenderung berfokus pada lingkungan desktop yang lengkap, masing-masing dengan mekanisme sendiri. Namun, ini tidak selalu diinstal pada suatu sistem (saya sering menggunakan OpenBox), dan dalam hal ini, alat-alat seperti
xdg-open
dapat digunakan.Mengutip Wiki Lengkungan :
Saat ini, saya menggunakan Ubuntu (12,04) dan
xdg-open
tersedia. Namun, ketika Anda menggunakan lingkungan desktop yang lengkap seperti GNOME,xdg-open
bertindak sebagai penerusan sederhana, dan menyampaikan permintaan file ke DE Anda, yang kemudian bebas untuk menanganinya seperti yang diinginkan (lihat jawaban lain untuk GNOME dan Nautilus, misalnya) .... yang membawa Anda kembali ke jawaban lain dalam kasus itu. Tetap saja, karena ini adalah Unix & Linux, dan bukan Tanya Ubuntu:
Semua seutuhnya:
Jika kasus pertama, Anda harus mengkonfigurasi
xdg-open
secara langsung , menggunakanxdg-mime
perintah (yang juga akan memungkinkan Anda untuk melihat aplikasi mana yang seharusnya menangani file mana). Dalam kasus kedua ...... Anda harus mengonfigurasi pembuka file yang terkait dengan lingkungan desktop Anda. Dalam beberapa kasus, konfigurasi yang dilakukan
xdg-mime
dapat diarahkan ke alat konfigurasi yang tepat di lingkungan Anda.sumber
xdg-open
hanyalah salah satu dari komponen ini yang mencoba menyatukan kedua ujungnya.Dari entri wiki ,
Juga, jawaban ini memiliki lebih banyak detail.
Dari jawaban ini , saya melihat informasi di bawah ini.
sumber
File tidak memberi tahu OS format file-nya, dengan satu pengecualian:
Jika file yang dapat dieksekusi dimulai dengan apa yang disebut garis shebang, seperti
kemudian baris ini memberi tahu kernel Linux bahwa ia harus dimulai
/usr/bin/perl
(yaitu, alih-alih mengeksekusi file ini, ia harus mengeksekusiusr/bin/perl
dan memberikan file ini sebagai argumen). Ini tentu saja hanya berfungsi dengan format file yang mengabaikan (atau mengerti) garis shebang tersebut.Selain itu, sistem operasi tidak tahu apa-apa tentang tipe file. Namun banyak program yang memungkinkan membuka file lain memiliki mekanisme sendiri untuk memutuskan program mana yang akan digunakan untuk membuka file yang mana. Itu bisa berupa daftar di dalam program itu sendiri (Firefox misalnya menyimpan daftar seperti itu), atau program dapat mendelegasikannya ke lingkungan desktop (yang ada beberapa untuk Linux).
Biasanya, mekanisme itu hanya mempertimbangkan nama file untuk memutuskan jenis file apa; pengecualian adalah klien email dan browser web, di mana biasanya jenis file secara eksplisit diberikan oleh server / dinyatakan dalam surat.
Mekanisme biasanya dua langkah:
sumber
gnome-open
. Saya yakin ada alat baris perintah serupa untuk lingkungan desktop lainnya. Sunting: Saya hanya mencatat bahwa John WH Smith memberikan perintah yang independen dari lingkungan desktop Anda.Ini dilakukan mirip dengan MS-Windows.
Itu tidak dilakukan oleh OS. Ini dilakukan oleh manajer file, bagian dari sistem windowing. Biasanya bagian dari nama-file setelah titik terakhir
.
digunakan untuk membuat keputusan. Ada cara untuk mengaturnya di pengaturan, atau ketika Anda mengklik kanan pada file.Jadi file tidak memberi tahu OS, file tidak aktif sehingga tidak bisa melakukan apa-apa sendiri, tetapi manajer file melihat nama-file, manajer file juga bisa melihat ke dalam file seperti halnya
file
utilitas.sumber
shell32!ShellExecute()
, dan meskipun shell32 adalah bagian dari Windows Shell, itu bukan bagian dari Windows Explorer, yang merupakan satu file manager default.Seperti kata @richard, ini mirip dengan Windows. Manajer file generik dapat melihat nama file terlebih dahulu dan mencoba mengenali ekstensi file yang terkait dengan suatu program. Jika gagal, mungkin mencoba untuk membuka file dan mencari header. Jika Anda mencoba membaca file non-teks (katakanlah, .jpeg), Anda akan melihat serangkaian data yang menjelaskan file tersebut. Misalnya, ini adalah baris pertama dari .jpeg yang telah saya tempatkan:
'\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'
sumber
file.png
file PNG kefile.gif
masih akan membuka penampil gambar. Dan jika Anda mengosongkan file, itu akan terbuka di editor teks.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:
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:
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 misalnyavim
,nano
, dll Ini adalah bagaimana proses tahu mana editor untuk terbuka, seperti saat mengeditgit
pesan commit. Jika tidak, Anda benar bahwa Anda harus menentukan aplikasi mana yang akan digunakan. Perhatikan bahwavim
mendeteksi jenis file dengan memeriksa ekstensi dan memeriksa konten file, jika pengaturannyafiletype 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.
sumber