无法通过移动另一个文件来覆盖该文件

无法通过移动另一个文件来覆盖该文件

我有/some/foo一个纯文本文件。我可以用它来编辑它vim,并且我可以cat对它进行其他操作。但每当我尝试使用 自动化编辑过程时sed,它就会说

sed: cannot move '/some/sedGl29Uj': Device or resource busy

我尝试将sed输出重定向到临时文件cat,结果没问题。但是如果我尝试将临时文件移到上面,它会说

root@localhost:/some # mv tmp foo
mv: Device or resource busy

我很担心为什么vim可以cat写入文件但mv不能。
Ubuntu 16.04.1 LTS。/some/(根安装点,ext4)的子文件夹。

答案1

在管理驱动器安装时找到了答案。当我检查已安装的驱动器时,出现了一条奇怪的线。

~ # mount | grep /etc/hosts
/tmp/hosts on /etc/hosts type tmpfs (rw,nosuid,nodev,noexec,bind)

这让我很惊讶。在挖掘了我使用过的所有脚本后,我在主机修饰符脚本中找到了这一行

sudo mount -o bind /tmp/hosts /etc/hosts

然后我尝试了别的东西:

/tmp # echo aaa > a
/tmp # mount -o bind a b; cat b
aaa
/tmp # echo bbb > b; cat a
bbb
/tmp # echo ccc > c
/tmp # mv c b
mv: Device or resource busy

解决方案当然是取消该挂载点:

sudo umount /etc/hosts

答案2

您可能没有对该目录的写入权限。文件操作:创建、删除和重命名所有修改目录。

cat并且vim只修改文件内容,不需要修改文件。 sed -i写入临时文件并重命名。

相关内容