Cosa significa .d nei nomi di directory?


118

Conosco molte directory con .d nel loro nome:

init.d
yum.repos.d
conf.d

Significa directory? In caso affermativo, da cosa si discosta?

AGGIORNAMENTO: Ho avuto molte risposte interessanti su cosa .dsignifichi, ma il titolo della mia domanda non è stato scelto bene. Ho cambiato "mean" in "stand".


9
Per l'origine di .d, vedi il commento di msw su questa domanda correlata su Ask Ubuntu .
Gilles,

@Gilles, ah, stavo pensando che fosse più tardi di System-V, ma sì, anche se non c'è ancora alcun significato per '.d' è stato appena scelto da quello che posso dire.
NJ,

@Gilles: interessante, la risposta sembra essere: la spiegazione è andata persa ... come per il primo commento della prima risposta nel tuo link
greg0ire

Non certo perché .din init.d, ma sembra che quasi tutti i file di configurazione personalizzate vanno .dle directory in RHEL / CentOS / Fedora.
LiuYan 刘 研

@Liu Yan - In effetti, non potrei spiegarlo in alcun modo che possa essere interpretato come coerente.
Tim Post

Risposte:


102

Il .dsuffisso qui significa directory. Naturalmente, questo sarebbe inutile, in quanto Unix non richiede un suffisso per indicare un tipo di file, ma in quel caso specifico, qualcosa è stato necessario per disambiguare i comandi ( /etc/init, /etc/rc0, /etc/rc1e così via) e le directory che usano ( /etc/init.d, /etc/rc0.d, /etc/rc1.d,. ..)

Questa convenzione è stata introdotta almeno con Unix System V ma probabilmente prima. Il initcomando si trovava in /etcma ora si trova nei /sbinmoderni sistemi operativi System V.

Si noti che questa convenzione è stata adottata da molte applicazioni che si spostano da un singolo file di configurazione a più file di configurazione situati in una singola directory, ad esempio: /etc/sudoers.d

Anche in questo caso, l'obiettivo è evitare lo scontro tra nomi, non tra il file eseguibile e il file di configurazione, ma tra il precedente file di configurazione monolitico e la directory che li contiene.


4
+1, penso che tu abbia ragione, ma nessuno finora ha dato alcuna citazione per la sua teoria
greg0ire

È più una convenzione che il tipo di crescita delle persone che un vero standard esplicito, penso
Shadur

1
Quando si esegue un lscomando (non ls -al) senza utilizzare l' --coloropzione (specificata in modo esplicito o parte della LS_OPTIONSvariabile di ambiente), avere ".d" fa in modo che le directory si distinguano dall'elenco. Ecco perché ho sempre pensato che fosse fatto.
LawrenceC,

^ colornon è l'unico, o il migliore, modo per contrassegnare visivamente le directory. ls -Flo farà e molte altre cose utili.
underscore_d

56

Estratto da una mailing list Debian (enfasi aggiunta):

Quando il packaging di distribuzione divenne sempre più comune, divenne chiaro che avevamo bisogno di modi migliori per formare tali file di configurazione da più frammenti, spesso forniti da più pacchetti indipendenti. Ogni pacchetto che deve configurare alcuni servizi condivisi dovrebbe essere in grado di gestire solo la sua configurazione senza dover modificare un file di configurazione condiviso utilizzato da altri pacchetti.

La convenzione più comune adottata era quella di consentire l'inclusione di una directory piena di file di configurazione, in cui qualsiasi cosa rilasciata in quella directory sarebbe diventata attiva e parte di quella configurazione. Man mano che quella convenzione diventava più diffusa, quella directory veniva di solito chiamata come il file di configurazione che stava sostituendo o aumentando. Ma poiché non è possibile avere una directory e un file con lo stesso nome, è stato necessario distinguere alcuni metodi, quindi .d è stato aggiunto alla fine del nome del file di configurazione. Quindi, un file di configurazione / etc / Muttrc è stato aumentato da frammenti in /etc/Muttrc.d, / etc / bash_completion è stato aumentato con /etc/bash_completion.d/* e così via. A volte vengono usate lievi variazioni su quella convenzione, come /etc/xinetd.d per integrare /etc/xinetd.conf o / etc / apache2 / conf. d per integrare /etc/apache2/apache2.conf. Ma è la stessa idea di base.

