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


9

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

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

在研究ram磁盘时,我偶然发现了一个带有答案的问题,指出可以在其中创建目录/dev/shm并像临时目录一样使用该目录。然而,研究了更多内容后,我偶然发现来自debian 的Wiki页面,指出/dev/shm直接使用是错误的。我应该使用这些shm_*功能。不幸的是,这些shm_*功能似乎无法在Shell脚本中使用。

现在我很困惑。是否可以像/run/shm以前/dev/shm那样使用temp目录?


是的,许多用户还挂载/tmp到共享内存中。
Eddy_Em

我想那/tmp是更多的语义。如果您的用户有足够的内存用于存储/dev/shm临时文件以加快处理速度,则可以将其安装在此处。但是,如果他们没有足够的内存,并通过强制所有进程使用交换文件来将其安装在计算机上,则它们会降低计算机的速度,那么他们将为更重要的事情保存内存,并为/tmp文件系统使用普通的磁盘空间。换句话说,/tmp是可调的。
杰克

Answers:


10

/run只要您具有适当的权限,就可以使用某些目录。在某些现代发行版中,/tmp已经是内存中的虚拟文件系统或指向目录中目录的符号链接/run。如果是这种情况(您可以在中进行检查/etc/fstab,或键入mtab),则可以将其/tmp用作临时目录。

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


2
下面最合适的位置/run可能是/run/user/${UID}/
Paul Fenney 2014年

1
确实,在我的系统上,pulseaudio和systemd在其中安装了一些文件,例如pid文件。但是,/ tmp仍然是临时文件的首选位置。
lgeorget 2014年

2
@PaulFenney:/ run / user / $ UID也称为$ XDG_RUNTIME_DIR
user2394284 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.