O que o .d representa nos nomes de diretório?

118

Conheço muitos diretórios com .d em seu nome:

init.d
yum.repos.d
conf.d

Isso significa diretório? Se sim, do que isso desambigua?

ATUALIZAÇÃO: Tive muitas respostas interessantes sobre o que .dsignifica, mas o título da minha pergunta não foi bem escolhido. Eu mudei "mean" para "stand for".

greg0ire
fonte
9
Para a origem de .d, consulte o comentário de msw sobre esta questão relacionada no Ask Ubuntu .
Gilles
@ Gilles, ha, eu estava pensando que era mais tarde que o System-V, mas sim, mesmo assim ainda não há significado para '.d', foi escolhido apenas pelo que posso dizer.
NJ
@Gilles: interessante, a resposta parece ser: a explicação foi perdido ... de acordo com o primeiro comentário da primeira resposta em seu link
greg0ire
Não sei por que .dno init.d, mas parece quase todos os arquivos de configuração personalizados ir para .ddiretórios no RHEL / CentOS / Fedora.
LiuYan # 21/07
@Liu Yan - Na verdade, eu não poderia explicar isso de nenhuma maneira que pudesse ser interpretada como consistente.
Tim Post

Respostas:

102

O .dsufixo aqui significa diretório. Claro, isso seria desnecessário como Unix não requer um sufixo para designar um tipo de arquivo, mas, nesse caso específico, algo era necessário para disambiguate os comandos ( /etc/init, /etc/rc0, /etc/rc1e assim por diante) e os diretórios que eles usam ( /etc/init.d, /etc/rc0.d, /etc/rc1.d,. ..)

Esta convenção foi introduzida pelo menos com o Unix System V, mas possivelmente anteriormente. O initcomando costumava estar localizado, /etcmas geralmente está agora nos /sbinsistemas operacionais modernos do System V.

Observe que esta convenção foi adotada por muitos aplicativos que se deslocam de um único arquivo de configuração de arquivo para vários arquivos de configuração localizados em um único diretório, por exemplo: /etc/sudoers.d

Aqui, novamente, o objetivo é evitar o conflito de nomes, não entre o arquivo executável e o arquivo de configuração, mas entre o antigo arquivo de configuração monolítico e o diretório que os contém.

jlliagre
fonte
4
+1, eu acho que você está certo, mas ninguém até agora tem dado qualquer cotação para a sua teoria
greg0ire
É mais de uma convenção que tipo de cresceu em pessoas do que uma norma explícita real, eu acho
Shadur
11
Quando você executa um lscomando (não ls -al) sem usar a --coloropção (especificada explicitamente ou parte da LS_OPTIONSvariável de ambiente), a opção ".d" destaca os diretórios da lista. É por isso que eu sempre pensei que estava feito.
LawrenceC
^ colornão é a única ou a melhor maneira de sinalizar visualmente diretórios. ls -Ffará isso e muitas outras coisas úteis.
Underscore_d
56

Trecho de uma lista de discussão Debian (ênfase adicionada):

Quando o empacotamento de distribuição se tornou cada vez mais comum, ficou claro que precisávamos de melhores maneiras de formar esses arquivos de configuração a partir de vários fragmentos, geralmente fornecidos por vários pacotes independentes. Cada pacote que precisa configurar algum serviço compartilhado deve poder gerenciar apenas sua configuração sem precisar editar um arquivo de configuração compartilhado usado por outros pacotes.

