/tmp 保证存在吗?

/tmp 保证存在吗?

/tmp在写入其中的文件之前是否需要检查和创建?假设没有人逃跑,sudo rm -rf /tmp因为这种情况非常罕见

答案1

FHS现有的任务授权/tmp,以及POSIX所以你可以信赖它的存在(至少在兼容的系统上;但实际上它几乎可以保证存在于类 Unix 系统上)。但您不应该这样做:系统管理员或用户可能更喜欢使用其他位置来存放临时文件。看在多个平台上查找正确的 tmp 目录更多细节。

答案2

在实践中,/tmp几乎肯定存在。但是,即使它存在,也不意味着您应该将临时文件放在那里。

标准约定是使用TMPDIR环境变量。如果存在,则它指向临时文件的目录。如果不存在,则将临时文件放入/tmp.

在 shell 脚本中,您可以将其用作临时文件位置:如果已设置,则"${TMPDIR:-/tmp}"扩展为值,否则扩展为值。或者您可以使用以下命令有条件地设置以防未设置TMPDIR/tmpTMPDIR

: "${TMPDIR:=/tmp}"

然后在里面创建临时文件"$TMPDIR"

请注意,任何应用程序都可以在/tmp或下创建文件$TMPDIR。此外,该目录可能在用户之间共享,因此在创建文件时需要注意权限。许多系统(Linux、*BSD)都有一个命令mktemp它在正确的目录中安全地创建文件。通常,使用它来创建临时文件和目录是一个好主意mktemp,尤其是在 shell 脚本中,由于可能存在符号链接攻击,因此无法在共享目录中安全地创建文件(mkdir如果正确处理错误则没问题)。

非空——如果变量为空,那么它无论如何都不能使用,如果空变量或未设置的变量应该包含文件名,那么通常最好以相同的方式处理它们。

答案3

尽管它很可能存在,但您应该检查另一个原因:它不能保证一定存在大的。在许多系统上,/tmp由 RAM 而不是磁盘支持,并且可能仅限于几 GB。 (在 Fedora 系统上,默认情况下它是 RAM 的一半。)因此,您不仅应该检查是否存在,还应该检查是否有空间放置您打算放置的任何内容。

如果您有较大的东西,请使用/var/tmp/.

相关内容