一致地写入文件,同时保留其 inode

一致地写入文件,同时保留其 inode

在不更改索引节点的情况下一致地编辑文件(此处使用的数据库系统术语意义上的一致性)的最佳方法是什么?通常,我会写入一个临时文件,然后调用rename(2),但由于这会更改 inode,所以这不是一个选项。我想到了类似的东西modify_file <file >tmp && cat <tmp >file,但修改要么完全发生,要么根本不发生(modify_file是修改标准输入内容的过程)。使用普通的 shell 实用程序可以实现这一点吗?我认为以下内容可能涵盖大多数情况(除了SIGKILL断电之外):

(
    flock -x 9
    trap '' INT TERM # (perhaps other signals)
    modify_file <file >tmp && cat <tmp >file
) 9>>file

对于只想更改文件的某个字节序列的子情况,会ed是更好的选择吗?

相关内容