Các câu trả lời khác ở đây có thể sẽ làm việc. Đặc biệt, giải pháp symlink có lẽ sẽ là giải pháp dễ nhất. Tôi cung cấp điều này chủ yếu cho sự hoàn chỉnh.
Các giải pháp liên quan mknod
(hoặc cp -a
) trở nên có vấn đề nếu hệ thống tệp chứa tệp không hỗ trợ các thiết bị (ví dụ: nó được gắn với nodev
tùy chọn chẳng hạn). Và tất nhiên, các liên kết cứng trên các hệ thống tập tin đơn giản là không hoạt động.
Một thay thế cho các liên kết cứng hoặc tạo các nút thiết bị mới là sử dụng các liên kết gắn kết, cho phép bạn gắn một tệp hoặc thư mục từ một phần của cây hệ thống tệp của bạn lên một cây khác. Vì vậy, ví dụ, bạn có thể chạy:
mount -o bind /dev/null /path/to/log.txt
Điều này hoạt động rất giống như một liên kết cứng, nhưng:
- Nó có thể hoạt động trên các hệ thống tệp (vì nó không dựa trên các nút hệ thống tệp như một liên kết cứng)
- Nó hoạt động trên các hệ thống tệp chỉ đọc (vì bạn không thực sự sửa đổi hệ thống tệp)
Ví dụ hoàn chỉnh:
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
?