Generalmente quando vedi quella convenzione * .d, significa "questa è una directory che contiene un mucchio di frammenti di configurazione che verranno uniti nella configurazione per alcuni servizi".


Per la parte 2, la ragione del ".d", la mia ipotesi migliore sarebbe "distribuita", come non parte del file di configurazione principale, ma comunque parte della configurazione .


8
Sorprendente ... Avrei pensato che parlasse a favore della "directory", che significa "questa è la parte della directory della configurazione".
greg0ire,

2
Lo fa chiaramente. Perché qualcuno dovrebbe leggere questo e concludere che il .dsignificato di qualsiasi altra cosa è oltre me! Ma questa fonte mostra solo la logica di Debian per, in un contesto, usare una convenzione che esisteva fin dai primi giorni di Unix. Devo chiedermi se questo manutentore di Debian stesse deliberatamente semplificando - o davvero credendo che Debian avesse inventato questa pratica.
underscore_d

11

Se parli di ".d" alla fine dei nomi di directory, questa risposta è corretta, è solo un indicatore per "directory".

Basta non confonderlo con "d" in corrispondenza del nome di un file, come "syslogd", che sta per demone . Un processo informatico in esecuzione in background.

il processo genitore di un demone è spesso (ma non sempre) il processo init (PID = 1). I processi di solito diventano demoni biforcando un processo figlio e quindi facendo uscire immediatamente il loro processo genitore, facendo sì che init adotti il ​​processo figlio. Questa è una visione un po 'semplificata del processo in quanto vengono generalmente eseguite altre operazioni, come dissociare il processo daemon da qualsiasi tty di controllo. A tale scopo esistono routine di convenienza come daemon (3) in alcuni sistemi UNIX.


Non proprio, questi sono nomi di directory.
Keith,

@Keith: oops, ho erroneamente pensato che parla di file che terminano con "d", come syslogd, non di directory che terminano con ".d". Modificherò presto.
Philomath,

Questo è quello che ho pensato, ma vedo che viene usato spesso nelle directory di configurazione per programmi che non eseguono il daemon, ad es sysctl.d. modprobe.d.. sarebbe un uso inappropriato?
Tim Post

@Tim Post: vedi i 2 commenti sopra (e la risposta di Keith), presto modificherò la mia risposta.
Philomath,

Modificato (15 chr)
Philomath il

4

Non significa directory di per sé, fondamentalmente quello che sta succedendo è che le directory che finiscono .d(nota che di solito sono sempre e solo in /etc), prendono parti di configurazione.

Questo è progettato in modo tale che le distribuzioni possano includere impostazioni predefinite universali, ad esempio /etc/yum.conf, ma esiste un metodo facile da usare per gli utenti o altri pacchetti per aggiungere le proprie configurazioni yum in un modo sicuro che non verrà sovrascritto.

Ad esempio per yum ...

Se volessi iniziare a usare EPEL sul mio RHEL5 o CentOS Box, posso configurare un nuovo repository nella /etc/yum.repos.dcartella, (diciamo /etc/yum.repos.d/epel.repo) o installare il pacchetto epel-release che crea automaticamente il file, senza modificare la mia configurazione predefinita o causare conflitti di file che non è necessario che accada.

Ciò che accadrà è che la maggior parte dei programmi leggerà la loro configurazione predefinita ( /etc/yum.confad esempio) e quindi scorrerà le loro .dcartelle, inclusi i frammenti di configurazione, nel programma in esecuzione.

Spero che lo spieghi per te.


+1, questo spiega molto, ma ... non la scelta della lettera 'd'.
greg0ire,

