Cercherò di dare una risposta di fondo su come i sistemi Unix gestiscono i file. Come altri hanno sottolineato, la tua formulazione della domanda è fuorviante poiché i file stessi non riportano che tipo sono e il kernel stesso non decide quali applicazioni usare.
Nei sistemi operativi Unix e Windows, i file sono strutturati semplicemente come una sequenza di byte. Dai sistemi operativi di Tanenbaum , terza edizione:
In effetti, il sistema operativo non sa o si preoccupa di cosa c'è nel file. Tutto ciò che vede sono byte. Qualsiasi significato deve essere imposto da programmi a livello di utente.
Ecco perché, in un ambiente desktop, xdg-open
viene utilizzato per determinare le applicazioni predefinite per l'apertura di tipi di file specifici.
Su un sistema Unix, i file sono differenziati tra file normali e file speciali . Un file normale è semplicemente un dato utente che può essere un file di testo (codifica ASCII o Unicode) o binario (codice eseguibile). I file speciali sono file essenziali per l'esecuzione del sistema operativo. Questi includono directory, collegamenti, pipe, socket e file di dispositivo.¹
È per convenzione che i nomi dei file contengono estensioni per indicare quale tipo di file potrebbero essere ad es. * .C per il codice sorgente C, * .html per le pagine Web, ecc. Da Tanenbaum:
In alcuni sistemi (ad es. UNIX), le estensioni dei file sono solo convenzioni e non sono applicate dal sistema operativo. Un file chiamato file.txt potrebbe essere una sorta di file di testo, ma quel nome è più un promemoria per il proprietario che per trasmettere qualsiasi informazione effettiva al computer. D'altra parte, un compilatore C può effettivamente insistere sul fatto che i file che devono essere compilati finiscono in .c, e può rifiutarsi di compilarli se non lo fanno.
Se un file viene salvato o rinominato senza l'estensione corretta, mantiene comunque lo stesso formato per quel tipo di file. Questo è il modo in cui la maggior parte dei file manager decide con quali applicazioni aprire i file e perché senza l'estensione più richiederà all'utente "Scegli il programma che desideri utilizzare per aprire questo file:".
Infine, le variabili di ambiente vengono utilizzate per definire le impostazioni a livello di sistema e a livello di utente. Ad esempio, la variabile EDITOR
viene utilizzata per specificare quale editor di testo aprire durante la gestione del testo vim
, ad es . nano
, Ecc. Ecco come i processi sanno quale editor aprire, come quando si modifica un git
messaggio di commit. Altrimenti, hai ragione a specificare quale applicazione utilizzare. Si noti che vim
rileva i tipi di file controllando le estensioni e controllando il contenuto del file, se l'impostazione filetype on
è impostata, che applica quindi l'evidenziazione della sintassi, il rientro, ecc. ² corretti
TL; DR
In breve, sono le applicazioni a livello di utente che determinano con quali programmi aprire un determinato tipo di file e non il sistema operativo stesso.