คำตอบอื่น ๆ ที่นี่อาจทำงานได้ โดยเฉพาะอย่างยิ่งโซลูชัน symlink น่าจะเป็นทางออกที่ง่ายที่สุด ฉันเสนอสิ่งนี้เพื่อความสมบูรณ์เป็นหลัก
วิธีแก้ปัญหาที่ไม่เกี่ยวข้องmknod
(หรือcp -a
) กลายเป็นปัญหาหากระบบไฟล์ที่มีไฟล์ไม่รองรับอุปกรณ์ (เช่นถูกประกอบเข้ากับnodev
ตัวเลือกเป็นต้น) และแน่นอนว่าการเชื่อมโยงอย่างหนักในระบบไฟล์ก็ใช้งานไม่ได้
อีกทางเลือกหนึ่งสำหรับฮาร์ดลิงก์หรือสร้างโหนดอุปกรณ์ใหม่คือการใช้ bind mounts ซึ่งช่วยให้คุณเมาท์ไฟล์หรือไดเรกทอรีจากส่วนหนึ่งของโครงสร้างระบบไฟล์ของคุณไปยังอีกส่วนหนึ่ง ตัวอย่างเช่นคุณสามารถเรียกใช้:
mount -o bind /dev/null /path/to/log.txt
มันทำหน้าที่เหมือนลิงค์หนัก แต่:
- มันสามารถทำงานข้ามระบบไฟล์ (เพราะมันไม่ได้ขึ้นอยู่กับระบบไฟล์ inodes เช่นการเชื่อมโยงอย่างหนัก)
- ใช้งานได้กับระบบไฟล์แบบอ่านอย่างเดียว (เพราะคุณไม่ได้แก้ไขระบบไฟล์)
สำหรับตัวอย่างที่สมบูรณ์:
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
เหรอ