Perché / etc / fstab non utilizza XML o JSON?


22

Questo è più simile a una domanda generale su Linux / programmazione, ma sto programmando da un po 'e sono abituato a utilizzare un formato come XML o JSON su qualsiasi file utilizzato per scopi di configurazione.

Essendo nuovo di Linux, mi sono reso conto che il primo file di configurazione in cui mi sono imbattuto ( /etc/fstab) utilizza una sorta di formato tabella. Quindi perché non XML o JSON?


7
Cosa accadrebbe se, diciamo, avessimo una libreria di analisi XML dentro /usr/lib/libxml.soe /usrsu una partizione separata? Per analizzare il /etc/fstabsistema dovrebbe montare /usrz in order to load libxml , but to do so it would have to parse / etc / fstab` per sapere quale filesystem montare. Per evitare ciò, il parser XML dovrebbe probabilmente far parte del kernel che non sembra un'idea fantastica.
— el.pescado,

4
@ V0R73X, se ritieni che questa domanda sia una domanda Linux più generale, esiste un altro sito Stack chiamato UNIX & Linux Stack Exchangeunix.stackexchange.com. Entrambi probabilmente andrebbero bene, e qui ci sono già delle risposte, ma le gettiamo via per il futuro.
— trysis

8
XML e simili non sono sempre il formato migliore. Una tabella è una tabella e deve essere archiviata come tale. In effetti alcune persone pensano che XML non vada
— alfC

2
JSON non deve essere utilizzato per i file di configurazione. Non supporta i commenti, che sono essenziali per spiegare le opzioni di configurazione e per provare a commentare parti della configurazione.
— artbristol

2
XML è un formato di trasporto di documenti, non un formato di file di configurazione.
— Matthew Ife,

Risposte:


82

/etc/fstab è molto più vecchio di XML e JSON e dato che molti programmi lo usano, cambiare il suo formato sarebbe un incubo.

Inoltre, questo /etc/fstabdeve essere analizzato prima che esista un sistema funzionale in quanto viene utilizzato per montare tutti i file system essenziali. Quindi il formato di /etc/fstabdovrebbe essere il più semplice possibile in quanto il parser non dovrebbe dipendere da alcuna libreria esterna.

L'analisi di XML è piuttosto difficile e vuoi davvero evitarlo se non riesci a inoltrare su librerie esterne. JSON è un po 'più semplice ma ancora abbastanza difficile.

La semantica di /etc/fstabè abbastanza semplice, non include alcuna struttura di dati ad albero o altre cose fantasiose. Tutto ciò che serve sono i record costituiti da sei valori.

I valori separati da spazi bianchi sono abbastanza buoni per questo, e sono facili da analizzare anche se tutto ciò che hai sono le librerie C standard.

Quindi non c'è motivo di usare JSON, XML o qualcosa di simile.


i campi separati da bianco sono sufficienti per ciò che fstab deve fare. non voglio rendere le cose più complicate semplicemente per il gusto di farlo.
— Michael Martinez,

un CSV sarebbe ancora più semplice e facile
— Slitta

3
@ArtB perché pensi che cambiare il delimitatore cambierebbe la complessità dell'analisi del file?
— Dan Neely,

A seconda delle regole per la quotazione, l'escaping ecc. CSV potrebbe essere un po 'più semplice da analizzare in quanto il delimitatore è sempre un carattere invece del delimitatore a lunghezza variabile attualmente utilizzato. Ma il formato attuale consente una migliore leggibilità umana, che è anche un valore importante.
— Florian Diesch,

32

Dovresti davvero leggere The Art of Unix Programming di Eric Raymond qualche volta. Sembra che tu stia assumendo il presupposto che i progettisti di Unix avrebbero usato XML per /etc/fstabse ne avessero saputo. Al contrario, sebbene XML non fosse stato inventato in modo specifico, erano abbastanza consapevoli dei suoi predecessori simili e li respinsero deliberatamente per file di configurazione come /etc/fstab.

Citando dalla sua sottosezione su XML :

XML è adatto per formati di dati complessi (il genere di cose per cui la tradizione Unix della vecchia scuola userebbe un formato di stanza simile a RFC-822) sebbene eccessivo per quelli più semplici. È particolarmente appropriato per i formati che hanno una struttura nidificata o ricorsiva complessa del tipo che il metformato RFC 822 non gestisce bene.

e più in basso:

Il problema più serio con XML è che non gioca bene con gli strumenti Unix tradizionali. Il software che vuole leggere un formato XML necessita di un parser XML; questo significa programmi ingombranti e complicati. Inoltre, XML è di per sé piuttosto voluminoso; può essere difficile vedere i dati tra tutti i markup.

La filosofia Unix è quella di rendere la configurazione facilmente scrivibile e leggibile dall'uomo, ove possibile. Dovresti essere in grado di elaborare i file di configurazione con strumenti come awk, grep, sed, tr e cut e analizzarli facilmente in linguaggi di scripting senza librerie ingombranti. Questa è una grande ragione del successo di Unix e non va sottovalutata.

Sebbene Eric Raymond elogia XML per la sua capacità di gestire "formati che hanno una struttura complessa nidificata o ricorsiva", /etc/fstabcertamente non ne ha bisogno, e per questo è stato scelto il formato di file più semplice possibile.

Quindi, sebbene XML abbia certamente i suoi usi, potresti considerare che alcuni dei programmatori più intelligenti del pianeta che hanno aperto la strada al campo potrebbero aver saputo cosa stavano facendo. Forse XML non è sempre la soluzione migliore per i tuoi file di configurazione.


18

Il motivo principale a cui posso pensare ora è:


4
Questa risposta non mostra in realtà che il fstabfile / formato sia vecchio quanto mount, cosa che sembra implicare solo. Secondo man fstab" L'antenato di questo formato di file fstab è apparso in 4.0BSD. " (La frase BSD è " Il formato di file fstab è apparso in 4.0BSD. "). 4.0BSD è stato rilasciato nel 1980 .
— Daniel Beck,

@DanielBeck Quindi, la mia ipotesi era fortunatamente vera, prima del 1985.
— Radu Rădeanu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.