S.S*_*nne 1 gnu coreutils filenames files mktemp
我最近阅读了--help
文本mktemp
(man
页面不可用)并发现了这个:
-u, --dry-run do not create anything; merely print a name (unsafe)
Run Code Online (Sandbox Code Playgroud)
为什么这是“不安全”?是否有任何具体原因将其标记为这样?
整点mktemp
是,引用它的手册,以“创建一个临时文件或目录,安全”。基本上,在脚本中,您可以编写
file="$(mktemp)"
Run Code Online (Sandbox Code Playgroud)
或者
dir="$(mktemp -d)"
Run Code Online (Sandbox Code Playgroud)
并按照您的意愿使用,因为只有运行命令的用户才能访问临时文件和目录(当然,在大多数设置中也是 root),并且它们不是指向其他内容的符号链接,这是安全的,等(还有一些需要注意的地方,特别是需要检查退出状态,父目录需要安全使用,详见文档。)
mktemp -u
不提供这些保证,因为它将文件名的构造与其使用分开;在脚本中,您必须运行(不要这样做)
dir="$(mktemp -u)"
mkdir "$dir"
chmod 700 "$dir"
Run Code Online (Sandbox Code Playgroud)
在mktemp
和之间mkdir
,另一个进程可以创建目录,但拥有不同的所有权;或者,对于文件,另一个进程可以创建该文件或在其位置创建符号链接...