Linux config file format

Что такое файлы конфигурации и как вы можете их редактировать?

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

Эти текстовые файлы, что неудивительно, называются «конфигурационными файлами». Если вы хотите перейти от «пользователя» к «продвинутому пользователю», вам нужно знать, как их настроить.

Что такое файлы конфигурации?

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

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

как их файлы конфигурации).

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

Некоторые конфигурационные файлы структурированы в формате собственного дизайна разработчика. Другие используют широко известные стандарты, используемые для структурирования данных, такие как формат JSON (нотация объектов JavaScript), YAML (язык разметки YAML) или XML (расширяемый язык разметки). Некоторые программы загружают информацию, хранящуюся в их конфигурационных файлах, когда они запускаются, в то время как другие периодически проверяют, была ли она изменена.

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

или настроить веб-сервер

вам придется иметь с ними дело.

Хотя это не исключительно Linux. В зависимости от того, что вы делаете, вам, возможно, придется редактировать их в Windows или Mac OS X.

Как выглядят файлы конфигурации?

Теперь давайте взглянем на некоторые реальные конфигурационные файлы. Как мы упоминали ранее, они бывают разных форм и размеров. Один файл конфигурации, с которым вы почти наверняка знакомы, — это файл hosts, который используется в Windows, Mac и Linux для сопоставления IP-адресов с именами узлов вручную.

В Windows вы можете найти его под C: \ WINDOWS \ system32 \ Drivers \ Etc \ хостов. На Mac и Linux это будет в / и т.д. / хосты.

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

В Linux и Mac OS X некоторые программы требуют, чтобы пользователь сохранял файл конфигурации в домашнем каталоге с точкой в ​​начале имени файла. Эти конфигурационные файлы иногда имеют расширение .rc и в разговорной речи называются «точечные файлы».

Одна программа, которая следует этому конкретному соглашению, является текстовым редактором Vim

, В прошлом мы говорили о том, как настроить VIM, отредактировав его конфигурационный файл.

Файлы конфигурации даже используются в видеоиграх для определения и управления некоторыми действиями, такими как сопоставления клавиш. Приведенный ниже файл конфигурации взят из Black Mesa — фанатского ремейка оригинального Half Life.

Читайте также:  Установка linux с файлом подкачки

В оригинальной версии Deus Ex, выпущенной в 2000 году, пользователю фактически пришлось отредактировать файл конфигурации, чтобы включить читы!

Как редактировать файлы конфигурации

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

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

Пользователи Windows уже имеют предустановленный текстовый редактор. Я говорю о блокноте. Хотя стоит подчеркнуть, что для Windows доступно множество отличных сторонних текстовых редакторов, включая Notepad ++, Atom и Sublime Text Editor.

В Linux ближайшим аналогом Notepad является Gedit

, Вы также можете рассмотреть возможность использования текстового редактора командной строки, такого как Nano или Vim

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

На Mac OS X (или MacOS Sierra, скоро это станет известно

), есть несколько текстовых редакторов, которые поставляются предварительно установленными. Вы, вероятно, знакомы с TextMate. Он также включает ряд текстовых редакторов командной строки, таких как Vim и Nano.

Когда вы редактируете файл, важно убедиться, что вы соблюдаете его соглашения. Это можно решить, просто взглянув на это. Некоторые конфигурационные файлы, такие как файл hosts, объяснят вам эти соглашения. Другие заставят вас прочитать некоторую документацию или пару постов в блоге.

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

Что делать, если это не работает?

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

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

Исправить это легко. В Mac и Linux попробуйте повысить свои права с помощью команды sudo. Итак, если вы редактировали файл hosts, вы запустили бы:

В Windows щелкните правой кнопкой мыши Блокнот (или любой текстовый редактор, который вы используете) и выберите Запустить от имени администратора.

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

Хороший способ избежать проблем — сделать копию файла конфигурации, прежде чем вносить какие-либо изменения. Таким образом, если что-то пойдет не так, вы можете восстановить копию и начать заново!

Файлы конфигурации важны

Более того, они являются неотъемлемой частью использования Linux. Знание того, как правильно их редактировать, поможет вам бесконечно.

Есть ли какие-то другие важные навыки, которые, по вашему мнению, должны знать пользователи Linux для начинающих и для среднего уровня? Позвольте мне знать в комментариях ниже.

