Linux用mv移走正在读写的文件会报错吗?

1)在Linux系统中用mv命令移走正在读取文件会怎么样?
比如文件1.txt正在被进程A读取,我用mv命令把1.txt移动到别的目录去,进程A会出错吗?

2)还有mv移走正在写入的文件又会怎么样?
比如文件2.txt正在被进程B写入数据,用mv命令把2.txt移动到别的目录去,进程B会出错吗?

mv移动文件到别的目录有两种情况:
1)移动到同一分区的不同目录内
2)移动到不同分区的不同目录内

以上两种情况的mv移动,会有不同结果吗?

请大神指教。

阅读 12.7k
3 个回答

1)如果是在同一个设备相同分区类型,mv的实现是调用rename函数,rename只修改文件名称,不会影响已有的打开这个文件的进程的读写操作;写入的内容会保存在重命名后的文件里。

2)如果不在同一个设备或相同的分区类型,mv操作实际是先将原有文件里的内容copy到新的文件里,然后调用unlink函数;unlink时如果该文件在被使用,不会将文件真正删除,只会将文件名改为空,在所有的对该文件的操作都完成并调用close后该文件才会被真正删除;这种情况下对原有文件的写入操作不会保存在新的文件里。

吃着吃着饭,饭碗被人抢了,能不出事儿吗?

同一分区没有问题,linux 用的是 inode,只要还有一个进程使用文件,你删掉文件都可以继续读写。有时候误删文件都是根据这个道理去挽救的。
不同分区就会造成不同的 inode,会有奇怪的现象发生。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题