
Ich habe eine Datei /some/foo
, die eine reine Textdatei ist. Ich kann sie mit bearbeiten vim
und cat
etwas 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, sed
die 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 vim
und cat
kann die Datei schreiben, aber mv
es geht nicht.
Ubuntu 16.04.1 LTS. /some
ist 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.
cat
und vim
ändern Sie einfach den Dateiinhalt und müssen die Datei nicht ändern. sed -i
schreibt eine temporäre Datei und benennt sie um.