No se puede sobrescribir un archivo moviendo otro sobre él

No se puede sobrescribir un archivo moviendo otro sobre él

Tengo un archivo /some/fooque es un archivo de texto sin formato. Puedo editarlo vimy puedo catagregarle algo más. Pero cada vez que intento automatizar el proceso de edición sed, dice

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

Intenté redirigir sedla salida de a un archivo temporal y catestá bien. Pero si intento mover el archivo temporal a él, dirá

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

Estoy bastante preocupado por qué vimy catpuedo escribir el archivo pero mvno puedo.
Ubuntu 16.04.1 LTS. /somees una subcarpeta de /(punto de montaje raíz, ext4).

Respuesta1

Encontré la respuesta al administrar los montajes de unidades. Apareció una línea extraña cuando estaba revisando las unidades montadas.

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

Eso me sorprendió. Después de investigar todos los scripts que he usado, encontré esta línea en un script modificador de hosts

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

Luego probé algo más:

/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

La solución es, por supuesto, cancelar ese punto de montaje:

sudo umount /etc/hosts

Respuesta2

Es probable que no tenga acceso de escritura al directorio. Las operaciones de archivo: crear, eliminar y cambiar el nombre modifican el directorio.

caty vimsimplemente modifique el contenido del archivo y no es necesario modificar el archivo. sed -iescribe un archivo temporal y le cambia el nombre.

información relacionada