我有/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
写入临时文件并重命名。