XDG基本目录规范是用户目录非常有趣的规范。 除了XDG_RUNTIME_DIR ,它还提供了很好的默认值。
现在我正在编写一个需要创build命名pipe道的软件。 它是一个按用户的客户端 – 服务器框架(服务器有一个FIFO,每个客户端有一个FIFO)。
如果没有定义XDG_RUNTIME_DIR ,我目前在/tmp使用per-user子目录,但是不能确保所有指定的条件(即以“目录的生命周期”必须绑定到正在login的用户…“ )
/tmp/myserver-$USER足够好?
编辑
我在别处看到了一些build议:
. 是相当不能令人满意的(至less因为这不是绝对path)。 /var/run/user/$USER – 不错,但那个目录不存在(至less在我的机器上运行Debian testing ) /tmp已被大量程序以类似的方式使用。 在我的系统上,我可以看到/tmp/orbit-$USER (由Gnome的ORBit2使用)和/tmp/.X11-unix/和X11)目录中有大量pipe道,电子设备,套接字等。 我相信也有其他人,所以我没有看到你在做什么错。 只要准备好,因为它是一个世界可写位置恶意进程可以劫持的位置(在写入之前validation权限)。
对于那些使用pam_mktemp的人 ,我也可以推荐$TMPDIR ,因为这个目录只能被用户访问。
SystemD使/run/user/$USER有点强制性。
http://www.freedesktop.org/software/systemd/man/file-hierarchy.html
未授权的写入权限
未授权的进程通常缺less对大多数层次结构的写入访问权限。
普通用户的例外是
/tmp,/var/tmp,/dev/shm以及主目录$HOME(通常位于/home下面)和运行时目录$XDG_RUNTIME_DIR(位于/run/user下面)用户,这些都是可写的。对于无特权的系统进程,只有
/tmp,/var/tmp和/dev/shm是可写的。 如果非特权系统进程在/var或/run中需要一个专用的可写目录,build议先在守护程序代码中删除特权之前创build它,然后在启动时通过tmpfiles.d(5)碎片创build它,或者通过RuntimeDirectory=服务单元指令(详情请参阅systemd.unit(5))。
创build具有唯一ID的目录/tmp/service-$USER.id。 为了方便,在shell中:
mktemp -d /tmp/service-"$USER".XXX