
プレーンテキストファイルであるファイルがあります/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
書き込めないのか、非常に心配です。Ubuntu 16.04.1 LTS は(ルート マウント ポイント、ext4) のサブフォルダーです。cat
mv
/some
/
答え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
一時ファイルを書き込んで名前を変更します。