Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 我的脚本应该使用cp还是mv来更健壮?_Linux_Bash_Error Handling_Fault_Robustness - Fatal编程技术网

Linux 我的脚本应该使用cp还是mv来更健壮?

Linux 我的脚本应该使用cp还是mv来更健壮?,linux,bash,error-handling,fault,robustness,Linux,Bash,Error Handling,Fault,Robustness,我有一个bash脚本(科学Linux)。 脚本必须对文件进行操作。比如说“file.dat”(大约1GB大小) 一段时间后,脚本将重新启动并执行以下操作: if [ -f file.dat ]; then cp file.dat file.previous.dat fi 要备份该文件。 然后一个进程启动并覆盖“file.dat” 为了最安全(断电或任何意外情况)。最好的选择是什么:cp还是mv? 谢谢。我会使用以下组合: mv file.dat file.dat.previous c

我有一个bash脚本(科学Linux)。 脚本必须对文件进行操作。比如说“file.dat”(大约1GB大小) 一段时间后,脚本将重新启动并执行以下操作:

if [ -f file.dat ];  then
    cp file.dat file.previous.dat
fi
要备份该文件。 然后一个进程启动并覆盖“file.dat”

为了最安全(断电或任何意外情况)。最好的选择是什么:cp还是mv?
谢谢。

我会使用以下组合:

mv file.dat file.dat.previous
cp file.dat.previous file.dat

这样一来,
file.dat.previous
将始终是完整的,因为
mv
是原子的。

在这里可能没有太大帮助,但是
rsync
是这类工作的工具。如果传输中断,它可以从需要的地方重新启动。

错误问题的正确答案 如果你想要一个快速的原子移动,那么mv就是你要做的事情,因为
Man2 rename
说:

如果newpath已经存在,它将被原子地替换(取决于一些条件;请参阅下面的错误),这样就不会有另一个试图访问newpath的进程发现它丢失的情况

也许更重要的是,mv在很大程度上是一种目录输入操作,因此与任何正常情况下的文件拷贝相比,它的速度非常快

正确问题的正确答案 如果您担心停电或意外的系统关闭,那么:

  • 连接不间断电源。真正地求解威胁模型
  • 确保您使用的是电池供电的RAID控制器
  • 使关键写入同步
  • 使用日志文件系统记录数据,而不仅仅是元数据
  • mv命令应该更快,但是面对灾难性故障时的健壮性是一个硬件或文件系统问题。

    通过“覆盖
    file.dat
    ”,您的意思是文件被截断为零,然后再次填充吗?是的,larsman。。。。。(添加点以符合mimimun字符长度)