As outras respostas aqui provavelmente funcionarão. Em particular, a solução de link simbólico provavelmente será a solução mais fácil. Eu ofereço isso principalmente por completude.
As soluções que involem mknod
(ou cp -a
) se tornam problemáticas se o sistema de arquivos que contém o arquivo não suportar dispositivos (por exemplo, foi montado com a nodev
opção, por exemplo). E, é claro, links físicos entre sistemas de arquivos simplesmente não funcionam.
Uma alternativa para links físicos ou criação de novos nós de dispositivos é usar montagens de ligação, que permitem montar um arquivo ou diretório de uma parte da árvore do sistema de arquivos em outra. Então, por exemplo, você pode executar:
mount -o bind /dev/null /path/to/log.txt
Isso funciona como um link físico, mas:
- Ele pode operar em sistemas de arquivos (porque não é baseado em inodes do sistema de arquivos como um link físico)
- Funciona em sistemas de arquivos somente leitura (porque você não está realmente modificando o sistema de arquivos)
Para um exemplo completo:
bash-4.3# ls -l /var/log/boot.log
-rw-r--r--. 1 root root 7436 Dec 19 10:00 /var/log/boot.log
bash-4.3# mount -o bind /dev/null /var/log/boot.log
bash-4.3# ls -l /var/log/boot.log
crw-rw-rw-. 1 root root 1, 3 Dec 19 09:58 /var/log/boot.log
bash-4.3# echo words words words > /var/log/boot.log
bash-4.3# ls -l /var/log/boot.log
crw-rw-rw-. 1 root root 1, 3 Dec 19 09:58 /var/log/boot.log
chmod -w log.txt
?