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 nodev
opció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
?