Não é possível sobrescrever um arquivo movendo outro sobre ele

Não é possível sobrescrever um arquivo movendo outro sobre ele

Eu tenho um arquivo /some/fooque é um arquivo de texto simples. Posso editá-lo vime posso fazer catoutra coisa. Mas sempre que tento automatizar o processo de edição sed, aparece

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

Tentei redirecionar seda saída para um arquivo temporário e catestá tudo bem. Mas se eu tentar mover o arquivo temporário para ele, ele dirá

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

Estou bastante preocupado com o motivo vime catposso gravar o arquivo, mas mvnão consigo.
Ubuntu 16.04.1 LTS. /someé uma subpasta de /(ponto de montagem raiz, ext4).

Responder1

Encontrei a resposta ao gerenciar montagens de unidade. Uma linha estranha apareceu quando eu estava verificando as unidades montadas.

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

Isso me deixou surpreso. Depois de pesquisar todos os scripts que usei, encontrei esta linha em um script modificador de hosts

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

Então tentei outra coisa:

/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

A solução é, obviamente, cancelar esse ponto de montagem:

sudo umount /etc/hosts

Responder2

É provável que você não tenha acesso de gravação ao diretório. As operações de arquivo: criar, excluir e renomear modificam o diretório.

cate vimapenas modifique o conteúdo do arquivo e não precise modificar o arquivo. sed -igrava um arquivo temporário e o renomeia.

informação relacionada