Что означает .d в именах каталогов?

118

Я знаю много каталогов с именем .d:

init.d
yum.repos.d
conf.d

Это значит каталог? Если да, то с чем это связано?

ОБНОВЛЕНИЕ: у меня было много интересных ответов о том, что .dозначает, но название моего вопроса не было правильно выбрано. Я изменил «значит» на «стоять».

greg0ire
источник
9
О происхождении .dсм. Комментарий msw по этому вопросу в Ask Ubuntu .
Жиль
@ Жиль, ха, я думал, что это было позже, чем System-V, но да, даже до сих пор нет смысла в «.d», он был просто выбран из того, что я могу сказать.
NJ
@Gilles: интересно, ответ, кажется, таков: объяснение потеряно ... согласно первому комментарию первого ответа в вашей ссылке
greg0ire
Не знаю , почему .dв init.d, но это , кажется , почти все пользовательские файлы конфигурации идут в .dкаталогах в RHEL / CentOS / Fedora.
LiuYan 研 研
@ Лю Ян - Действительно, я не мог объяснить это каким-либо образом, который можно было бы истолковать как последовательный.
Тим Пост

Ответы:

102

.dСуффикс здесь означает каталог. Конечно, это было бы ненужным , поскольку Unix не требует суффикса для обозначения типа файла , но в этом конкретном случае, что - то необходимо было неоднозначность команды ( /etc/init, /etc/rc0, /etc/rc1и так далее) и каталогов , которые они используют ( /etc/init.d, /etc/rc0.d, /etc/rc1.d,. ..)

Это соглашение было введено, по крайней мере, в Unix System V, но, возможно, ранее. initКоманда используется для размещения в , /etcно , как правило , в настоящее время /sbinна современных System V операционки.

Обратите внимание, что это соглашение было принято многими приложениями, переходящими из одного файла конфигурации файла в несколько файлов конфигурации, расположенных в одном каталоге, например: /etc/sudoers.d

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

jlliagre
источник
4
+1, я думаю, что вы правы, но никто до сих пор не дал никакой цитаты для его теории
greg0ire
Я думаю, это скорее соглашение, которое выросло на людях, чем действительный стандарт
Шадур
1
Когда вы выполняете lsкоманду (не ls -al) без использования --colorопции (явно указанной или LS_OPTIONSявляющейся частью переменной среды), наличие «.d» делает каталоги выделенными из списка. Вот почему я всегда думал, что это было сделано.
LawrenceC
^ colorне единственный или лучший способ визуально пометить каталоги. ls -Fсделаю это и еще много полезных вещей.
underscore_d
56

Выдержка из списка рассылки Debian (выделение добавлено):

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

