Інші відповіді тут, ймовірно, спрацюють. Зокрема, рішення симлінк, ймовірно, буде найпростішим рішенням. Я пропоную це в основному для повноти.
Рішення, що викликають 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
?