使用 `/run/shm`(以前称为 `/dev/shm`)作为临时目录

les*_*ana 9 directory-structure shared-memory tmpfs

/run/shm(以前/dev/shm)中创建一个目录并将其用作应用程序的临时目录是一种好习惯吗?

背景:我正在为一个程序编写黑盒测试,该程序对文件和目录执行很多操作。对于每个测试,我都会创建很多文件和目录,然后运行程序,然后创建预期的文件和目录集,然后运行 ​​diff 进行比较。我现在有大约 40 个测试,它们已经花费了 2 秒多的时间来运行。希望加快速度,我想在某种 ramdisk 上的目录中运行测试。

在研究 ram 磁盘时,我偶然发现了一个问题,其中的答案指出可以在其中创建一个目录/dev/shm并将其用作临时目录。研究了更多但是我偶然发现debian 的一个 wiki 页面,指出/dev/shm直接使用是错误的。我应该使用这些shm_*功能。不幸的是,这些shm_*函数似乎无法在 shell 脚本中使用。

现在我很困惑。是否可以像临时目录一样使用/run/shm(以前/dev/shm)?

lge*_*get 11

/run只要您拥有适当的权限,使用某个目录是完全可以的。在一些现代发行版中,/tmp已经是内存中的虚拟文件系统或指向/run. 如果这是您的情况(您可以在 中检查/etc/fstab,或输入mtab),您可以将其/tmp用作临时目录。

另外,不要与来自 Debian 的文章混淆。shm_*函数用于为进程间通信创建共享内存段。使用这些功能,您可以在两个或多个进程之间共享内存片段,让它们使用相同的数据进行通信或协作。进程将内存段附加在自己的地址空间中,并且可以像往常一样在那里读写。内核处理复杂性。这些函数不能作为 shell 函数使用(并且在 shell 上下文中不是很有用)。有关更多信息,请查看man 7 shm_overview。这篇文章的重点是,任何程序都不应该直接管理代表共享段的伪文件,而是使用适当的函数来创建、附加和删除共享内存段。

  • `/run` 下最合适的位置可能是 `/run/user/${UID}/`。 (2认同)
  • @PaulFenney:/run/user/$UID 也称为 $XDG_RUNTIME_DIR (2认同)