Pro*_*oob 17 filesystems scripting directory-structure tmp
我开始为我的项目编写一些 bash 脚本,它们需要编写一些中间文件或变量。
我想知道当有人运行我的脚本时我可以确定可以访问哪些文件夹?使用它是一种常见的做法/tmp/
吗?还是我应该使用其他东西?
Eig*_*ony 21
在寻找这些东西时,我发现Filesystem Hierarchy Standard 文档非常宝贵。
有几个选项,
这实际上取决于您存储的数据类型。
Gil*_*il' 15
如果您需要编写一些仅在您的脚本或应用程序运行时持续存在的临时文件,请使用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
…
Run Code Online (Sandbox Code Playgroud)