/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
一時ファイルに書き込み、名前を変更します。