linux cp与mv那个更可靠
linux os环境下,任何小白都会用cp与mv,cp顾名思义复制一份file,mv顾名思义重命名新file。我们很少关注cp与mv的底层实现。
背景
写一个shell脚本替换现网80W+台硬件服务器上的某个文件,此时就得慎重考虑cp与mv的底层原理。
伪代码:方案1: cp a.txt b.txt
方案2: cp a.txt a.txt.bak
mv a.txt.bak b.txt
咋一看,方案2有点多次一举,实则是基于cp与mv的底层逻辑考虑,这里假定要替换的文件不大,很快就能拷贝完。
cp底层实现
-
cp
操作本身几乎总是非原子性的。 它的底层实现主要是open()
、read()
、write()
、close()
系统调用(可能涉及创建中间临时文件、copy_file_range()
等优化)。 -
复制过程: