1. Краткое содержание
Мощность ОС Linux кроется в возможности гибко настраивать систему под наши потребности. Большинство дистрибутивов содержат продвинутые пользовательские интерфейсы для конфигурации системы, однако, по сути, они лишь редактируют текстовые файлы в различных системных папках. Понимая, как работают конфигурационные файлы, мы можем отказаться от этих интерфейсов и повысить свой уровень владения Linux.
Из этого руководства вы узнаете, где файлы конфигурации расположены и каковы их функции. Благодаря стандарту иерархии файловой системы (Filesystem Hierarchy Standard) папки и файлы, которые мы рассмотрим, сохраняют своё расположение даже в разных дистрибутивах.
Прим. переводчика:
Прежде чем двигаться дальше, следует разобраться, как устроена файловая система согласно стандарту FHS.
Все файлы и каталоги располагаются в корневой директории
«/»
. Даже если эти данные находятся на различных носителях, какие-то из этих каталогов присутствуют, а какие-то могут отсутствовать. В качестве примера можно привести каталоги, связанные с подсистемой X Window, когда каталогов может и не быть, если графическая подсистема не установлена. Однако, большинство каталогов присутствует на всех UNIX-подобных операционных системах и используется аналогичным образом. Раздел | Корневая директория, содержащая всю файловую иерархию |
---|---|
/bin/ | Утилиты, которые доступны всем пользователям, такие как cat, ls, cp и др. |
/boot/ | Загрузочные файлы (файлы загрузчика, ядро, initrd, System.map). Как правило, выносится на отдельный раздел. |
/dev/ | Файлы устройств. Файлы в данном каталоге обычно создаются драйверами (например, /dev/null, /dev/zero, /dev/sda1). |
/etc/ | Основной каталог конфигурационных файлов системы. |
/home/ | Домашние директории с пользовательскими данными. Могут быть на отдельном разделе либо монтироваться по nfs. |
/lib/ | Основные библиотеки, необходимые для работы программ из /bin/ и /sbin/. |
/media/ | Точки монтирования для сменных носителей, таких как CD-ROM, DVD-ROM, флеш-карты. |
/mnt/ | Используется для монтирования временных файловых систем. |
/opt/ | Дополнительное программное обеспечение. Сюда обычно устанавливаются различные компиляторы и пользовательское ПО, которое не требует соответствия FSHS |
/proc/ | Виртуальная файловая система, представляющая состояние ядра операционной системы и запущенных процессов в виде файлов. |
/root/ | Домашняя директория пользователя root. |
/sbin/ | Основные системные программы для администрирования и настройки системы (например, init, iptables, ifconfig). |
/srv/ | Данные, специфичные для окружения системы. |
/tmp/ | Временные файлы. |
/usr / | Вторичная иерархия для данных пользователя, содержит большинство пользовательских приложений и утилит. |
/usr/bin/ | Дополнительные программы для всех пользователей, не являющиеся необходимыми в однопользовательском режиме. При различных решениях может монтироваться отдельно. |
/usr/include/ | Стандартные заголовочные файлы. |
/usr/lib/ | Библиотеки для программ, находящихся в /usr/bin/ и /usr/sbin/. |
/usr/sbin/ | Дополнительные системные программы (такие как демоны различных сетевых сервисов). |
/usr/share/ | Архитектурно-независимые общие данные. |
/usr/src/ | Исходные коды ядра. |
/usr/local/ | Третичная иерархия для данных, специфичных для данного хоста. Обычно содержит такие поддиректории, как bin/, lib/, share/. |
/var/ | Изменяемые файлы, такие как файлы регистрации (log-файлы), временные почтовые файлы, файлы спулеров. |
/var/lock/ | Лок-файлы, указывающие на занятость некоторого ресурса. |
/var/log/ | Различные log-файлы. |
/var/mail/ | Почтовые ящики пользователей. |
/var/run/ | Информация о запущенных программах (в основном о демонах). |
/var/spool/ | Задачи, ожидающие обработки (например, очереди печати, непрочитанные или неотправленные письма). |
/var/tmp/ | Временные файлы, которые должны быть сохранены между перезагрузками. |
2. Глобальные файлы конфигурации
Глобальные файлы конфигурации определяют поведение системы в целом.
Как правило, они располагаются в корневом разделе диска (
/
), а доступ к ним требует прав суперпользователя.Справедливости ради, стоит заметить, что согласно стандарту FHS конфигурационные файлы не хранятся в корневой директории, она пустая и содержит в себе только папки.
2.1. /etc/
Большинство глобальных файлов конфигурации хранится в папке
/etc
.Папка
/etc/
больше походит на файловую систему с множеством подпапок, в которых размещены соответствующие конфигурационные файлы.Ниже приведён список наиболее полезных подпапок:
-
/etc/X11/
— конфигурационные файлыxorg
; -
/etc/cups/
— подпапка с конфигурационными данными сервера печати CUPS (Common UNIX Printing System); -
/etc/xdg/
— глобальные файлы конфигурации для приложений, придерживающихся стандартов freedesktop.org; -
/etc/ssh/
— используется для конфигурации поведения сервераOpenSSH
для всей системы; -
/etc/apparmor.d/
— содержит конфигурационные файлы для системы AppArmor; -
/etc/udev/
— настройки, относящиеся кudev
.
2.2. /etc/opt/
Папка
/etc/opt/
должна содержать глобальные файлы конфигурации приложений, установленных в /opt/
. Однако в Linux это требование не является обязательным. В результате бывает, что папка /opt/
полна установленных пользователем программ, а /etc/opt/
остаётся пустой.2.3. /etc/default/
Исторически конфигурационные файлы в папке
/etc/default/
содержали настройки сервисов/программ-демонов для их использования с системами инициализации, например upstart. Однако с появлением systemd
эта папка стала использоваться в основном для настроек приложений пользовательского пространства.Система не перезаписывает файлы в папке
/etc/default/
. А значит, как только мы настроили там поведение приложений, оно не изменится при обновлении системы.2.4. Важные глобальные файлы конфигурации
Вот несколько наиболее полезных глобальных файлов конфигурации:
-
/etc/resolv.conf
— в нём определяется, какой (какие) DNS-сервер(ы) использует система; -
/etc/bash.bashrc
— в нём задают команды для выполнения в момент запуска командной оболочкиbash
; -
/etc/profile
— интерактивная командная оболочка выполняет команды скрипта .profile при запуске; -
/etc/dhcp/dhclient.conf
— там хранятся сетевые данные, которые запрашивают DHCP-клиенты; -
/etc/fstab
— определяет, где будут смонтированы все доступные системе разделы диска; -
/etc/hostname
— задаёт имя хоста для машины; -
/etc/hosts
— файл, соединяющий IP-адреса с именами хостов; -
/etc/hosts.deny
— перечисленные в этом файле удалённые хосты лишены доступа к машине; -
/etc/mime.types
— содержит MIME-типы данных и соответствующие им расширения файлов; -
/etc/motd
— файл с текстом сообщения, которое выводится при входе пользователя в систему; -
/etc/timezone
— задаёт часовой пояс; -
/etc/sudoers
— файл sudoers контролирует привилегии, относящиеся к командеsudo
; -
/etc/httpd/conf
и/etc/httpd.conf.d
— конфигурация веб-сервера Apache; -
/etc/default/grub
— содержит конфигурацию, которую использует командаupdate-grub
для создания файла/boot/grub/grub.cfg
; -
/boot/grub/grub.cfg
— командаupdate-grub
генерирует этот файл автоматически в соответствии с настройками, заданными в файле/etc/default/grub
.
3. Пользовательская конфигурация
Файлы пользовательской конфигурации определяют поведение системы только для задающего настройки пользователя.
Эти файлы, как правило, расположены в домашней папке пользователя и не требуют прав суперпользователя для редактирования.
Следует иметь в виду, что пользовательские настройки всегда имеют более высокий приоритет, чем глобальные. Иными словами, приложение всегда будет придерживаться пользовательских настроек, если таковые есть.
В части пользовательских настроек приложения соответствуют одному из двух стандартов.
3.1. Традиционные файлы конфигурации
Как правило, если у приложения всего один файл конфигурации, его можно найти так:
/home/(username)/.(app_name{rc})
. Но если конфигурационных файлов больше, то они хранятся в папке /home/(username)/.(app_name)
.Наглядный пример такого приложения — редактор
vim
.3.2. Конфигурационные файлы, соответствующие стандарту XDG
Разработчики freedesktop.org решили, что старая система недостаточно упорядочена, и выработали базовую спецификацию каталогов XDG.
По стандарту XDG все файлы пользовательской конфигурации хранятся в папке
$XDG_CONFIG_HOME
(обычно в /home/(username)/.config
).Внутри
$XDG_CONFIG_HOME
каждое приложение создаёт свои подпапки для конфигурационных файлов.Базовой спецификации каталогов XDG теперь придерживаются редактор NeoVim и многие активно развивающиеся приложения. Для пользователей стандарт тоже удобен: одной резервной копии папки
$XDG_CONFIG_HOME
достаточно, чтобы сохранить все настройки.3.3. Важные файлы пользовательской конфигурации
Среди наиболее часто используемых файлов пользовательской конфигурации следует перечислить:
-
$HOME/.xinitrc
— в нём содержатся указания о запуске менеджера окон при работе с командойstartx
; -
$HOME/.vimrc
— конфигурация vim; -
$HOME/.bashrc
— скрипт, который выполняет командная оболочкаbash
, когда пользователь запускает командную оболочку без регистрации; -
$XDG_CONFIG_HOME/nvim/init.vim
— конфигурация редактора neovim; -
$HOME/.editor
— задаёт редактор по умолчанию для данного пользователя; -
$HOME/.gitconfig
— в файле указывается имя по умолчанию и адрес электронной почты для указания в коммитах Git; -
$HOME/.profile
— командная оболочка с регистрацией выполняет команды из скрипта .profile при запуске; -
$HOME/.ssh/config
— конфигурацияssh
для конкретного пользователя.
4. Заключение
В этой статье мы рассмотрели два типа конфигурационных файлов, которые используются в Linux, и узнали, где их найти.
Кроме того, заглянули в наиболее распространённые папки для хранения конфигурационных файлов и выяснили, как более старые и новые приложения работают с пользовательскими настройками.
Поскольку ОС Linux не налагает ограничений на эти конфигурационные файлы, их синтаксис может быть самым разным. Но если взять на себя труд и хоть немного в них разобраться, знание конфигурационных файлов освобождает от ограничений пользовательских интерфейсов, предназначенных для новичков.
НЛО прилетело и оставило здесь промокоды для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.
— 20% на выделенные серверы AMD Ryzen и Intel Core — HABRFIRSTDEDIC.
Комментарии (31)
Revertis
09.02.2022 13:18-3Похоже, что разработчики Линукс не знали куда складывать конфиги, и придумали папку
/etc
(etcetera - другое). И уже давно надо переименовать её например в/conf
.Andrusha
09.02.2022 14:15+7Это не разрабочики Линукса придумали, такие названия каталогов и иерархия ещё в UNIX'ах были.
Revertis
09.02.2022 14:20-6Значит надо кому-то всё-таки включить мозг и подумать.
unsignedchar
09.02.2022 15:16+7И сломать нафиг всю совместимость ;) Волшебная строчка /etc/ слишком много где вколочена.
mayorovp
09.02.2022 16:42+1Просто делается etc симлинком на conf и всё, пока не привыкнут и не переделают софт. Другое дело — нахрена оно нужно-то? Выучить что в etc лежат конфиги проще.
alexxz
09.02.2022 14:30+2Дискуссии на эту тему идут уже не один десяткок лет и есть очень много версий происходящего. Мне не попадалось ни одной достаточно надёжной версии... Как примеры:
https://unix.stackexchange.com/questions/5665/what-does-etc-stand-for
https://slashdot.org/story/07/03/03/028258/define---etcДаже ветераны линукса, работающие с ним с восьмидесятых годов объясняют как et cetera.
Я тоже склоняюсь к мысле что директория "прочее" сильно разрослась и стала местом для конфигов ибо в те времена конфигурируемый софт был больше редкостью, чем правилом. Больше полагались на пересборку программ.
Уверен что там есть какая-то реально увлекательная история на эту тему типа такой про различия /bin и /usr/bin
http://lists.busybox.net/pipermail/busybox/2010-December/074114.html
crlam0
10.02.2022 10:51+1ветераны линукса, работающие с ним с восьмидесятых годов
Крутые видимо дядьки если работали в восьмидесятых годах с системой, ядро которой было опубликовано только 25 августа 1991 :)
roqin
09.02.2022 15:43Сдаётся мне, что это было лет на двадцать раньше и это были вообще разработчики Юникса ????
sergq
09.02.2022 15:44-1А скажите человеку, далекому от программирования и прочего, для чего нужно именно править сами текстовые файлы и почему графический интерефейс это зло? Когда компьютеры были слабыми да, работа из командной строки и редактирование текста были оправданы и в этом было преимущество Линукс - скорость работы и работа на слабом железе. Но сейчас, когда даже самый слабый комп работает с ос вполне сносно и уже на офисные компьютеры ставят от 8 Гб оперативки почему нельзя использовать простой и интуитивный графический интерфейс (если он делает тоже самое), мне непонятно...
Un_ka
09.02.2022 16:38+2…для чего нужно именно править сами текстовые файлы…
Для ответа на ваш вопрос рассмотрим настройку программы μtorrent. Для того чтобы убрать рекламу нужно поменять значения нескольких пунктов настроек. В графическом интерфейсе прейдётся воспользоваться поиском по настройкам. При редактировании файла конфигурации консольным редактором тоже прейдётся воспользоваться поиском, но в отличие от графического интерфейса через консоль можно например создать резервную копию настроек, создать файл конфигурации скриптом и т.д. Также не мало важным фактором является то, что для программ не имеющих графический ининтерфейс: БД, демоны linux и т.д. не будет и графического интерфейса настроек.
…почему нельзя использовать простой и интуитивный графический интерфейс…
Если применительно только к конфигурационным файлам, то я считаю, что можно их парсить и показывать с помощью этакого "универсального редактора настроек" в более удобоваримом формате, особенно, когда большая часть файла — это пояснения к настройкам, которые можно показывать к каждому пункту по желанию. Это можно будет делать без потери обратной совместимости и с файлами на удаленных машинах.
unsignedchar
09.02.2022 17:48для чего нужно именно править сами текстовые файлы и почему графический интерефейс это зло
Текстовые файлы править просто. Выучил 1 редактор - и достаточно.
Графический интерфейс в каждой программе свой.
Это не хорошо и не плохо. Это особенность ;)
Tangeman
09.02.2022 19:22+4Если бы формат конфигурации у всех приложений был един — да, это было бы просто. Увы, форматов очень много, и не все они легко читаемы или интуитивны, без чтения документации не разобраться — попробуйте со знанием "одного редактора" сконфигурировать (к примеру) exim и rspamd — всё равно придётся изучать документацию и того и другого, дополнительно к редактору.
Про другие весьма недружелюбные форматы конфигурации (xml и даже json) я уже молчу — несмотря что они текстовые и как бы должны быть читаемы, они всё равно малопонятны человеку далёкому от администрирования или разработки.
Даже в традиционных .ini файлах (key=value) у разных приложений разная терминология, одно и то же ключевое словом может иметь разные (и не совсем интуитивные) значения, а то и вовсе быть аббревиатурой которую с лёта не понять.
Поэтому UI для конфигурации был и останется самым простым — для большинства пользователей, ибо большинство — ни разу не айтишники.
И нет, я не призываю избавиться от "тонкой" настройки в файлах — просто они нужны для профессионалов или как минимум продвинутых, но явно не для всех.
Arsmerk_true
09.02.2022 18:20ну исходя из практики - гораздо быстрее и удобнее работать с конфигурациями, целиком описанными в коде, чем докликивать до нужных настроек сквозь прихоти разрабов гуя или вообще натыкаться на их отсутствие.
dlinyj
09.02.2022 19:48В современных ОС есть куча графических интерфейсов для настроек, но потом они также правят текстовые файлы. Вот вы настраиваете винду, там правится реестр.
insecto
09.02.2022 20:50+1Можно, конечно использовать простой и интуитивный графический интерфейс, но для этого надо чтобы кто-то этот интерфейс для вас написал. То есть, должен быть человек, который: а) умеет создавать простые и интуитивные графические интерфейсы и б) которому это вообще надо. Найдётся ли такой человек для всех программ? Или хотя бы для тех программ которые вам нужны.
А текстовый редактор уже есть, он уже интуитивный, и более того, настроен конкретно под вашу интуицию.
express
10.02.2022 00:52С интуитивностью текстовых редакторов в линуксе можно поспорить (черт с ним, что какой-то фрик додумался до таких сочетаний клавиш vim, но кто решил это включать в дистрибутивы по умолчанию?).
Ну, и, предположим, текстовый редактор интуитивный, а вот сами файлы настроек - уже нет. Особенно, если строки настройки нет и её нужно дописать самому.
И вообще ткнуть какую-нибудь галочку с человеческим текстовым описанием (или даже с подсказкой при наведении) намного легче, чем искать файл конфигурации и потом подбирать что-то подходящее среди секций и коротеньких ключей, которые могут означать что угодно.
unsignedchar
10.02.2022 01:03В общем случае значительно проще сделать образцовый текстовый файл с комментариями в стихах, чем хорошее годное gui для настроек.
Ну и вся эта красота с настройками через gui нужна 1 раз ;). Программа настраивается , и больше в настройки заходить не нужно.
insecto
10.02.2022 07:00И вообще ткнуть какую-нибудь галочку с человеческим текстовым описанием (или даже с подсказкой при наведении) намного легче, чем искать файл конфигурации и потом подбирать что-то подходящее среди секций и коротеньких ключей, которые могут означать что угодно.
Ну это вы исходите из альтернативы, что если не текстовый редактор, то галочка. В реальности, как правило, или текстовый редактор или ничего, потому что писателя для этой галочки не нашлось, никто не оплатил эту работу, а бесплатно делать желающих не нашлось.
Andrusha
10.02.2022 17:26С интуитивностью текстовых редакторов в линуксе можно поспорить (черт с ним, что какой-то фрик додумался до таких сочетаний клавиш vim, но кто решил это включать в дистрибутивы по умолчанию?).
Это просто легаси такое, из эпохи медленных мониторов (а то и телетайпов вместо них) и нестандартизированных клавиатур :) Многим после изучения заходит, мне, например, понравилось. А в современные дистрибутивы входит также и nano с вполне привычной для большинства логикой работы и сочетаниями клавиш.
saboteur_kiev
10.02.2022 16:01+1Потому что после добавления в код новой опции, сделать для нее интерфейс - весьма проблематично.
Хранить опции в текстовом файле - проще и удобнее всего остального. А если они хранятся в текстовом файле, то и править их проще в текстовом файле.
Во-вторых, подавляющее большинство линукса в мире - это серверная ОС для блока, который стоит в стойке, у которого нет монитора, и зачастую графическая подсистема вообще не ставится. Зашел по ssh, поправил файл и все.
Текстовые файлы очень легко и удобно оркестрируются и кастомизируются.
Даже в браузерах огромное количество опций доступны не через удобные кнопочки. а просто все подряд в about:config, что почти текстовый редактор, но уже хуже чем текст, ибо ни коммент не добавить ни кастомизацию для типа поля легко не прикрутить.
почему нельзя использовать простой и интуитивный графический интерфейс (если он делает тоже самое)
Не тоже самое. Интерфейс дает доступ к опци, но само значение хранится не в интерфейсе, а где-то (когда программа остановлена). И скорее всего в текстовом файле. А если она уже хранится там,зачем прикручивать интерфейс, если текстовый файл и так можно отредактировать.
kovserg
10.02.2022 11:15А кто может просветить как устроена система ввода в linux.
А конкретнее переключение раскладок, особенно в современных дистрибутивах и почему её всё время ломают.
Jury_78
Нет ли что нибудь типа - man <как устроена файловая система> ?
Очень бы помогло.
13werwolf13
конечно есть, только почему-то не во всех дистрибутивах
очень рекомендую держать под рукой ссылочку на оффсайт, там ещё и обновления спецификации своевременно подвозят, можно забрать в виде pdf или html
Jury_78
Спасибо, но уж очень объемно. Мне как не профеcсионалу хотелось бы кратко и основные моменты.
oji
man 7 hier?
Jury_78
Похоже то что нужно, спасибо.