/tmp
在写入其中的文件之前是否需要检查和创建?假设没有人逃跑,sudo rm -rf /tmp
因为这种情况非常罕见
答案1
这FHS现有的任务授权/tmp
,以及POSIX所以你可以信赖它的存在(至少在兼容的系统上;但实际上它几乎可以保证存在于类 Unix 系统上)。但您不应该这样做:系统管理员或用户可能更喜欢使用其他位置来存放临时文件。看在多个平台上查找正确的 tmp 目录更多细节。
答案2
在实践中,/tmp
几乎肯定存在。但是,即使它存在,也不意味着您应该将临时文件放在那里。
这标准约定是使用TMPDIR
环境变量。如果存在,则它指向临时文件的目录。如果不存在,则将临时文件放入/tmp
.
在 shell 脚本中,您可以将其用作临时文件位置:如果已设置,则"${TMPDIR:-/tmp}"
扩展为值,否则扩展为值。或者您可以使用以下命令有条件地设置以防未设置TMPDIR
/tmp
TMPDIR
: "${TMPDIR:=/tmp}"
然后在里面创建临时文件"$TMPDIR"
。
请注意,任何应用程序都可以在/tmp
或下创建文件$TMPDIR
。此外,该目录可能在用户之间共享,因此在创建文件时需要注意权限。许多系统(Linux、*BSD)都有一个命令mktemp
它在正确的目录中安全地创建文件。通常,使用它来创建临时文件和目录是一个好主意mktemp
,尤其是在 shell 脚本中,由于可能存在符号链接攻击,因此无法在共享目录中安全地创建文件(mkdir
如果正确处理错误则没问题)。
和非空——如果变量为空,那么它无论如何都不能使用,如果空变量或未设置的变量应该包含文件名,那么通常最好以相同的方式处理它们。
答案3
尽管它很可能存在,但您应该检查另一个原因:它不能保证一定存在大的。在许多系统上,/tmp
由 RAM 而不是磁盘支持,并且可能仅限于几 GB。 (在 Fedora 系统上,默认情况下它是 RAM 的一半。)因此,您不仅应该检查是否存在,还应该检查是否有空间放置您打算放置的任何内容。
如果您有较大的东西,请使用/var/tmp/
.