Почему / etc / fstab не использует XML или JSON?

22

Это больше похоже на общий вопрос о Linux / программировании, но я некоторое время программировал, и я привык использовать такой формат, как XML или JSON, для любого файла, который используется для целей конфигурации.

Будучи новичком в Linux, я понял, что в первом конфигурационном файле, в который я наткнулся ( /etc/fstab), используется какой-то формат таблицы. Так почему бы не XML или JSON?

jzeus
источник
7
Что произойдет , если, скажем, у нас был XML парсинг библиотеку /usr/lib/libxml.soи /usrна отдельном разделе? Для разбора /etc/fstabсистемы потребуется смонтировать /usrz in order to load libxml , but to do so it would have to parse / etc / fstab`, чтобы узнать, какую файловую систему нужно смонтировать. Чтобы избежать этого, вероятно, XML-парсер должен быть частью ядра, что не звучит как фантастическая идея.
el.pescado
4
@ V0R73X, если вы считаете, что этот вопрос является более общим вопросом для Linux, существует другой сайт Stack, называемый UNIX & Linux Stack Exchangeunix.stackexchange.com. Оба, вероятно, будут в порядке, и здесь уже есть ответы, но просто выбрасываю их на будущее.
trysis
8
XML и тому подобное не всегда лучший формат. Таблица является таблицей и должна храниться как таковая. На самом деле, некоторые люди думают, что XML ни к чему не
годен
2
JSON не должен использоваться для файлов конфигурации. Он не поддерживает комментарии, которые необходимы для объяснения параметров конфигурации, а также для опробования, комментируя части конфигурации.
artbristol
2
XML - это транспортный формат документа, а не формат файла конфигурации.
Мэтью Ифе

Ответы:

82

/etc/fstab намного старше, чем XML и JSON, и так как многие программы используют его, изменение его формата было бы кошмаром.

Кроме того, это /etc/fstabнеобходимо проанализировать, прежде чем появится функциональная система, так как она используется для монтирования всех необходимых файловых систем. Следовательно, формат /etc/fstabдолжен быть настолько простым, насколько это возможно, так как парсер не должен зависеть от каких-либо внешних библиотек.

Синтаксический анализ XML довольно сложен, и вы действительно хотите его избежать, если не можете передавать внешние библиотеки. JSON немного проще, но все еще довольно сложен.

Семантика /etc/fstabдовольно проста, они не включают в себя древовидные структуры данных или любые другие причудливые вещи. Все, что вам нужно, это записи, состоящие из шести значений.

Значения, разделенные пробелами, достаточно хороши для этого, и их легко анализировать, даже если у вас есть только стандартные библиотеки языка Си.

Так что просто нет причин использовать JSON, XML или что-то подобное.

Флориан Диш
источник
поля, разделенные белым, достаточно для того, что нужно сделать fstab. не хочу усложнять жизнь просто ради этого.
Майкл Мартинес
CSV будет еще проще и проще
Сани
3
@ArtB, почему вы думаете, что изменение разделителя изменит сложность анализа файла?
Дэн Нили
В зависимости от правил цитирования, экранирования и т. Д. CSV может быть немного проще для анализа, поскольку разделитель всегда равен одному символу вместо используемого в настоящее время разделителя переменной длины. Но текущий формат обеспечивает лучшую читабельность для человека, что также является важной ценностью.
Флориан Диш
32

Вы должны действительно прочитать Эрика Реймонда Искусство программирования Unix - то. Похоже, вы предполагаете, что разработчики Unix использовали бы XML, /etc/fstabесли бы знали об этом. Напротив, хотя XML специально не был изобретен, они были в курсе его аналогичных предшественников и намеренно отклонили их для файлов конфигурации, таких как /etc/fstab.

Цитата из его подраздела по XML :

XML хорошо подходит для сложных форматов данных (таких вещей, для которых традиционная Unix-традиция использовала бы формат RFC-822-подобной строфы), хотя и излишня для более простых. Это особенно подходит для форматов, которые имеют сложную вложенную или рекурсивную структуру такого рода, с которой метаформат RFC 822 плохо справляется.

и дальше вниз:

Самая серьезная проблема с XML заключается в том, что он не очень хорошо работает с традиционными инструментами Unix. Программное обеспечение, которое хочет читать формат XML, нуждается в анализаторе XML; это означает громоздкие, сложные программы. Кроме того, XML сам по себе довольно громоздкий; может быть трудно увидеть данные среди всей разметки.

Философия Unix состоит в том, чтобы сделать конфигурацию легко написанной на скрипте и удобной для чтения человеком, где это возможно. Вы должны иметь возможность обрабатывать файлы конфигурации с помощью таких инструментов, как awk, grep, sed, tr и cut, и легко анализировать их на языках сценариев без громоздких библиотек. Это огромная причина успеха Unix, и ее нельзя недооценивать.

Хотя Эрик Рэймонд хвалит XML за его способность обрабатывать «форматы, которые имеют сложную вложенную или рекурсивную структуру», /etc/fstabконечно, в них нет необходимости, и поэтому для него был выбран самый простой из возможных форматов файлов.

Поэтому, хотя XML, безусловно, имеет свое применение, вы можете подумать, что некоторые из самых умных программистов на планете, которые первыми открыли поле, могли знать, что они делают. Возможно, XML не всегда лучше всего подходит для ваших собственных файлов конфигурации.

Карл Билефельдт
источник
18

Основная причина, по которой я могу думать сейчас:

Раду Рэдяну
источник
4
Этот ответ на самом деле не показывает, что fstabфайл / формат такой же старый, как mountвам кажется. Согласно man fstab: « Предок этого формата файлов fstab появился в 4.0BSD. » (BSD формулирует это как « Формат файлов fstab появился в 4.0BSD. »). 4.0BSD был выпущен в 1980 году .
Даниэль Бек,
@DanielBeck Итак, мое предположение, к счастью, было правдой до 1985 года.
Раду Радеану