Answers:
在查找这些内容时,我发现Filesystem Hierarchy Standard文档非常宝贵。
有几种选择,
这实际上取决于您存储的数据类型。
如果您需要编写一些仅在脚本或应用程序运行时才持续的临时文件,请使用TMPDIR
环境变量指示的目录,或者如果未定义该变量,则使用/tmp
。
/tmp
在某些系统上的引导时会被清除(有时甚至在RAM中,例如在Solaris上,默认情况下,在某些Linux安装中也是如此),因此它不能用于必须在断电或重新引导后仍然存在的文件。/var/tmp
可以用于必须在重新启动后仍然存在的文件,但系统管理员可能会不时清理这些文件。如果您的应用需求,以节省永久基础上的文件,他们的某处写在用户的主目录(~/.programmingnoobsapp
或~/.cache/programmingnoobsapp
)或下/var/lib/programmingnoobsapp
或/var/cache/programmingnoobsapp
。
请注意,这/tmp
是所有用户共享的,因此在此处创建文件时需要采取预防措施。您需要选择一个尚不存在的文件名,并且要小心,避免出现竞争状况,即另一个进程会以不同的权限在您之前创建文件,这可能是一个安全漏洞(如果另一个进程存在的话)以其他用户身份运行,然后可以访问和修改您的流程数据)。使用mktemp
命令在/tmp
或中创建文件/var/tmp
。默认情况下,在中mktemp
创建文件$TMPDIR
,/tmp
如果TMPDIR
未设置,通常在正确的位置。如果您需要使用多个临时文件,或者甚至只需要一个,我建议使用以下命令为所有临时文件创建目录:mktemp -d
并在脚本末尾将其删除。
#!/bin/sh
tmp_root=
trap 'rm -rf "$tmp_root"' EXIT INT TERM HUP
tmp_root=$(mktemp -d)
tmpfile1=$tmp_root/file1
tmpfile2=$tmp_root/file2
…
tmp_root
在分配之前进行初始化?这不是更自然unset
吗?
set -u
,但这并不常见)。设置陷阱之前,必须将其(取消)设置为安全值,以防脚本在设置陷阱后立即被杀死。
set -o errexit
以使如果tmp_root
在环境中已将其设置为只读,则不会破坏错误的目录...
只是为了补充到目前为止已经发布的答案。
也有/dev/shm
一些Linux发行版可以是使用了临时存储。仅在考虑/dev/shm
使用tmpfs
文件系统的情况下,文件I / O的性能是关键因素时才应使用此存储。此外,还应将其用于合理大小的文件和数据。该tmpfs
文件系统利用系统RAM作为存储,因此它在启动之间并不持久。
在题为“ / tmp vs./dev/shm”的Linux上的临时文件存储中,在StackOverflow上提到的所有选择都有很好的概述。。在标题为:何时应该使用/ dev / shm /以及何时应该使用/ tmp的超级用户问答中对此进行了很好的介绍。。
是的,/tmp
主要用于临时需要的文件。/ tmp具有粘性位,这意味着只有项目的所有者,目录的所有者或超级用户才能重命名或删除文件。许多程序使用它来创建锁定文件和临时存储数据。在某些发行版中,此目录在启动或关闭时被清除。