Linux系统在复制时是否会锁定文件?

时间:2014-07-14 01:28:41

标签: linux bash shell

我已经编写了一个程序,它会定期更新文件,有时我想将文件复制到另一台计算机上以检查其内容。如果我在程序没写的时候复制了文件,那就没问题了。但是,如果我在程序写入时复制了文件,则复制的文件将是部分文件。所以,我想知道,如果Linux系统存在锁定策略以防止这种情况发生。

实际上,我在bash脚本中复制文件,所以我想检查程序是否在bash脚本中编写它。如果是,则bash脚本将在几秒钟后检查其状态,然后复制其完成的版本。那么在bash脚本中,我们如何检查文件是否被其他程序打开或修改过?

2 个答案:

答案 0 :(得分:3)

您可以从脚本中检查文件是否正在写入,如果是,则中止/暂停复制...

fuser -v /path/to/your/file | awk  'BEGIN{FS=""}$38=="F"{num++}END{print num}'

如果输出较小1,您可以复制:)

答案 1 :(得分:0)

当您的代码写入文件时,它实际上会写入内存中的输出缓冲区。当缓冲区变满时,缓冲区将被刷新到磁盘。因此,当您复制缓冲区尚未刷新到磁盘的文件时,您将观察到部分文件。

您可以使用对setvbuf的调用来修改缓冲区大小。如果将缓冲区大小设置为零,则会在写入时将其刷新。您可以做的另一件事是调用fflush()将输出刷新到磁盘。这两个中的任何一个都应该在写入时更新文件。