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.