Источник

Конфигурационный файл

Все настраиваемые параметры Syslinux могут быть изменены с помощью файла syslinux.cfg , находящегося в корне загрузочного устройства.

Это текстовый файл в формате UNIX или DOS, содержащий одну или несколько из следующих строк (ключевые слова нечувствительны к регистру; слова набранные капслоком означают, что их надо писать точно так же, как они написаны здесь):

Начиная с версии 3.35, конфигурационный файл может быть также в директории /boot/syslinux или /syslinux (поиск выполняется именно в таком порядке.)
В этом случае имена файлов считаются от места расположения конфигурационного файла, если они не начинаются с \ или / .

Читайте также:  Windows 10 свойства принтера с правами администратора

Все опции ниже подходят для SYSLINUX, ISOLINUX, PXELINUX и EXTLINUX, если не указано иное; подробнее см. их документацию.

Вот пример пункта загрузки:

Компоненты конфигурационного файла

# comment

INCLUDE имя_файла

DEFAULT ядро параметры.

Устанавливает командную строку по-умолчанию. Если Syslinux загружается автоматически,
он будет работать как если бы строка после DEFAULT была введена в командную строку Syslinux.

Если конфигурационного файла нет или директива DEFAULT отсутствует,
DEFAULT становится «linux auto».

UI модуль параметры.

APPEND параметры.

LABEL

Если «имя» введено как имя ядра для загрузки, Syslinux запускает
указанный файл ядра с указанными параметрами в APPEND.
Если APPEND не указан, используется глобальный (при наличии).

Начиная с версии 3.62, количество LABEL не ограничено.

Обратите внимание, что LILO использует синтаксис:

. а Syslinux работает по-другому:

NB: «ядро» не обязательно ядляется ядром Linux; оно может быть
загрузочным сектором или даже файлом COMBOOT (см. ниже)

Начиная с версии 3.32 «имена» больше не переводятся в формат DOS (для SYSLINUX.)

Следующие команды могут быть использованы после директивы LABEL:

LINUX image
BOOT image
BSS image
PXE image
FDIMAGE image
COMBOOT image
COM32 image
CONFIG image

— Ядро Linux (по-умолчанию)
— Программа-загрузчик (bootstrap program) (.bs, .bin)
— файл BSS (.bss)
— PXE Network Bootstrap Program (.0)
— Несжатый образ дискеты (.img)
— программа COMBOOT (.com, .cbt)
— программа COM32 (.c32)
— другой конфигурационный файл

Использование этих директив вместо KERNEL устанавливает заданный тип файла, не взирая на имя файла.
CONFIG одначает перезапуск Syslinux с использование нового конфигурационного файла.

APPEND — Не добавлять опции. APPEND — с одним дефисом в качестве аргумента может быть использован для обхода глобального APPEND.

INITRD файл initrd

Начиная с версии 3.71, initrd может быть указан отдельной директивой
(INITRD) вместо части директивы APPEND;
INITRD также добавляет initrd=initrd_file к параметрам ядра.

Можно указать несколько имён файлов, разделив их запятыми.
В основном это полезно для initramfs, которая может
состоять из нескольких отдельных архивов cpio или cpio.gz .

IMPLICIT значение

ALLOWOPTIONS значение

TIMEOUT время

TOTALTIMEOUT время

Задаёт время ожидания пред автоматической загрузкой.
Не отменяется нажатием клавиши.
TIMEOUT и TOTALTIMEOUT могут быть использованы вместе, например:

ONTIMEOUT ядро параметры.

ONERROR ядро параметры.

Если ядро не найдено (файл не существует, или запуск запрещён)- выполнять указанную команду.
Несработавшая команда добавляется к параметрам ядра, т.е. Если в конфигурации указано:

ONERROR xyzzy plugh

. а пользователь ввёл:

. Syslinux выполнит следующую команду:

xyzzy plugh foo bar baz

CONSOLE значение

Если значение равно 0, консоль не будет отображаться. Если значение равно 1, то консоль будет видна (это по умолчанию)
У некоторых BIOSов случаются проблемы с отображением «Видео» консоли. Если такие проблемы возникнут, вы этой опцией сможете отключить показ консоли.

