Las otras respuestas aquí probablemente funcionarán. En particular, la solución de enlace simbólico probablemente será la solución más fácil. Ofrezco esto principalmente para completar.
Las soluciones que involucran mknod(o cp -a) se vuelven problemáticas si el sistema de archivos que contiene el archivo no admite dispositivos (por ejemplo, se montó con la nodevopción, por ejemplo). Y, por supuesto, los enlaces duros a través de los sistemas de archivos simplemente no funcionarán.
Una alternativa a los enlaces duros o la creación de nuevos nodos de dispositivos es utilizar montajes de enlace, que le permiten montar un archivo o directorio de una parte del árbol de su sistema de archivos en otra. Entonces, por ejemplo, puedes ejecutar:
mount -o bind /dev/null /path/to/log.txt
Esto se parece mucho a un enlace duro, pero:
- Puede funcionar en todos los sistemas de archivos (porque no se basa en inodos del sistema de archivos como un enlace duro)
- Funciona en sistemas de archivos de solo lectura (porque en realidad no está modificando el sistema de archivos)
Para un ejemplo 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?