Eine Datei kann nicht überschrieben werden, indem man eine andere darüber verschiebt

Eine Datei kann nicht überschrieben werden, indem man eine andere darüber verschiebt

Ich habe eine Datei /some/foo, die eine reine Textdatei ist. Ich kann sie mit bearbeiten vimund catetwas anderes damit machen. Aber immer wenn ich versuche, den Bearbeitungsprozess mit zu automatisieren sed, heißt es

sed: cannot move '/some/sedGl29Uj': Device or resource busy

Ich habe versucht, seddie Ausgabe von in eine temporäre Datei umzuleiten cat, und es ist OK. Aber wenn ich versuche, die temporäre Datei dorthin zu verschieben, wird angezeigt

root@localhost:/some # mv tmp foo
mv: Device or resource busy

Ich bin ziemlich besorgt, warum vimund catkann die Datei schreiben, aber mves geht nicht.
Ubuntu 16.04.1 LTS. /someist ein Unterordner von /(Root-Mount-Point, ext4).

Antwort1

Habe die Antwort beim Verwalten der Laufwerksmounts gefunden. Beim Überprüfen der gemounteten Laufwerke wurde eine seltsame Zeile angezeigt.

~ # mount | grep /etc/hosts
/tmp/hosts on /etc/hosts type tmpfs (rw,nosuid,nodev,noexec,bind)

Das hat mich überrascht. Nachdem ich alle Skripte durchgesehen hatte, die ich verwendet hatte, fand ich diese Zeile in einem Hosts-Modifikator-Skript

sudo mount -o bind /tmp/hosts /etc/hosts

Dann habe ich etwas anderes versucht:

/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

Die Lösung besteht natürlich darin, diesen Einhängepunkt abzubrechen:

sudo umount /etc/hosts

Antwort2

Wahrscheinlich haben Sie keinen Schreibzugriff auf das Verzeichnis. Die Dateioperationen: Erstellen, Löschen und Umbenennen verändern alle das Verzeichnis.

catund vimändern Sie einfach den Dateiinhalt und müssen die Datei nicht ändern. sed -ischreibt eine temporäre Datei und benennt sie um.

verwandte Informationen