คุณสามารถแยกไฟล์ด้วยฮาร์ดลิงก์ (s) ไปยังไฟล์นั้นจากไฟล์ที่ไม่ได้เชื่อมโยงกับ "นับลิงค์" ฉันเห็นสองวิธีในการรับสิ่งนี้จากบรรทัดคำสั่ง:
% stat original
File: ‘original’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 804h/2052d Inode: 932815 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 500/ bediger) Gid: ( 1000/ bediger)
Access: 2012-07-13 22:13:52.317101530 -0600
Modify: 2012-07-13 22:13:52.317101530 -0600
Change: 2012-07-13 22:14:08.050894536 -0600
Birth: -
หรือ
1010 % ls -li
total 0
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 original
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 secondary
ที่ '2' เหงาก่อน "bediger" คือการเชื่อมโยงนับ โปรดทราบว่าชื่อไฟล์ทั้งสองมีหมายเลขไอโหนดเดียวกัน 932815
ฉันมั่นใจว่าทั้งสองคำสั่งเหล่านี้จะได้รับลิงค์นับจากฟิลด์ st_nlink ของ struct stat ซึ่งได้รับการเติมเต็มด้วยการstat()
โทรของระบบ
ใกล้ที่สุดเท่าที่ฉันสามารถบอกได้การรันtar
ด้วย--hard-dereference
วิธีที่แทนที่จะได้รับไฟล์เดี่ยวที่มีชื่อไฟล์สองชื่อที่แตกต่างกัน (ดังตัวอย่างข้างต้น) คุณจะได้รับสองไฟล์แต่ละไฟล์มีชื่อไฟล์เดียว tar
อาจตรวจสอบจำนวนลิงก์ในแต่ละไฟล์และโดยค่าเริ่มต้นเมื่อทำการแยกมันจะสร้างฮาร์ดลิงก์ในชื่อไฟล์ที่สองที่มันมีสำหรับข้อมูลไฟล์ที่เชื่อมโยงอย่างหนัก เมื่อเรียกด้วย--hard-dereference
การสร้างไฟล์เก็บถาวรจะปรากฏขึ้นเพื่อสร้างไฟล์ใหม่ทั้งหมดสำหรับชื่อไฟล์ที่สองเมื่อเรียกใช้การtar
แตกไฟล์