A convenção mais comum adotada foi permitir a inclusão de um diretório cheio de arquivos de configuração, onde qualquer coisa inserida nesse diretório se tornaria ativa e faria parte dessa configuração. À medida que essa convenção se generalizava, esse diretório geralmente era nomeado após o arquivo de configuração que estava substituindo ou aumentando. Mas como não se pode ter um diretório e um arquivo com o mesmo nome, foi necessário distinguir algum método, portanto, .d foi anexado ao final do nome do arquivo de configuração. Portanto, um arquivo de configuração / etc / Muttrc foi aumentado por fragmentos em /etc/Muttrc.d, / etc / bash_completion foi aumentado com /etc/bash_completion.d/* e assim por diante. Às vezes, pequenas variações nessa convenção são usadas, como /etc/xinetd.d para complementar /etc/xinetd.conf ou / etc / apache2 / conf. d para complementar o /etc/apache2/apache2.conf. Mas é a mesma ideia básica.

Geralmente, quando você vê essa convenção * .d, significa "este é um diretório que contém vários fragmentos de configuração que serão mesclados na configuração de algum serviço".


Para a parte 2, o motivo do ".d", meu melhor palpite seria "distribuído", como não faz parte do arquivo de configuração principal, mas ainda faz parte da configuração .

E-man
fonte
8
Surpreendente ... Eu teria pensado que isso falava a favor do "diretório", significando "esta é a parte do diretório da configuração".
greg0ire
2
Claramente faz. Por que alguém iria ler isso e concluir que o .dsignificado de qualquer outra coisa está além de mim! Mas essa fonte mostra apenas a lógica do Debian para, em um contexto, usar uma convenção existente desde os primeiros dias do Unix. Eu tenho que pensar se esse mantenedor do Debian estava deliberadamente simplificando - ou realmente pensou que o Debian inventou essa prática.
Underscore_d
11

Se você falar sobre ".d" no final dos nomes de diretório, esta resposta está correta, é apenas um marcador para "diretório".

Apenas não confunda com "d" no e de um nome de arquivo, como "syslogd", que significa daemon . Um processo de computador em execução em segundo plano.

o processo pai de um daemon é frequentemente (mas nem sempre) o processo init (PID = 1). Os processos geralmente se tornam daemons, criando um processo filho e forçando o processo pai a sair imediatamente, fazendo com que o init adote o processo filho. Essa é uma visão um pouco simplificada do processo, já que outras operações geralmente são executadas, como dissociar o processo daemon de qualquer controle tty. Rotinas de conveniência como o daemon (3) existem em alguns sistemas UNIX para esse fim.

Philomath
fonte
Na verdade, não, esses são nomes de diretório.
Keith
@ Keith: oops, pensei erroneamente que ele fala sobre arquivos que terminam com "d", como syslogddiretórios que não terminam com ".d". Vou editar em breve.
Philomath
Foi o que pensei, mas vejo que é usado frequentemente em diretórios de configuração para programas que não daemonizam, por exemplo sysctl.d, modprobe.d.. isso seria um uso inadequado?
Tim Post
@ Tim Post: veja os 2 comentários acima (e a resposta de Keith), em breve editarei minha resposta.
Philomath 21/07
Editado (15 chr)
Philomath
4

Isso não significa diretório propriamente dito, basicamente o que está acontecendo é que os diretórios que terminam em .d(observe que esses geralmente são apenas sempre /etc) recebem partes da configuração.

Isso foi desenvolvido para que as distribuições possam incluir padrões universais, por exemplo /etc/yum.conf, mas existe um método fácil de usar para usuários ou outros pacotes anexarem suas próprias configurações yum de uma maneira segura que não será substituída.

Como um exemplo para yum ...

Se eu quiser começar a usar o EPEL no meu RHEL5 ou CentOS Box, posso configurar um novo repositório na /etc/yum.repos.dpasta (por exemplo /etc/yum.repos.d/epel.repo) ou instalar o pacote epel-release que cria o arquivo automaticamente, sem modificar minha configuração padrão ou causar conflitos de arquivo que não precisa acontecer.

O que acontecerá é que a maioria dos programas lê sua configuração padrão ( /etc/yum.confpor exemplo) e depois itera sobre suas .dpastas, incluindo trechos de configuração no programa em execução.

Espero que isso explique para você.

NJ
fonte
+1, isso explica muito, mas ... não a escolha da letra 'd'.
greg0ire
11
Tem que haver uma explicação para a escolha? É apenas uma convenção que se desenvolveu ao longo do tempo, não é (de uma olhada rápida) definida na ESF, mas pode ser incluída no padrão LSB. Cron foi um dos primeiros, pelo que me lembro. (Edit: na verdade, teria sido init) #
1313 NJ NJ
3

Assim como os arquivos podem precisar .extespecificar que tipo de arquivo é (geralmente chamado de "extensão"), os diretórios às vezes precisam .dmostrar que é um diretório e não um arquivo. Esse é o seu tipo. A lssaída padrão não diferencia visualmente diretórios e arquivos; portanto, .dé apenas uma convenção antiga para mostrar seu tipo (diretório) nessas listagens.

Keith
fonte
6
Além disso, o .dsufixo evita colisões com um arquivo com o mesmo nome. Por exemplo, você pode ter um arquivo de configuração /etc/apt/sources.liste um diretório de arquivos de configuração /etc/apt/sources.list.d.
jmtd
2
^ Eu diria que isso não é uma "adição", mas a própria razão da convenção em primeiro lugar. O Unix / Linux nunca foi precioso em ter que incluir extensões nas coisas, especialmente nos primeiros dias, por isso duvido que este tenha sido usado sem uma boa razão.
underscore_d
2

De maneira mais geral, os diretórios .d (/etc/httpd/conf.d, /etc/rc.d, / etc / sendo outro exemplo) indicam que os arquivos contidos serão lidos e usados, geralmente para configuração, se corresponderem um determinado padrão e não exigem a inclusão explícita em alguma lista mestre.

Portanto, se você adicionar arquivos do formato * .repo ao /etc/yum.repos.d, o yum o utilizará durante a execução sem precisar adicioná-lo a uma lista de configurações /etc/yum.conf. Se você adicionar arquivos do formato * .conf ao /etc/http/conf.d, eles serão lidos pelo Apache sem precisar serem explicitamente adicionados ao /etc/httpd/conf/httpd.conf. Da mesma forma, chkconfig para arquivos em /etc/init.d, tarefas cron em /etc/cron.d.

Tim
fonte
+1, mas ... a mesma observação acima.
greg0ire
11
@greg: Devido à variedade de maneiras de classificar as respostas, “acima” e “abaixo” são más maneiras de se referir a (comentários sobre) outras respostas. As classificações 'mais antiga' e 'mais nova' produzem significados opostos para essas descrições baseadas em posições e, ao classificar por 'votos', a posição relativa de duas respostas pode mudar ao longo do tempo.
precisa
@ Chris Johnsen: é isso que eu percebi, mas tarde demais. Eu estava me referindo ao meu comentário sobre a resposta de NJ.
greg0ire
1

Eu acho, mas não pode documentar, que o .dindica que o diretório está associado a um d Aemon.

As evidências indicariam que isso é pelo menos plausível:

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

Em algum lugar nos recônditos profundos dos pedacinhos da história antiga do Unix ainda rondando no fundo da minha mente atrás das teias de aranha, isso me chama como a resposta correta. Acredito que pode ter ocorrido em uma época em que os primeiros mamíferos vagavam pela Terra antes que os dinossauros começassem a desaparecer e as manpáginas não só eram mantidas no sistema, mas também fisicamente nas prateleiras medidas pelo pé.

Dennis Williamson
fonte
+1 para o delírio no final, mas acho que isso não se encaixa bem com yum.repos.d ...
greg0ire
</cobwebs>Acredito que as respostas que indicam que o objetivo do .dé desambiguar o diretório dos arquivos relacionados e com nomes semelhantes são as corretas. Eu votei em E-man e jlliagre's.
Dennis Williamson
A pergunta é "o que significa '.d'" e recebi muitas explicações sobre a razão pela qual existe esse '.d', mas as poucas que deram uma resposta sobre o significado não citaram nenhuma fonte. Pessoalmente, acho que significa diretório.
greg0ire
11
yumé uma invenção mais recente.
Dennis Williamson