конфигурация: почему не conf option = имя файла и значение conf = содержимое файла [закрыто]

Команды ls , stat или даже файл внутренне используют C stat () для сбора подробностей. Здесь определены структуры. Если вы проверите файлы статистики:

  • /usr/include/bits/stat.h
  • /usr/include/linux/stat.h

Определены следующие биты:

/* Encoding of the file mode.  */

#define __S_IFMT        0170000 /* These bits determine file type.  */

/* File types.  */
#define __S_IFDIR       0040000 /* Directory.  */
#define __S_IFCHR       0020000 /* Character device.  */
#define __S_IFBLK       0060000 /* Block device.  */
#define __S_IFREG       0100000 /* Regular file.  */
#define __S_IFIFO       0010000 /* FIFO.  */
#define __S_IFLNK       0120000 /* Symbolic link.  */
#define __S_IFSOCK      0140000 /* Socket.  */

the stat function will check the POSIX macros and compare to see if it is a regular file/ directory

#define S_ISLNK(m)      (((m) & S_IFMT) == S_IFLNK)
#define S_ISREG(m)      (((m) & S_IFMT) == S_IFREG)
#define S_ISDIR(m)      (((m) & S_IFMT) == S_IFDIR)
#define S_ISCHR(m)      (((m) & S_IFMT) == S_IFCHR)
#define S_ISBLK(m)      (((m) & S_IFMT) == S_IFBLK)
#define S_ISFIFO(m)     (((m) & S_IFMT) == S_IFIFO)
#define S_ISSOCK(m)     (((m) & S_IFMT) == S_IFSOCK)

Вот как st_mode получает эти значения S_IFDIR и S_IFREG .

К вашему сведению ... Теперь к одному главному вопросу о том, как inode идентифицируют тип файла:

Для файловой системы XFS структура данных inode разделена на 3 части:

  • di_core (96 байтов )
  • di_u вилка данных
  • di_a вилка расширенных атрибутов

Ядро содержит то, что представляет индексный дескриптор, данные статистики и информацию, описывающую вилки данных и атрибутов. Здесь тип файла контролируется di_core.di_mode (например, обычный файл, каталог, ссылка и т. Д.).

«Ответвление данных» di_u содержит обычные данные, относящиеся к индексному дескриптору.

«Ответвление атрибутов» di_a содержит расширенные атрибуты.

2
03.12.2016, 13:21
2 ответа

Здесь пара мыслей о том, почему файлы конфигурации не разбиваются, вариант за вариантом в такой формат, как:

config
    default
        key
        key
        ...
        key
    other
        key
        key
        ...

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

  1. По большому счету, большинство утилит UNIX / Linux работают с одним файлом за раз, построчно , а не с несколькими файлами. Почему? По множеству причин, но, похоже, это самый простой способ обработки ввода. Большинство файлов при просмотре через программный интерфейс представляют собой просто серию строк. Строки (некоторый текст, за которым следует \ n , перевод строки ASCII) на самом деле являются самой базовой единицей данных в большинстве приложений, а не файлами. В стороне: Учтите, что ваш терминал был разработан для печати на бумаге построчно по мере работы пользователя. Честно говоря, в современном tty мало что изменилось, поскольку он по-прежнему рассматривается как последовательный интерфейс.

  2. Рассмотрим ситуацию, когда существует множество вариантов конфигурации для сложной программы, такой как сервер сокетов или другой демон.Если программе придется открывать сотни файлов для поиска возможных производных от значений по умолчанию, это влечет за собой два штрафа: ограничение на количество дескрипторов открытого файла (легко обойти) и несколько системных вызовов для каждого файла. Системные вызовы могут складываться, потому что программа должна запрашивать у ядра помощь как при чтении, так и при открытии файлов.

  3. Обновление и редактирование файла, как правило, намного проще выполнить либо с помощью традиционных редакторов (из которых ed явный победитель: D), либо с такими утилитами, как sed и ] awk . Использовать традиционные инструменты редактирования для множества файловых параметров конфигурации было бы действительно неудобно. Кроме того, поиск по множеству параметров стал бы упражнением для оболочки пользователя, а не для редактора. Если бы большинство параметров конфигурации были просто простыми значениями, echo и некоторое перенаправление ввода-вывода оболочки были бы предпочтительным редактором (что, если я понимаю ваши предпочтения, могло бы быть не так уж и плохо).

  4. Комментарии. Файлы конфигурации могут содержать больше комментариев, чем вариантов, и мне действительно нравятся комментарии. Если бы файлы конфигурации были обменены на каталоги конфигурации, ребятам лучше было бы привыкнуть к созданию файлов README, а затем внезапно у нас появился неприятный строковый файл;)

В целом я бы сказал, что конфигурация на основе файлов - это просто в костях систем UNIX / Linux. Можно ли сделать иначе? Конечно. Текущая парадигма - лучший способ? Это может быть для систем UNIX / Linux, но не для другой среды, где каталоги заменяют файлы в качестве точки интерфейса с вводом.

0
27.01.2020, 22:44

Рассмотрим широко используемый текстовый редактор Vim. Vim имеет более 360 опций, плюс множество других функций, которые можно настраивать различными способами. Когда Vim запускается, он читает несколько файлов инициализации - общесистемный файл инициализации, один или два пользовательских файла инициализации, возможно, несколько других файлов, которые настраивают подсветку синтаксиса, меню и так далее. При предложенной вами настройке Vim должен будет найти (то есть попытаться открыть) более 360 общесистемных файлов настроек параметров, за которыми следуют 360 файлов настроек параметров для конкретного пользователя, и по-прежнему потребуется для чтения обычных файлов конфигурации, потому что Vim поддерживает сценарии, а наиболее интересные функции настраиваются с помощью языка сценариев. Попытка открыть сотни файлов только для того, чтобы запустить текстовый редактор, была бы неэффективной.

А теперь настоящие проблемы. Некоторым параметрам можно присвоить значения, зависящие от других параметров; в обычном файле конфигурации это просто - просто убедитесь, что вы установили их в правильном порядке. С вашей предложенной настройкой нет способа убедиться, что, например, опция «совместимый» установлена ​​перед «backspace».В обычном файле конфигурации пользователь может использовать язык сценариев для адаптации значений определенных параметров к операционной среде; это было бы неудобно делать в вашей настройке.

То, что вы описываете, на самом деле является реестром Windows. Есть причина, по которой реестр хранится как своего рода база данных, а не как огромное количество крошечных файлов.

0
27.01.2020, 22:44

Теги

Похожие вопросы