image

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)


  1. Jury_78
    09.02.2022 11:55

    Нет ли что нибудь типа - man <как устроена файловая система> ?

    Очень бы помогло.


    1. 13werwolf13
      09.02.2022 11:59
      +1

      конечно есть, только почему-то не во всех дистрибутивах
      очень рекомендую держать под рукой ссылочку на оффсайт, там ещё и обновления спецификации своевременно подвозят, можно забрать в виде pdf или html


      1. Jury_78
        09.02.2022 12:44

        Спасибо, но уж очень объемно. Мне как не профеcсионалу хотелось бы кратко и основные моменты.


    1. oji
      09.02.2022 12:43
      +5

      man 7 hier?


      1. Jury_78
        09.02.2022 12:50
        +1

        Похоже то что нужно, спасибо.


  1. Revertis
    09.02.2022 13:18
    -3

    Похоже, что разработчики Линукс не знали куда складывать конфиги, и придумали папку /etc (etcetera - другое). И уже давно надо переименовать её например в /conf.


    1. Andrusha
      09.02.2022 14:15
      +7

      Это не разрабочики Линукса придумали, такие названия каталогов и иерархия ещё в UNIX'ах были.


      1. Revertis
        09.02.2022 14:20
        -6

        Значит надо кому-то всё-таки включить мозг и подумать.


        1. unsignedchar
          09.02.2022 15:16
          +7

          И сломать нафиг всю совместимость ;) Волшебная строчка /etc/ слишком много где вколочена.


          1. Revertis
            09.02.2022 15:35
            -3

            Да я знаю :)

            В идеале тогда можно полностью всё переделать сразу, и сделать отдельный дистрибутив.


            1. dlinyj
              09.02.2022 19:41
              +3

              Который будет вне стандарта и будет никому не нужен.


              1. Revertis
                09.02.2022 20:10
                -1

                Ну да, тот же Alpine прям сильно стандартный, или Guix.


                1. dlinyj
                  10.02.2022 00:46
                  +2

                  Узкозадачные дистры, которые нужны полутора калекам. Плюс, к ним требования высокая надёжность, а не совместимость, туда не так просто софт портируется.


          1. mayorovp
            09.02.2022 16:42
            +1

            Просто делается etc симлинком на conf и всё, пока не привыкнут и не переделают софт. Другое дело — нахрена оно нужно-то? Выучить что в etc лежат конфиги проще.


    1. 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


      1. crlam0
        10.02.2022 10:51
        +1

        ветераны линукса, работающие с ним с восьмидесятых годов

        Крутые видимо дядьки если работали в восьмидесятых годах с системой, ядро которой было опубликовано только 25 августа 1991 :)


        1. alexxz
          10.02.2022 12:50

          Ой, ну малость ошибся, конечно же - Unix откуда это всё и отнаследовалось.


    1. roqin
      09.02.2022 15:43

      Сдаётся мне, что это было лет на двадцать раньше и это были вообще разработчики Юникса ????


  1. sergq
    09.02.2022 15:44
    -1

    А скажите человеку, далекому от программирования и прочего, для чего нужно именно править сами текстовые файлы и почему графический интерефейс это зло? Когда компьютеры были слабыми да, работа из командной строки и редактирование текста были оправданы и в этом было преимущество Линукс - скорость работы и работа на слабом железе. Но сейчас, когда даже самый слабый комп работает с ос вполне сносно и уже на офисные компьютеры ставят от 8 Гб оперативки почему нельзя использовать простой и интуитивный графический интерфейс (если он делает тоже самое), мне непонятно...


    1. Un_ka
      09.02.2022 16:38
      +2

      …для чего нужно именно править сами текстовые файлы…

      Для ответа на ваш вопрос рассмотрим настройку программы μtorrent. Для того чтобы убрать рекламу нужно поменять значения нескольких пунктов настроек. В графическом интерфейсе прейдётся воспользоваться поиском по настройкам. При редактировании файла конфигурации консольным редактором тоже прейдётся воспользоваться поиском, но в отличие от графического интерфейса через консоль можно например создать резервную копию настроек, создать файл конфигурации скриптом и т.д. Также не мало важным фактором является то, что для программ не имеющих графический ининтерфейс: БД, демоны linux и т.д. не будет и графического интерфейса настроек.

      …почему нельзя использовать простой и интуитивный графический интерфейс…

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


    1. unsignedchar
      09.02.2022 17:48

      для чего нужно именно править сами текстовые файлы и почему графический интерефейс это зло

      Текстовые файлы править просто. Выучил 1 редактор - и достаточно.

      Графический интерфейс в каждой программе свой.

      Это не хорошо и не плохо. Это особенность ;)


      1. Tangeman
        09.02.2022 19:22
        +4

        Если бы формат конфигурации у всех приложений был един — да, это было бы просто. Увы, форматов очень много, и не все они легко читаемы или интуитивны, без чтения документации не разобраться — попробуйте со знанием "одного редактора" сконфигурировать (к примеру) exim и rspamd — всё равно придётся изучать документацию и того и другого, дополнительно к редактору.


        Про другие весьма недружелюбные форматы конфигурации (xml и даже json) я уже молчу — несмотря что они текстовые и как бы должны быть читаемы, они всё равно малопонятны человеку далёкому от администрирования или разработки.


        Даже в традиционных .ini файлах (key=value) у разных приложений разная терминология, одно и то же ключевое словом может иметь разные (и не совсем интуитивные) значения, а то и вовсе быть аббревиатурой которую с лёта не понять.


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


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


    1. Arsmerk_true
      09.02.2022 18:20

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


    1. dlinyj
      09.02.2022 19:48

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


    1. insecto
      09.02.2022 20:50
      +1

      Можно, конечно использовать простой и интуитивный графический интерфейс, но для этого надо чтобы кто-то этот интерфейс для вас написал. То есть, должен быть человек, который: а) умеет создавать простые и интуитивные графические интерфейсы и б) которому это вообще надо. Найдётся ли такой человек для всех программ? Или хотя бы для тех программ которые вам нужны.

      А текстовый редактор уже есть, он уже интуитивный, и более того, настроен конкретно под вашу интуицию.


      1. express
        10.02.2022 00:52

        С интуитивностью текстовых редакторов в линуксе можно поспорить (черт с ним, что какой-то фрик додумался до таких сочетаний клавиш vim, но кто решил это включать в дистрибутивы по умолчанию?).

        Ну, и, предположим, текстовый редактор интуитивный, а вот сами файлы настроек - уже нет. Особенно, если строки настройки нет и её нужно дописать самому.

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


        1. unsignedchar
          10.02.2022 01:03

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

          Ну и вся эта красота с настройками через gui нужна 1 раз ;). Программа настраивается , и больше в настройки заходить не нужно.


        1. insecto
          10.02.2022 07:00

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

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


        1. Andrusha
          10.02.2022 17:26

          С интуитивностью текстовых редакторов в линуксе можно поспорить (черт с ним, что какой-то фрик додумался до таких сочетаний клавиш vim, но кто решил это включать в дистрибутивы по умолчанию?).

          Это просто легаси такое, из эпохи медленных мониторов (а то и телетайпов вместо них) и нестандартизированных клавиатур :) Многим после изучения заходит, мне, например, понравилось. А в современные дистрибутивы входит также и nano с вполне привычной для большинства логикой работы и сочетаниями клавиш.


    1. saboteur_kiev
      10.02.2022 16:01
      +1

      1. Потому что после добавления в код новой опции, сделать для нее интерфейс - весьма проблематично.

      2. Хранить опции в текстовом файле - проще и удобнее всего остального. А если они хранятся в текстовом файле, то и править их проще в текстовом файле.

      3. Во-вторых, подавляющее большинство линукса в мире - это серверная ОС для блока, который стоит в стойке, у которого нет монитора, и зачастую графическая подсистема вообще не ставится. Зашел по ssh, поправил файл и все.

      4. Текстовые файлы очень легко и удобно оркестрируются и кастомизируются.

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

      почему нельзя использовать простой и интуитивный графический интерфейс (если он делает тоже самое)

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


  1. kovserg
    10.02.2022 11:15

    А кто может просветить как устроена система ввода в linux.
    А конкретнее переключение раскладок, особенно в современных дистрибутивах и почему её всё время ломают.