別のファイルを移動して上書きすることはできません

別のファイルを移動して上書きすることはできません

プレーンテキストファイルであるファイルがあります/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) のサブフォルダーです。catmv
/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一時ファイルを書き込んで名前を変更します。

関連情報