linux – 是’sed’线程安全的

如果我有一个shell / python脚本使用sed根据用户输入修改文件,然后两个用户同时或大约运行相同的脚本.同时,’sed’线程安全吗?或者它可能不是问题,因为第一个线程打开的file_descripor将用于锁定文件?谢谢
最佳答案
我不打算在可怕的术语上挑剔,但是,GNU sed及其-i(“就地”)标志可以安全地被多个进程同时使用,而无需任何额外的锁定,因为sed是实际上并没有就地修改文件,而是将输出重定向到临时文件,如果一切顺利,它会将临​​时文件重命名(2)(移动)到原始文件,并保证重命名(2)是原子的:

$strace sed -i s/o/e/g foo.txt
open("foo.txt", O_RDONLY)               = 3
...
open("./sedDe80VL", O_RDWR|O_CREAT|O_EXCL, 0600) = 4
...
read(3, "foo\n", 4096)                  = 4
...
write(4, "fee\n", 4)                    = 4
read(3, "", 4096)                       = 0
...
close(3)                                = 0
close(4)                                = 0
rename("./sedDe80VL", "foo.txt")        = 0

在任何时候,foo.txt都会引用完整的原始文件或完整的处理文件,而不是两者之间的内容.

转载注明原文:linux – 是’sed’线程安全的 - 代码日志