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.