cp sobrescrever vs rm então cp

18

Quando eu tento substituir um arquivo binário que está sendo lançado, cp falha ao substituir, mas é possível rm e cp . Por exemplo:

user@poste:~$ cp binaryFile /tmp
user@poste:~$ sudo cp /tmp/binaryFile binaryFile 
[sudo] password for user:
cp: cannot create regular file 'binaryFile': Text file busy
user@poste:~$ sudo rm binaryFile 
user@poste:~$ sudo cp /tmp/binaryFile  binaryFile 
user@poste:~$ file binaryFile 
binaryFile : ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x7ce005d9eb50e2574246b6a881e625802f7e49f2, not stripped

Alguma ideia do porquê?

    
por M4rty 28.10.2016 / 09:54

1 resposta

41

No primeiro caso, você está tentando sobrescrever o conteúdo de um arquivo que está sendo executado atualmente como um programa. O Linux não permite isso - se isso acontecesse, você sobregravaria código à medida que o sistema operacional fosse executado; a primeira diferença iria travar o programa ou causar mau funcionamento.

Mas no segundo caso, você não está realmente alterando o conteúdo do arquivo antigo - você está criando um arquivo novo em seu lugar, enquanto o antigo perde o nome do arquivo, mas mantém seu conteúdo intocado.

(Lembre-se de que rm não tecnicamente exclui arquivos, apenas remove links de diretório - semelhante a como ln adiciona mais links ao mesmo arquivo. Somente quando um arquivo não tem links e sem referências de arquivos abertos, ele é automaticamente excluído.

O sistema referencia arquivos em uso pelo seu inode, então não importa que eles tenham o mesmo nome de arquivo - ainda é o arquivo antigo que permanece aberto pelo sistema, e mesmo assim não tem mais links, só será deletado quando todos os programas forem fechados.

    
por 28.10.2016 / 10:09

Tags