¿Qué significa el .d en los nombres de directorio?


118

Conozco muchos directorios con .d en su nombre:

init.d
yum.repos.d
conf.d

¿Significa directorio? En caso afirmativo, ¿de qué se desambigua esto?

ACTUALIZACIÓN: He tenido muchas respuestas interesantes sobre lo que .dsignifica, pero el título de mi pregunta no fue bien elegido. Cambié "mean" por "stand for".


99
Para conocer el origen de .d, vea el comentario de msw sobre esta pregunta relacionada en Ask Ubuntu .
Gilles

@Gilles, ja, estaba pensando que era posterior a System-V, pero sí, aun así no tiene sentido que '.d' haya sido elegido por lo que puedo decir.
NJ

@Gilles: interesante, la respuesta parece ser: la explicación se perdió ... según el primer comentario de la primera respuesta en su enlace
greg0ire

No sé por qué .den init.d, pero parece casi todos los archivos de configuración personalizados van a .ddirectorios en RHEL / CentOS / Fedora.
LiuYan 刘 研

@Liu Yan - De hecho, no podría explicarlo de ninguna manera que pueda interpretarse como consistente.
Tim Post

Respuestas:


102

El .dsufijo aquí significa directorio. Por supuesto, esto sería innecesario, ya que Unix no requiere un sufijo para denotar un tipo de archivo, pero en ese caso específico, algo que era necesario eliminar la ambigüedad de los comandos ( /etc/init, /etc/rc0, /etc/rc1etc.) y los directorios que utilizan ( /etc/init.d, /etc/rc0.d, /etc/rc1.d,. ..)

Esta convención se introdujo al menos con Unix System V pero posiblemente antes. El initcomando solía estar ubicado /etcpero generalmente ahora se encuentra en /sbinlos sistemas operativos modernos de System V.

Tenga en cuenta que esta convención ha sido adoptada por muchas aplicaciones que pasan de un único archivo de configuración de archivo a varios archivos de configuración ubicados en un solo directorio, por ejemplo: /etc/sudoers.d

Una vez más, el objetivo es evitar el choque de nombres, no entre el archivo ejecutable y el archivo de configuración, sino entre el archivo de configuración monolítico anterior y el directorio que los contiene.


44
+1, creo que tienes razón, pero hasta ahora nadie ha dado ninguna cita para su teoría
greg0ire

Creo que es más una convención que creció en las personas que un estándar explícito real
Shadur

1
Cuando ejecuta un lscomando (no ls -al) sin usar la --coloropción (ya sea explícitamente especificada o parte de LS_OPTIONSla variable de entorno), tener el ".d" hace que los directorios se destaquen de la lista. Por eso siempre pensé que estaba hecho.
LawrenceC

^ colorno es la única o la mejor manera de marcar visualmente los directorios. ls -Fhará eso y muchas cosas más útiles.
underscore_d

56

Extracto de una lista de correo de Debian (énfasis agregado):

Cuando el empaquetado de distribución se hizo cada vez más común, quedó claro que necesitábamos mejores formas de formar tales archivos de configuración a partir de múltiples fragmentos, a menudo proporcionados por múltiples paquetes independientes. Cada paquete que necesita configurar algún servicio compartido debe poder administrar solo su configuración sin tener que editar un archivo de configuración compartida utilizado por otros paquetes.

