(感谢@Zulakis和Serverfault 的答案,指出该答案与Ubuntu的持续开发不符。)
由于采用的systemd
为15.04,现在用于创建的临时文件和目录,如这些集中的机制。希望使用这种方法可以删除服务mkdir
在其自己的启动脚本命令,而是放置.conf
在文件中/etc/tmpfiles.d
,/run/tmpfiles.d
或者/usr/lib/tmpfiles.d
,与Ubuntu服务似乎更倾向于最后一个选项。例如,我的系统现在具有:
$ 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
d
如果目录不存在,则创建目录的方法是,路径之后是路径,其余的是权限,用户和组。无论是否启动了相应的服务,都将创建这些目录。
有关完整文档,请参见man tmpfiles.d
。
旧的预先系统答复:
看起来它们是由各个服务在启动时动态创建的:
$ 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
我相信这是处理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
说-d形式将“创建指定目录的所有组件”。