無法透過移動另一個文件來覆蓋該文件

無法透過移動另一個文件來覆蓋該文件

我有/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

您可能沒有對該目錄的寫入權限。檔案操作:建立、刪除和重新命名所有修改目錄。

catvim只修改文件內容,不需要修改文件。 sed -i寫入臨時檔案並重新命名。

相關內容