
我有/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
寫入臨時檔案並重新命名。