Warum verwendet / etc / fstab kein XML oder JSON?

22

Dies ist eher eine allgemeine Linux- / Programmierfrage, aber ich programmiere schon seit einiger Zeit und bin es gewohnt, für jede Datei, die für Konfigurationszwecke verwendet wird, ein Format wie XML oder JSON zu verwenden.

Als Linux-Neuling stellte ich fest, dass die erste Konfigurationsdatei, in die ich stieß ( /etc/fstab), eine Art Tabellenformat verwendet. Warum also nicht XML oder JSON?

jzeus
quelle
7
Was würde passieren, wenn wir beispielsweise eine XML-Analysebibliothek in /usr/lib/libxml.sound /usrauf einer separaten Partition hätten? Um das /etc/fstabSystem zu analysieren , müsste /usrz in order to load libxml , but to do so it would have to parse / etc / fstab` gemountet werden, um zu wissen, welches Dateisystem gemountet werden soll. Um dies zu vermeiden, müsste der XML-Parser wahrscheinlich Teil des Kernels sein, was nicht nach einer fantastischen Idee klingt.
el.pescado
4
@ V0R73X, wenn Sie der Meinung sind, dass es sich bei dieser Frage um eine allgemeinere Linux-Frage handelt, gibt es eine andere Stack-Site namens UNIX & Linux Stack Exchangeunix.stackexchange.com. Beides wäre wahrscheinlich in Ordnung, und es gibt hier bereits Antworten, aber wirf es einfach für die Zukunft raus.
Trysis
8
XML und dergleichen ist nicht immer das bessere Format. Eine Tabelle ist eine Tabelle und sollte als solche gespeichert werden. Tatsächlich denken einige Leute, dass XML für nichts gut ist. Plus.google.com/+LinusTorvalds/posts/X2XVf9Q7MfV
alfC
2
JSON sollte nicht für Konfigurationsdateien verwendet werden. Es werden keine Kommentare unterstützt, die zum Erläutern der Konfigurationsoptionen und zum Ausprobieren von Teilen der Konfiguration erforderlich sind.
Artbristol
2
XML ist ein Dokumententransportformat, kein Konfigurationsdateiformat.
Matthew Ife

Antworten:

82

/etc/fstab ist viel älter als XML und JSON, und da es von vielen Programmen verwendet wird, wäre es ein Albtraum, das Format zu ändern.

Außerdem /etc/fstabmuss dies analysiert werden, bevor es ein funktionierendes System gibt, das zum Mounten aller wichtigen Dateisysteme verwendet wird. Daher sollte das Format von /etc/fstabso einfach wie möglich sein, da der Parser nicht von externen Bibliotheken abhängig sein sollte.

Das Parsen von XML ist ziemlich schwierig und Sie möchten es unbedingt vermeiden, wenn Sie keine externen Bibliotheken weitergeben können. JSON ist ein bisschen einfacher, aber immer noch ziemlich schwierig.

Die Semantik von /etc/fstabist recht einfach, sie enthält keine baumartigen Datenstrukturen oder andere ausgefallene Dinge. Alles, was Sie brauchen, sind Datensätze, die aus sechs Werten bestehen.

Durch Leerzeichen getrennte Werte sind dafür ausreichend und lassen sich auch dann leicht analysieren, wenn Sie lediglich die C-Standard-Bibliotheken verwenden.

Es gibt also keinen Grund, JSON, XML oder ähnliches zu verwenden.

Florian Diesch
quelle
Weiße Felder reichen aus, um die Aufgabe von fstab zu lösen. Ich möchte nicht einfach die Dinge komplizierter machen, um es zu tun.
Michael Martinez
eine CSV wäre noch einfacher und einfacher
Sled
3
@ArtB Warum ändert sich Ihrer Meinung nach die Komplexität beim Parsen der Datei, wenn Sie das Trennzeichen ändern?
Dan Neely
Abhängig von den Regeln für Anführungszeichen, Escapezeichen usw. ist CSV möglicherweise etwas einfacher zu analysieren, da das Trennzeichen immer ein Zeichen anstelle des aktuell verwendeten Trennzeichens mit variabler Länge ist. Das aktuelle Format ermöglicht jedoch eine bessere Lesbarkeit, was ebenfalls ein wichtiger Wert ist.
Florian Diesch
32

Sie sollten Eric Raymonds The Art of Unix Programming unbedingt einmal lesen . Sie scheinen davon auszugehen, dass die Unix-Designer XML verwendet hätten, /etc/fstabwenn sie davon gewusst hätten. Im Gegenteil, obwohl XML hatte speziell nicht erfunden worden, waren sie ganz bewusst seine ähnlichen Vorgänger und absichtlich abgelehnt sie für Konfigurationsdateien wie /etc/fstab.

Zitat aus seinem Unterabschnitt über XML :

XML eignet sich gut für komplexe Datenformate (die Art von Dingen, für die die Unix-Tradition der alten Schule ein RFC-822-ähnliches Zeilengruppenformat verwenden würde), wenn auch für einfachere überflüssig. Es ist besonders für Formate geeignet, die eine komplexe verschachtelte oder rekursive Struktur aufweisen, wie sie das RFC 822-Metaformat nicht gut verarbeitet.

und weiter unten:

Das schwerwiegendste Problem bei XML ist, dass es mit herkömmlichen Unix-Tools nicht gut funktioniert. Software, die ein XML-Format lesen möchte, benötigt einen XML-Parser. Dies bedeutet sperrige, komplizierte Programme. Außerdem ist XML selbst ziemlich umfangreich. Es kann schwierig sein, die Daten im gesamten Markup zu sehen.

Die Unix-Philosophie besteht darin, die Konfiguration, wo immer dies möglich ist, leicht skript- und lesbar zu machen. Sie sollten in der Lage sein, Konfigurationsdateien mit Tools wie awk, grep, sed, tr und cut zu verarbeiten und sie in Skriptsprachen ohne umfangreiche Bibliotheken zu analysieren. Dies ist ein großer Grund für den Erfolg von Unix und sollte nicht unterschätzt werden.

Obwohl Eric Raymond XML für seine Fähigkeit lobt, "Formate zu verarbeiten, die eine komplexe verschachtelte oder rekursive Struktur aufweisen", werden diese /etc/fstabsicherlich nicht benötigt, weshalb das einfachste mögliche Dateiformat dafür gewählt wurde.

Obwohl XML sicherlich seine Verwendung hat, sollten Sie in Betracht ziehen, dass einige der intelligentesten Programmierer der Welt, die Pionierarbeit geleistet haben, vielleicht gewusst haben, was sie taten. Möglicherweise ist XML nicht immer für Ihre eigenen Konfigurationsdateien geeignet.

Karl Bielefeldt
quelle
18

Der Hauptgrund, an den ich jetzt denken kann, ist:

Radu Rădeanu
quelle
4
Diese Antwort zeigt nicht wirklich, dass die fstabDatei / das Format so alt ist wie mount, was Sie nur andeuten. Laut man fstab" Der Vorfahr dieses fstab-Dateiformats ist in 4.0BSD erschienen. " (Die BSD-Formulierung lautet " Das fstab-Dateiformat ist in 4.0BSD erschienen. "). 4.0BSD wurde 1980 veröffentlicht .
Daniel Beck
@ DanielBeck Also, meine Vermutung war zum Glück wahr, vor 1985.
Radu Rădeanu