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移动,会有不同结果吗?
请大神指教。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
1)如果是在同一个设备相同分区类型,mv的实现是调用rename函数,rename只修改文件名称,不会影响已有的打开这个文件的进程的读写操作;写入的内容会保存在重命名后的文件里。
2)如果不在同一个设备或相同的分区类型,mv操作实际是先将原有文件里的内容copy到新的文件里,然后调用unlink函数;unlink时如果该文件在被使用,不会将文件真正删除,只会将文件名改为空,在所有的对该文件的操作都完成并调用close后该文件才会被真正删除;这种情况下对原有文件的写入操作不会保存在新的文件里。
吃着吃着饭,饭碗被人抢了,能不出事儿吗?
同一分区没有问题,linux 用的是 inode,只要还有一个进程使用文件,你删掉文件都可以继续读写。有时候误删文件都是根据这个道理去挽救的。
不同分区就会造成不同的 inode,会有奇怪的现象发生。