FONT имя_файла

KBDMAP имя_файла

DISPLAY имя_файла

SAY текст

PROMPT значение

NOESCAPE значение

NOCOMPLETE значение

Если значение = 1, Клавиша Tab не показывает возможных значений label в командной строке (boot:).

F5 имя_файла

Отображает указанный файл на экране, если нажать функциональную клавишу в командной строке.
Это можно использовать для вызова вспомогательной информации (опции загрузки ядра и.т.д)

Пустые и закоментированные строки (#) игнорируются.

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

Источник

Конфигурационные файлы. Библиотека libconfig

Введение

Как-то находясь в поиске как мне прикрутить конфигурационные ini файлы или json к моему сервачку перебирал варианты, но почему-то они были неудобны или слишком простые, или велосипеды. И хоть я люблю xml конфигурирование, но порою это чрезмерно огромные файлы и неудобно для небольшого количества настроек писать много текста. Раз задал другу вопрос по этой теме, он то мне и подкинул библиотеку. Напоминает она json в смеси с yaml.

Библиотека имеет два интерфейса: функциональный и объектный. Они очень похожи, так как объектный использует внутри функциональную реализацию, но имеют некоторые различия, рассмотренные в данном посте.

Настройка и подключение

Библиотека есть во многих репозиториях, поэтому установка простая:

В исходниках С++ подключается одним лишь инклудом:

Конфигурационный файл

Файл конфига представляет собой следующего вида структуру:

Основными видами записей в конфиге являются такие типы:

Элемент (Setting)

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

Группы (Groups)

Группы могут содержать любое число элементов, но каждый элемент должен содержать уникальный ключ в пределах группы. Записывается в фигурных скобках:

Массивы (Arrays)

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

Списки (Lists)

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

Целочисленые значения (Integers)

Записываются обычным нам десятичным способом (±0-9) или шестнадцатиричном виде (0xA-f). Но целочисленные значения ограничены диапазоном -2147483648..2147483647 (32bit), но если нужны большие диапазоны, то в конце добавляется ’L’.

Дробные числа с плавающей запятой (floats)

Записывается тоже привычным нам способом

Запись с экспонентой стандартная с ‘e’.

Булевые значения (Boolean)
Строки (Strings)

Записываются в двойных кавычках как .
Следующие варианты в итоге дадут то же значение строки:

Комментарии
Внешние подключения (Includes)

Это, в общем, самая вкусная вкусняшка.

С API

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

Описание использованых функций ниже

Небольшое описание функционала

config_t — тип файла конфигурации (это ещё не запись). Грубо говоря, основной контейнер.
config_setting_t — объект элемента конфигурации. В примере используется указатель, возвращаемый контейнером на искомый элемент.
int config_read_file(config_t * config, const char * filename) — функция читает конфигурационный файл filename в память и заполняет объект типа config_t. Можно не читать из файла, а сразу «скормить» строку в config_read_string() или отдать дескриптор файла в config_read()
int config_lookup_string (const config_t * config, const char * path, const char ** value) — ищет и возвращает значение в виде указателя на строку value, по заданному пути path внутри конфига config.
config_setting_t * config_lookup (const config_t * config, const char * path) — ищет запись внутри конфига по заданному внутреннему пути и возвращает её.
config_setting_t * config_setting_get_elem (const config_setting_t * setting, unsigned int index) — используется для массивов, списков чтобы возвращать из него элементы с таким-то номером по порядку
int config_setting_lookup_string (const config_setting_t * setting, const char * name, const char ** value) —
возвращает значение value дочернего элемента name относительно заданной записи setting
Когда же надо получить значение в конкретно заданной записи, то используются функции типа
int config_setting_get_int (const config_setting_t * setting)

C++ API

Тот же пример, но на С++. Полная документация на сайте

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

Заключение

Кроме считывания удобных конфигов, в API предоставлен так же функционал создания элементов конфига и его записи на носитель.

Всё в документации [en] на сайте библиотеки.

Примеры идут вместе с исходниками. Их можно скачать следующей командой в консоли:

или же из исходников по прямой ссылке.

Документация представлена в форматах HTML и PDF.
Лицензия GNU LGPL.

Источник

Читайте также:  Посмотреть разрешения пользователя linux
Оцените статью