Ste*_*itt 61
该FHS是任务/tmp
存在,如同POSIX所以你可以依靠它在那里(至少在兼容的系统,但实际上它几乎是保证是出现在类Unix系统)。但您不应该这样做:系统管理员或用户可能更喜欢其他位置的临时文件。有关更多详细信息,请参阅在多个平台上查找正确的 tmp 目录。
Gil*_*il' 46
在实践中,/tmp
几乎可以保证存在。但是,即使它存在,也不意味着您应该将临时文件放在那里。
该标准惯例是使用TMPDIR
环境变量。如果存在,它指向一个存放临时文件的目录。如果它不存在,请将临时文件放入/tmp
.
在 shell 脚本中,您可以将其"${TMPDIR:-/tmp}"
用作临时文件位置:TMPDIR
如果它已设置¹,则扩展为值,/tmp
否则为。或者您可以TMPDIR
使用命令有条件地设置以防未设置
: "${TMPDIR:=/tmp}"
Run Code Online (Sandbox Code Playgroud)
然后在里面创建临时文件"$TMPDIR"
。
请注意,任何应用程序都可以在/tmp
或下创建文件$TMPDIR
。此外,该目录可能会在用户之间共享,因此您在创建文件时需要注意权限。许多系统(Linux、*BSD)都有一个命令mktemp
,可以在正确的目录中安全地创建文件。mktemp
用于创建临时文件和目录通常是一个好主意——尤其是从 shell 脚本中,由于符号链接攻击的可能性,不可能在共享目录中安全地创建文件(mkdir
如果您正确处理错误,那很好)。
¹和非空——如果变量是空的,那么它无论如何都不能使用,如果空或未设置的变量应该包含文件名,那么以相同的方式处理它们通常是个好主意。
虽然它很可能存在,但您应该检查另一个原因:它不能保证很大。在许多系统上,/tmp
由 RAM 而不是磁盘支持,并且可能限制为几 GB。(在 Fedora 系统上,默认情况下它是 RAM 的一半。)因此,您不仅应该检查是否存在,还应该检查是否有空间放置您打算放置的任何内容。
如果您有大的东西,请使用/var/tmp/
.