在Linux上,是否有任何系统事件阻止复制命令工作?

时间:2015-10-26 14:31:43

标签: linux cp

尝试确定是否存在复制命令可能失败的情况。

我并不意味着$ PATH没有设置或文件丢失,但更多符合文件是否正在编辑,文件是否为二进制文件并被系统进程访问或是否为正在访问的数据库文件。

某些基本测试似乎表明即使正在编辑文件,cp命令也能正常工作,但不确定是否存在任何操作系统命令或cp失败的情况。例如,如果它是一个数据库文件并被更新/保存为cp发生的确切时间,该怎么办?像这样的东西很难测试,但可能会发生。

是否存在系统阻止cp命令执行的方案列表?

1 个答案:

答案 0 :(得分:1)

cp有很多方法可能无法达到你想要的效果。

我想到的特定示例:如果您的流程可以在任何给定时间读取cp的目的地,那么没有办法可以保证读者不会在cp完成复制之前开始阅读并最终读取部分写入的文件。对于小型文件,这种竞争条件可能总是对您有利,但它仍然存在。

从读者的角度来看,你可以拥有一个始终以“原子方式”更新文件的唯一方法,就是他们总是得到旧版本或新版本,而不是部分新版本通过rename系统呼叫。哪个应该mv用于同一卷/分区上的文件的内容。

实施cp至少有5次系统调用:2x open,1x sendfile,2x close

所以请注意,即使cp成功,仍然会有竞争条件和不可预测的行为。