(Merci à @Zulakis et une réponse sur Serverfault pour avoir fait remarquer que cette réponse n'avait pas suivi le développement continu d'Ubuntu).
Avec l'adoption de systemd
à partir de 15.04 En effet, il existe désormais un mécanisme centralisé pour la création de fichiers et de répertoires temporaires tels que ceux-ci. Un service souhaitant utiliser cette méthode peut supprimer mkdir
dans son propre script de démarrage et placer plutôt un .conf
dans /etc/tmpfiles.d
, /run/tmpfiles.d
o /usr/lib/tmpfiles.d
Les services Ubuntu semblent préférer la dernière option. Par exemple, mon système a maintenant :
$ egrep -r /var/run /usr/lib/tmpfiles.d
/usr/lib/tmpfiles.d/var.conf:L /var/run - - - - ../run
/usr/lib/tmpfiles.d/sudo.conf:d /var/run/sudo 0711 root root
/usr/lib/tmpfiles.d/sudo.conf:D /var/run/sudo/ts 0700 root root
/usr/lib/tmpfiles.d/postgresql.conf:d /var/run/postgresql 2775 postgres postgres - -
/usr/lib/tmpfiles.d/sshd.conf:d /var/run/sshd 0755 root root
/usr/lib/tmpfiles.d/screen-cleanup.conf:d /var/run/screen 0775 root utmp
El d
signifie créer un répertoire s'il n'existe pas déjà, après cela il y a le chemin, et le reste sont les permissions, l'utilisateur, et le groupe. Ces répertoires seront créés indépendamment du fait que le service correspondant soit démarré ou non.
Pour une documentation complète, voir man tmpfiles.d
.
ANCIENNE RÉPONSE PRÉ-SYSTEMD :
On dirait qu'ils sont créés dynamiquement par les services individuels lorsqu'ils démarrent :
$ sudo egrep -r 'mkdir.*/var/run' /etc
/etc/init.d/ssh: mkdir /var/run/sshd
/etc/init.d/bind9: mkdir -p /var/run/named
/etc/init.d/timidity: mkdir -p /var/run/timidity
/etc/init.d/bzflag: mkdir -p /var/run/bzflag
/etc/init.d/dns-clean:mkdir /var/run/pppconfig >/dev/null 2>&1 || true
/etc/init/winbind.conf: mkdir -p /var/run/samba/winbindd_privileged
/etc/init/dbus.conf: mkdir -p /var/run/dbus
/etc/init/ssh.conf: mkdir -p -m0755 /var/run/sshd
/etc/init/libvirt-bin.conf: mkdir -p /var/run/libvirt
/etc/init/cups.conf: mkdir -p /var/run/cups/certs
Je crois que c'est celui qui gère mysqld :
[ -d /var/run/mysqld ] || install -m 755 -o mysql -g root -d /var/run/mysqld
/lib/init/apparmor-profile-load usr.sbin.mysqld
man install
dit que la forme -d va "créer tous les composants des répertoires spécifiés".