我有一个在 Linux 环境中运行的应用程序(Python 程序),它将文件写入 /tmp,并期望该应用程序稍后在后续执行时删除该文件。当上一次执行是在不同的用户 ID 下时,程序会失败。它在共享工作站上运行,该程序由该系统的一位用户编写,但由多人使用。
执行上下文(多个用户在不同时间执行程序)和存储位置(/tmp)对我来说似乎都是正常且合理的,但我想帮助编写该程序的用户改进它以避免这些偶尔出现的故障。
有没有一种方法可以让程序创建该文件,以便同一个应用程序在以不同用户身份运行时可以删除它?(在这里寻找一般的操作系统/文件系统帮助,而不是编程建议。)
请注意,我想避免更改 /tmp 目录的权限(例如,删除粘滞位),这通常会阻止这种情况发生。
创建子目录并在其中写入文件。子目录不会自动继承
+t
。理想情况下,程序首先会尝试避免名称冲突——长期以来,在文件名中至少包含用户 ID 是一种很常见的做法(例如,
/tmp/tmux-1000
或/tmp/krb5cc_1000
选择一些传统应用程序)。os.getuid()
为此使用。更好的做法是生成一个随机名称,它就是这样
tempfile.NamedTemporaryFile()
做的。您会在 /tmp 中找到很多这样的名称,例如/tmp/ssh-XXXXv7kbdG
您的 ssh-agent。或者,程序可以使用适合操作系统的每个用户“缓存”目录,例如 Linux 上的
$XDG_CACHE_HOME
子目录~/.cache
:platformdirs.user_cache_dir("MyApp")
。“共享”曾经是许多类 Unix 系统的默认设置,因此使用固定文件名会导致此类冲突,这应该被视为一个错误。