Наиболее распространенным принятым соглашением было разрешить включение каталога, полного файлов конфигурации, когда все, что помещено в этот каталог, станет активным и частью этой конфигурации. Поскольку это соглашение стало более распространенным, этот каталог обычно назывался в честь файла конфигурации, который он заменял или дополнял. Но поскольку нельзя иметь каталог и файл с одинаковым именем, для различения требовался какой-то метод, поэтому .d был добавлен в конец имени файла конфигурации. Следовательно, файл конфигурации / etc / Muttrc был дополнен фрагментами в /etc/Muttrc.d, файл / etc / bash_completion дополнен файлом /etc/bash_completion.d/* и так далее. Иногда используются небольшие изменения в этом соглашении, такие как /etc/xinetd.d для дополнения /etc/xinetd.conf или / etc / apache2 / conf. d дополнить /etc/apache2/apache2.conf. Но это та же самая основная идея.

Обычно, когда вы видите это * .d соглашение, это означает, что «это каталог, содержащий кучу фрагментов конфигурации, которые будут объединены в конфигурацию для некоторого сервиса».


Для части 2, причина для «.d», моя лучшая догадка будет «распределена», как не в основном файле конфигурации, а в части конфигурации .

E-мужчина
источник
8
Удивительно ... Я бы подумал, что это говорит в пользу «каталога», что означает «это часть каталога конфигурации».
greg0ire
2
Это ясно делает. Почему кто-то прочитал бы это и пришел к выводу, что что- .dто еще значило за мной! Но этот источник показывает только обоснование Debian для использования в одном контексте соглашения, существовавшего с первых дней существования Unix. Я должен задаться вопросом, действительно ли этот сопровождающий Debian преднамеренно упрощал - или действительно думал, что Debian изобрел эту практику.
underscore_d
11

Если вы говорите о «.d» в конце имен каталогов, этот ответ правильный, это просто маркер для «каталогов».

Только не путайте его с «d» в имени и имени файла, например «syslogd», что означает « демон» . Компьютерный процесс работает в фоновом режиме.

родительский процесс демона часто (но не всегда) является процессом init (PID = 1). Процессы обычно становятся демонами, разветвляя дочерний процесс, а затем немедленно завершая его родительский процесс, в результате чего init принимает дочерний процесс. Это несколько упрощенное представление о процессе, поскольку обычно выполняются другие операции, такие как отделение процесса-демона от любого управляющего tty. Для этой цели в некоторых системах UNIX существуют удобные процедуры, такие как daemon (3).

человек, любящий учиться
источник
Не совсем, это имена каталогов.
Кит
@Keith: упс, я ошибочно думал, что он говорит о файлах, заканчивающихся на «d», например syslogd, не каталогах, заканчивающихся на «.d». Я скоро отредактирую.
Филомат
Это то, что я думал, но я вижу , что часто используется в каталогах конфигурации для программ , которые не демона, например sysctl.d, modprobe.d.. это будет неуместное использование?
Тим Пост
@Tim Post: см. Выше 2 комментария (и ответ Кита), я скоро отредактирую свой ответ.
Филомат
Отредактировано (15 часов)
Филомат
4

Это не означает, что каталоги сами по себе, в основном происходит то, что каталоги, которые заканчиваются .d(обратите внимание, что они обычно только когда-либо /etc), занимают части конфигурации.

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

Как пример для ням ...

Если я хочу начать использовать EPEL на своем RHEL5 или CentOS Box, я могу настроить новый репозиторий в /etc/yum.repos.dпапке (скажем /etc/yum.repos.d/epel.repo) или установить пакет epel-release, который автоматически создает файл, не изменяя конфигурацию по умолчанию и не вызывая конфликты файлов, которые не должно случиться

Что произойдет, так это то, что большинство программ прочитают свою конфигурацию по умолчанию ( /etc/yum.confнапример), а затем переберут свои .dпапки, включая фрагменты конфигурации, в работающую программу.

Надеюсь, это объясняет это для вас.

Нью-Джерси
источник
+1, это многое объясняет, но ... не выбор буквы "d".
greg0ire
1
Должно ли быть объяснение выбора? Это просто соглашение, которое развилось с течением времени, оно не (на первый взгляд) определено в FHS, но может быть включено в стандарт LSB. Крон был одним из первых, насколько я помню. (Изменить: на самом деле это было бы init)
Нью-Джерси
3

Точно так же, как файлы могут .extуказывать тип файла (обычно называемый «расширением»), каталоги иногда должны .dпоказывать, что это каталог, а не файл. Это его тип. lsВывод по умолчанию визуально не различает каталоги и файлы, так что .dэто просто старое соглашение, показывающее его тип (каталог) в таких списках.

Кит
источник
6
Кроме того, .dсуффикс предотвращает конфликты с файлом с аналогичным именем. Например, вы можете иметь файл конфигурации /etc/apt/sources.listи каталог файлов конфигурации /etc/apt/sources.list.d.
JMTD
2
^ Я бы даже сказал, что это не «дополнение», а сама причина конвенции. Unix / Linux никогда не был ценным в том, чтобы включать расширения для вещей, особенно в первые дни, поэтому я сомневаюсь, что это было распространено без веской причины.
underscore_d
2

В более общем смысле, каталоги .d (другой пример - /etc/httpd/conf.d, /etc/rc.d, / etc /) указывают, что содержащиеся в них файлы будут читаться и использоваться, часто для конфигурации, если они совпадают. данный шаблон и не требует явного добавления в какой-либо основной список.

Поэтому, если вы добавите файлы вида * .repo в /etc/yum.repos.d, yum будет использовать их при запуске, не добавляя их в список конфигураций /etc/yum.conf. Если вы добавите файлы вида * .conf в /etc/http/conf.d, они будут прочитаны Apache без необходимости явного добавления в /etc/httpd/conf/httpd.conf. Аналогично, chkconfig для файлов в /etc/init.d, cron заданий в /etc/cron.d.

Тим
источник
+1, но ... то же замечание, что и выше.
greg0ire
1
@greg: Из-за разнообразия способов сортировки ответов «выше» и «ниже» - плохие способы ссылаться на другие комментарии (комментарии к ним). Сорта «самый старый» и «самый новый» дают противоположные значения для таких описаний, основанных на позиции, и при сортировке по «голосам» относительная позиция двух ответов может со временем меняться.
Крис Джонсен
@Chris Johnsen: это то, что я понял, но слишком поздно. Я имел в виду мой комментарий к ответу Нью-Джерси.
greg0ire
1

Я думаю, но не может документально подтвердить, что .dуказывает на то, что каталог , связанный с д aemon.

Доказательства указывают на то, что это по крайней мере правдоподобно:

sudo find / -maxdepth 3 -name "*.d"

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

Деннис Уильямсон
источник
+1 за бред в конце, но я думаю, что это не очень подходит для yum.repos.d ...
greg0ire
</cobwebs>Я полагаю, что ответы, которые указывают, что цель состоит в том .d, чтобы избавиться от неоднозначности каталога от связанных и имеющих одинаковые имена файлов, являются правильными. Я проголосовал за E-man и jlliagre.
Деннис Уильямсон
Вопрос в том, что означает «.d», и я получил множество объяснений относительно причины, по которой существует этот «.d», но те немногие, кто дал ответ относительно значения, не цитировали ни одного источника. Personnaly, я думаю, это означает, что каталог.
greg0ire
1
yumэто более новое изобретение.
Деннис Уильямсон