Dlaczego / etc / fstab nie używa XML ani JSON?

22

To jest bardziej ogólne pytanie o Linuksa / programowanie, ale programuję od jakiegoś czasu i jestem przyzwyczajony do używania formatu takiego jak XML lub JSON na dowolnym pliku używanym do celów konfiguracyjnych.

Będąc nowym użytkownikiem Linuksa, zdałem sobie sprawę, że pierwszy plik konfiguracyjny, na który wpadłem ( /etc/fstab), używa jakiegoś formatu tabeli. Dlaczego więc nie XML lub JSON?

Jzeus
źródło
7
Co by się stało, gdyby, powiedzmy, mieliśmy parsowania XML w bibliotece /usr/lib/libxml.soi /usrna osobnej partycji? W celu parsowania /etc/fstabsystem musiałby zamontować /usrz in order to load libxml , but to do so it would have to parse / etc / fstab` w celu ustalenia, który system plików należy zamontować. Aby tego uniknąć, parser XML prawdopodobnie musiałby być częścią jądra, co nie brzmi jak fantastyczny pomysł.
el.pescado
4
@ V0R73X, jeśli uważasz, że to pytanie jest bardziej ogólne UNIX & Linux Stack Exchange, pytasz o Linuksa, istnieje inna strona stosu o nazwie unix.stackexchange.com. Oba byłyby prawdopodobnie w porządku, a odpowiedzi już tu są, ale po prostu wyrzucamy je na przyszłość.
trysis
8
XML i tym podobne nie zawsze są lepszym formatem. Stół jest stołem i jako taki powinien być przechowywany. W rzeczywistości niektórzy ludzie myślą, że XML nie nadaje się do niczego plus.google.com/+LinusTorvalds/posts/X2XVf9Q7MfV
alfC
2
JSON nie powinien być używany do plików konfiguracyjnych. Nie obsługuje komentarzy, które są niezbędne do wyjaśnienia opcji konfiguracji i wypróbowania rzeczy poprzez komentowanie części konfiguracji.
artbristol
2
XML to format transportu dokumentu, a nie format pliku konfiguracyjnego.
Matthew Ife

Odpowiedzi:

82

/etc/fstab jest znacznie starszy niż XML i JSON, a ponieważ używa go całkiem sporo programów, zmiana jego formatu byłaby koszmarem.

Poza tym /etc/fstabnależy to przeanalizować, zanim powstanie funkcjonalny system, ponieważ jest używany do montowania wszystkich niezbędnych systemów plików. Dlatego format /etc/fstabpowinien być tak prosty, jak to możliwe, ponieważ parser nie powinien zależeć od żadnych zewnętrznych bibliotek.

Analiza XML jest dość trudna i naprawdę chcesz tego uniknąć, jeśli nie możesz polegać na zewnętrznych bibliotekach. JSON jest nieco łatwiejszy, ale wciąż dość trudny.

Semantyka /etc/fstabjest dość prosta, nie zawiera żadnych drzewiastych struktur danych ani żadnych innych wymyślnych rzeczy. Wszystko czego potrzebujesz to rekordy składające się z sześciu wartości.

Wartości rozdzielone spacjami są do tego wystarczające i można je łatwo przeanalizować, nawet jeśli wszystko, co masz, to biblioteki C w standardzie C.

Nie ma więc powodu, aby używać JSON, XML lub czegoś podobnego.

Florian Diesch
źródło
białe pola oddzielne są wystarczające do tego, co fstab musi zrobić. nie chcę komplikować rzeczy po prostu ze względu na robienie tego.
Michael Martinez,
CSV byłby jeszcze prostszy i łatwiejszy
Sled
3
@ ArtB, dlaczego według ciebie zmiana separatora zmieniłaby złożoność parsowania pliku?
Dan Neely,
W zależności od reguł cytowania, zmiany znaczenia itp. CSV może być nieco łatwiejszy do analizy, ponieważ separator ma zawsze jeden znak zamiast obecnie używanego separatora o zmiennej długości. Jednak obecny format pozwala na lepszą czytelność dla ludzi, co również jest ważną wartością.
Florian Diesch
32

Powinieneś naprawdę kiedyś przeczytać The Art of Unix Programming Erica Raymonda . Wydaje się, że przyjmujesz założenie, że projektanci Uniksa użyliby XML, /etc/fstabgdyby o tym wiedzieli. Wręcz przeciwnie, chociaż XML nie został specjalnie wynaleziony, byli dość świadomi jego podobnych poprzedników i celowo odrzucili je dla plików konfiguracyjnych takich jak /etc/fstab.

Cytując z jego podrozdziału na temat XML :

XML jest dobrze dostosowany do złożonych formatów danych (takich, w których oldschoolowa tradycja uniksowa używałaby formatu zwrotki podobnego do RFC-822), choć przesada w przypadku prostszych. Jest to szczególnie odpowiednie w przypadku formatów, które mają złożoną zagnieżdżoną lub rekurencyjną strukturę, której metaformat RFC 822 nie radzi sobie dobrze.

i dalej:

Najpoważniejszym problemem związanym z XML jest to, że nie działa on dobrze z tradycyjnymi narzędziami uniksowymi. Oprogramowanie, które chce czytać format XML, wymaga parsera XML; oznacza to nieporęczne, skomplikowane programy. Również sam XML jest dość nieporęczny; może być trudno zobaczyć dane pośród wszystkich znaczników.

Filozofia Uniksa polega na tym, aby konfiguracja była łatwa do pisania skryptami i czytelna dla człowieka, tam gdzie to możliwe. Powinieneś być w stanie przetwarzać pliki konfiguracyjne za pomocą narzędzi takich jak awk, grep, sed, tr i cut, a także łatwo parsować je w językach skryptowych bez dużych bibliotek. Jest to ogromny powód sukcesu Uniksa i nie należy go lekceważyć.

Chociaż Eric Raymond chwali XML za jego zdolność do obsługi „formatów o złożonej strukturze zagnieżdżonej lub rekurencyjnej”, z /etc/fstabpewnością nie ma takiej potrzeby, dlatego wybrano dla niego najprostszy możliwy format pliku.

Więc chociaż XML na pewno ma swoje zastosowania, możesz rozważyć, że niektórzy z najmądrzejszych programistów na świecie, którzy byli pionierami w tej dziedzinie, mogli wiedzieć, co robią. Być może XML nie zawsze najlepiej pasuje do twoich własnych plików konfiguracyjnych.

Karl Bielefeldt
źródło
18

Głównym powodem, dla którego mogę teraz myśleć, jest:

Radu Rădeanu
źródło
4
Ta odpowiedź nie pokazuje, że fstabplik / format jest tak stary, jak mountsię wydaje, co sugeruje. Według: man fstabPrzodek tego formatu pliku fstab pojawił się w 4.0BSD. ” (Fraza BSD brzmi:Format pliku fstab pojawił się w 4.0BSD. ”). 4.0BSD został wydany w 1980 roku .
Daniel Beck
@DanielBeck Tak więc moje przypuszczenie było na szczęście prawdziwe przed 1985 r.
Radu Rădeanu