ใช้ lsof เพื่อค้นหาหมายเลข inode และ debugfs เพื่อสร้างฮาร์ดลิงก์ใหม่ ตัวอย่างเช่น:
# lsof -p 12345 | grep /var/log/messages
syslogd 12345 root 3w REG 8,3 3000 987654 /var/log/messages (deleted)
# mount | grep var
/dev/sda2 on /var type ext3 (rw)
# debugfs -w /dev/sda2
debugfs: cd log
debugfs: ln <987654> tmp
debugfs: mi tmp
Mode [0100600]
User ID [0]
Group ID [0]
Size [3181271]
Creation time [1375916400]
Modification time [1375916322]
Access time [1375939901]
Deletion time [9601027] 0
Link count [0] 1
Block count [6232]
File flags [0x0]
...snip...
debugfs: q
# mv /var/log/tmp /var/log/messages
# ls -al /var/log/messages
-rw------- 0 root root 3301 Aug 8 10:10 /var/log/messages
ก่อนที่คุณจะบ่นฉันแกล้งบันทึกข้อความด้านบนเนื่องจากฉันไม่มีไฟล์ที่ถูกลบไปตอนนี้ ;-)
ผมใช้mi
การตั้งค่าเวลาลบและนับเชื่อมโยงไปยังค่าที่เหมาะสม (0 และ 1 ตามลำดับ) แต่มันไม่ทำงานอย่างถูกต้อง - ls
คุณสามารถดูซากนับลิงค์ที่ศูนย์ใน ฉันคิดว่าเคอร์เนลอาจแคชข้อมูล inode คุณน่าจะ fsck ในโอกาสแรกหลังจากใช้ debugfs เพื่อให้ปลอดภัย
จากประสบการณ์ของฉันคุณควรสร้างลิงค์โดยใช้ชื่อไฟล์ชั่วคราวแล้วเปลี่ยนชื่อเป็นชื่อที่เหมาะสม การเชื่อมโยงโดยตรงกับชื่อไฟล์ต้นฉบับดูเหมือนว่าจะทำให้ไดเรกทอรีเสียหาย YMMV!
readlink /proc/13381/fd/3
-> "/ home / vi / important_file (ลบแล้ว)" และ/home/vi/important_file\ \(deleted\)
เห็นได้ชัดว่าไม่มีอยู่จริง