1)在Linux系统中用mv命令移走正在读取文件会怎么样?
比如文件1.txt正在被进程A读取,我用mv命令把1.txt移动到别的目录去,进程A会出错吗?
2)还有mv移走正在写入的文件又会怎么样?
比如文件2.txt正在被进程B写入数据,用mv命令把2.txt移动到别的目录去,进程B会出错吗?
mv移动文件到别的目录有两种情况:
1)移动到同一分区的不同目录内
2)移动到不同分区的不同目录内
以上两种情况的mv移动,会有不同结果吗?
请大神指教。
1)在Linux系统中用mv命令移走正在读取文件会怎么样?
比如文件1.txt正在被进程A读取,我用mv命令把1.txt移动到别的目录去,进程A会出错吗?
2)还有mv移走正在写入的文件又会怎么样?
比如文件2.txt正在被进程B写入数据,用mv命令把2.txt移动到别的目录去,进程B会出错吗?
mv移动文件到别的目录有两种情况:
1)移动到同一分区的不同目录内
2)移动到不同分区的不同目录内
以上两种情况的mv移动,会有不同结果吗?
请大神指教。
同一分区没有问题,linux 用的是 inode,只要还有一个进程使用文件,你删掉文件都可以继续读写。有时候误删文件都是根据这个道理去挽救的。
不同分区就会造成不同的 inode,会有奇怪的现象发生。
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答799 阅读✓ 已解决
2 回答3.2k 阅读
1)如果是在同一个设备相同分区类型,mv的实现是调用rename函数,rename只修改文件名称,不会影响已有的打开这个文件的进程的读写操作;写入的内容会保存在重命名后的文件里。
2)如果不在同一个设备或相同的分区类型,mv操作实际是先将原有文件里的内容copy到新的文件里,然后调用unlink函数;unlink时如果该文件在被使用,不会将文件真正删除,只会将文件名改为空,在所有的对该文件的操作都完成并调用close后该文件才会被真正删除;这种情况下对原有文件的写入操作不会保存在新的文件里。