1
Ci deve essere una spiegazione per la scelta? È solo una convenzione che si è sviluppata nel tempo, non è (da una rapida occhiata) definita nell'FHS, ma potrebbe essere inclusa nello standard LSB. Cron è stato uno dei primi a ricordare. (Modifica: in effetti sarebbe stato init)
NJ

3

Proprio come i file possono dover .extspecificare quale tipo di file è (comunemente chiamato "estensione"), le directory a volte devono .dmostrare che è una directory e non un file. Questo è il suo tipo. L' lsoutput predefinito non differenzia visivamente directory e file, quindi .dè solo una vecchia convenzione per mostrare il suo tipo (directory) in tali elenchi.


6
Inoltre, il .dsuffisso impedisce le collisioni con un file con nomi simili. Ad esempio, è possibile avere un file di configurazione /etc/apt/sources.liste una directory di file di configurazione /etc/apt/sources.list.d.
jmtd,

2
^ Andrei fino al punto di dire che non è una "aggiunta", ma la ragione stessa della convention in primo luogo. Unix / Linux non è mai stato prezioso nel dover includere estensioni sulle cose, specialmente ai primi tempi, quindi dubito che questo sia stato bandito senza una buona ragione.
underscore_d

2

Più in generale, le directory .d (/etc/httpd/conf.d, /etc/rc.d, / etc / essendo un altro esempio), indicano che i file contenuti saranno letti e usati, spesso per la configurazione, se corrispondono un determinato modello e non richiede l'aggiunta esplicita a un elenco principale.

Quindi se aggiungi file del modulo * .repo a /etc/yum.repos.d, yum lo userà durante l'esecuzione senza la necessità di aggiungerlo a un elenco di configurazioni /etc/yum.conf. Se aggiungi file del modulo * .conf a /etc/http/conf.d, verranno letti da Apache senza che sia necessario aggiungere esplicitamente a /etc/httpd/conf/httpd.conf. Allo stesso modo, chkconfig ai file in /etc/init.d, cron lavori in /etc/cron.d.


+1, ma ... stessa osservazione di cui sopra.
greg0ire,

1
@greg: a causa della varietà di modi per ordinare le risposte, “sopra” e “sotto” sono modi poveri di fare riferimento a (commenti su) altre risposte. I tipi "più vecchi" e "più recenti" producono significati opposti per tali descrizioni basate sulla posizione e, quando si ordina per "voti", la posizione relativa di due risposte può cambiare nel tempo.
Chris Johnsen,

@ Chris Johnsen: questo è quello che ho realizzato, ma troppo tardi. Mi riferivo al mio commento sulla risposta di NJ.
greg0ire,

1

Credo, ma non riesco a documentare, che la .dindica che la directory è associato a un d Aemon.

La prova indicherebbe che questo è almeno plausibile:

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

Da qualche parte nei profondi recessi dei piccoli frammenti della storia antica di Unix che ancora tintinnano nella parte posteriore della mia mente dietro le ragnatele, questo mi chiama come la risposta corretta. Credo che potrebbe provenire da un'epoca in cui i primi mammiferi vagavano per la terra prima che i dinosauri iniziassero a estinguersi e le manpagine non solo fossero mantenute sul sistema, ma anche fisicamente in scaffali misurati dal piede.


+1 per il delirio alla fine, ma penso che questo non vada bene con yum.repos.d ...
greg0ire

</cobwebs>Credo che le risposte che indicano che lo scopo di .dsia disambiguare la directory dai file correlati e con nomi simili sia quella corretta. Ho votato a favore di E-man e di jlliagre.
Dennis Williamson,

La domanda è "cosa significa '.d'", e ho ricevuto molte spiegazioni riguardo al motivo per cui esiste questo '.d', ma i pochi che hanno dato una risposta riguardo al significato non citano alcuna fonte. Personnaly, penso che significhi directory.
greg0ire,

1
yumè un'invenzione più recente.
Dennis Williamson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.