La convención más común adoptada fue permitir la inclusión de un directorio lleno de archivos de configuración, donde todo lo que se deja caer en ese directorio se volvería activo y parte de esa configuración. A medida que esa convención se generalizó, ese directorio usualmente recibió el nombre del archivo de configuración que estaba reemplazando o aumentando. Pero dado que uno no puede tener un directorio y un archivo con el mismo nombre, se requirió algún método para distinguir, por lo que .d se agregó al final del nombre del archivo de configuración. Por lo tanto, un archivo de configuración / etc / Muttrc se aumentó mediante fragmentos en /etc/Muttrc.d, / etc / bash_completion se aumentó con /etc/bash_completion.d/*, y así sucesivamente. A veces se utilizan ligeras variaciones en esa convención, como /etc/xinetd.d para complementar /etc/xinetd.conf, o / etc / apache2 / conf. d para complementar /etc/apache2/apache2.conf. Pero es la misma idea básica.

En general, cuando ve esa convención * .d, significa "este es un directorio que contiene un montón de fragmentos de configuración que se fusionarán en la configuración para algún servicio".


Para la parte 2, la razón de la ".d", mi mejor suposición sería "distribuida", ya que no forma parte del archivo de configuración principal, sino que es parte de la configuración .


8
Sorprendente ... hubiera pensado que esto hablaba a favor del "directorio", que significa "esta es la parte del directorio de la configuración".
greg0ire

2
Claramente lo hace. ¡Por qué alguien leería esto y concluiría que el .dsignificado de cualquier otra cosa está más allá de mí! Pero esta fuente solo muestra la lógica de Debian para, en un contexto, usar una convención que existía desde los primeros días de Unix. Tengo que preguntarme si este mantenedor de Debian estaba simplificando deliberadamente, o si realmente pensaba que Debian inventó esta práctica.
underscore_d

11

Si habla de ".d" al final de los nombres de directorio, esta respuesta es correcta, es solo un marcador para "directorio".

Simplemente no lo confunda con "d" en el nombre de un archivo, como "syslogd", que significa daemon . Un proceso informático que se ejecuta en segundo plano.

El proceso padre de un demonio es a menudo (pero no siempre) el proceso init (PID = 1). Los procesos generalmente se convierten en demonios al bifurcar un proceso hijo y luego hacer que su proceso padre salga inmediatamente, lo que hace que init adopte el proceso hijo. Esta es una vista algo simplificada del proceso ya que generalmente se realizan otras operaciones, como la disociación del proceso demonio de cualquier tty de control. Existen rutinas de conveniencia como daemon (3) en algunos sistemas UNIX para ese propósito.


En realidad no, estos son nombres de directorio.
Keith

@Keith: ¡Uy !, pensé erróneamente que habla de archivos que terminan en "d", como syslogddirectorios que terminan en ".d". Lo editaré pronto.
Philomath

Eso es lo que pensé, pero veo que se usa a menudo en directorios de configuración para programas que no demonizan, por ejemplo sysctl.d, modprobe.d¿sería un uso inapropiado?
Tim Post

@Tim Post: vea los 2 comentarios anteriores (y la respuesta de Keith), pronto editaré mi respuesta.
Philomath

Editado (15 chr)
Philomath

4

No significa directorio en sí, básicamente lo que está sucediendo es que los directorios que terminan en .d(tenga en cuenta que generalmente solo están en /etc), toman partes de configuración.

Esto está diseñado para que las distribuciones puedan incluir valores predeterminados universales, por ejemplo /etc/yum.conf, pero luego hay un método fácil de usar para que los usuarios u otros paquetes agreguen sus propias configuraciones yum de una manera segura que no se sobrescribirá.

Como ejemplo para mmm ...

Si quisiera comenzar a usar EPEL en mi RHEL5 o CentOS Box, puedo configurar un nuevo repositorio en la /etc/yum.repos.dcarpeta, (digamos /etc/yum.repos.d/epel.repo) o instalar el paquete epel-release que crea el archivo automáticamente, sin modificar mi configuración predeterminada o causar conflictos de archivo que No es necesario que suceda.

Lo que sucederá es que la mayoría de los programas leerán su configuración predeterminada ( /etc/yum.confpor ejemplo) y luego iterarán sobre sus .dcarpetas, incluidos los fragmentos de configuración en el programa en ejecución.

Espero que te lo explique.


+1, esto explica mucho, pero ... no es la elección de la letra 'd'.
greg0ire

1
¿Tiene que haber una explicación para la elección? Es solo una convención que se ha desarrollado con el tiempo, no está (desde un vistazo rápido) definido en el FHS, pero puede estar incluido en el estándar LSB. Cron fue uno de los primeros, según recuerdo. (Editar: de hecho, habría sido init)
NJ

3

Al igual que los archivos pueden tener .extque especificar qué tipo de archivo es (comúnmente llamado "extensión"), los directorios a veces tienen .dque mostrar que es un directorio y no un archivo. Ese es su tipo. La lssalida predeterminada no diferencia visualmente directorios y archivos, por lo que .des solo una convención antigua para mostrar su tipo (directorio) en dichos listados.


66
Además, el .dsufijo evita colisiones con un archivo con un nombre similar. Por ejemplo, puede tener un archivo de configuración /etc/apt/sources.listy un directorio de archivos de configuración /etc/apt/sources.list.d.
jmtd

2
^ Iría tan lejos como para decir que no es una "adición", sino la razón de la convención en primer lugar. Unix / Linux nunca ha sido valioso al tener que incluir extensiones en las cosas, especialmente en los primeros días, por lo que dudo que este haya sido utilizado sin una buena razón.
underscore_d

2

En términos más generales, los directorios .d (/etc/httpd/conf.d, /etc/rc.d, / etc / siendo otro ejemplo), indican que los archivos contenidos serán leídos y utilizados, a menudo para la configuración, si coinciden un patrón dado y no requieren ser agregados explícitamente a alguna lista maestra.

Entonces, si agrega archivos de la forma * .repo a /etc/yum.repos.d, yum lo usará cuando se ejecute sin necesidad de agregarlo a una lista de configuraciones /etc/yum.conf. Si agrega archivos de la forma * .conf a /etc/http/conf.d, Apache los leerá sin necesidad de agregarlos explícitamente a /etc/httpd/conf/httpd.conf. Del mismo modo, chkconfig a archivos en /etc/init.d, trabajos cron en /etc/cron.d.


+1, pero ... el mismo comentario que el anterior.
greg0ire

1
@greg: debido a la variedad de formas de ordenar las respuestas, "arriba" y "abajo" son formas pobres de referirse (comentar) otras respuestas. Los tipos 'más antiguo' y 'más nuevo' producen significados opuestos para tales descripciones basadas en la posición, y cuando se clasifica por 'votos', la posición relativa de dos respuestas puede cambiar con el tiempo.
Chris Johnsen

@ Chris Johnsen: esto es lo que me di cuenta, pero demasiado tarde. Me refería a mi comentario sobre la respuesta de NJ.
greg0ire

1

Creo, pero no puedo documentar, que la .dindica que el directorio está asociado con un d Aemon.

La evidencia indicaría que esto es al menos plausible:

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

En algún lugar en los profundos recovecos de los pequeños fragmentos de la antigua historia de Unix que todavía resuenan en el fondo de mi mente detrás de las telarañas, esto me llama la respuesta correcta. Creo que puede haber sido de una época en que los primeros mamíferos vagaron por la tierra antes de que los dinosaurios comenzaran a desaparecer y las manpáginas no solo se mantuvieran en el sistema, sino también físicamente en bastidores medidos por el pie.


+1 para el delirio al final, pero creo que esto no encaja bien con yum.repos.d ...
greg0ire

</cobwebs>Creo que las respuestas que indican que el propósito de este .des desambiguar el directorio de los archivos relacionados y con nombres similares son los correctos. He votado a favor de E-man y Jlliagre's.
Dennis Williamson

La pregunta es "qué significa '.d'", y he recibido muchas explicaciones sobre la razón por la cual existe esta '.d', pero los pocos que dieron una respuesta sobre el significado no citaron ninguna fuente. Personalmente, creo que significa directorio.
greg0ire

1
yumEs un invento más reciente.
Dennis Williamson
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.