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

1

Eu tenho o arquivo /some/foo , que é um arquivo de texto simples. Eu posso editá-lo com vim e eu posso cat outra coisa para ele. Mas sempre que eu tento automatizar o processo de edição com sed , ele diz

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

Eu tentei redirecionar a saída de sed para um arquivo temporário e cat , 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 muito preocupado porque vim e cat podem gravar o arquivo, mas mv não pode.
Ubuntu 16.04.1 LTS. /some é uma subpasta de / (ponto de montagem raiz, ext4).

    
por iBug 23.04.2017 / 16:45

2 respostas

0

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

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

Isso me deixou surpresa. Depois de cavar todos os scripts que usei, encontrei essa linha em um script de modificador de hosts

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

Então eu 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
    
por 29.07.2017 / 08:45
-3

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

cat e vim apenas modificam o conteúdo do arquivo e não precisam modificar o arquivo. sed -i escreve um arquivo temporário e o renomeia.

    
por 24.04.2017 / 06:48