Другие ответы здесь, вероятно, будут работать. В частности, решение по символической ссылке, вероятно, будет самым простым решением. Я предлагаю это в основном для полноты.
Решения с участием mknod
(или cp -a
) становятся проблематичными, если файловая система, содержащая файл, не поддерживает устройства (например, она была смонтирована с nodev
опцией, например). И, конечно, жесткие ссылки между файловыми системами просто не будут работать.
Альтернативой жестким ссылкам или созданию новых узлов устройств является использование привязок, которые позволяют монтировать файл или каталог из одной части дерева вашей файловой системы в другую. Так, например, вы можете запустить:
mount -o bind /dev/null /path/to/log.txt
Это действует как жесткая ссылка, но:
- Он может работать через файловые системы (потому что он не основан на инодах файловой системы, таких как жесткая ссылка)
- Он работает на файловых системах только для чтения (потому что вы фактически не изменяете файловую систему)
Для полного примера:
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
?