【发布时间】:2019-04-20 14:21:41
【问题描述】:
我想创建一个符号链接,如果需要,覆盖现有文件或符号链接。
我发现os.path.exists 只为未损坏的符号链接返回True,所以我猜任何测试都必须包含os.path.lexists。
在 python 中实现ln -sf 的最原子方式是什么? (即,防止文件在删除和符号链接创建之间被另一个进程创建)
区分:This question 没有指定原子需求
【问题讨论】:
-
如果你准备
ln -s file tmplink,那么mv tmplink link是原子的。 -
@Amadan 感谢您的建议。我仍然看到一个安全漏洞,但我希望我在my answer 中尽可能地做到这一点。
-
FWIW,
ln -sf本身实际上并不是原子的。 GNU Coreutils internally implements @Amadan 提出的解决方案(以及当前接受的答案实现); FreeBSD 和 Busybox 只需在链接之前删除目标文件。所以“par”实际上很容易清除。