ยกเลิกการเชื่อมโยงฮาร์ดลิงก์


22

ในหน้าคู่มือการใช้งานtarคำสั่งตัวเลือกสำหรับการเชื่อมโยงฮาร์ดต่อไปนี้จะปรากฏ

-h, --dereference
      follow symlinks; archive and dump the files they point to

--hard-dereference
      follow hard links; archive and dump the files they refer to

จะtarรู้ได้อย่างไรว่าไฟล์เป็นฮาร์ดลิงก์ มันติดตามได้อย่างไร?

ถ้าฉันไม่เลือกตัวเลือกนี้ มันไม่ยากลำบากอย่างไร

คำตอบ:


24

ตามค่าเริ่มต้นหากคุณบอกtarให้เก็บถาวรไฟล์ด้วยฮาร์ดลิงก์และมากกว่าหนึ่งลิงก์นั้นรวมอยู่ในไฟล์ที่จะเก็บถาวรมันจะเก็บถาวรไฟล์เพียงครั้งเดียวและบันทึกครั้งที่สอง (และชื่อเพิ่มเติม) เป็นฮาร์ดลิงก์ ซึ่งหมายความว่าเมื่อคุณแยกไฟล์เก็บถาวรนั้นลิงก์ถาวรจะถูกกู้คืน

หากคุณใช้--hard-dereferenceตัวเลือกนี้tarจะไม่เก็บฮาร์ดลิงก์ไว้ แต่จะถือว่าไฟล์เหล่านี้เป็นไฟล์อิสระที่เพิ่งมีเนื้อหาและข้อมูลเมตาเดียวกัน เมื่อคุณแตกไฟล์เก็บถาวรไฟล์จะเป็นอิสระ

หมายเหตุ: รู้จักฮาร์ดลิงก์โดยตรวจสอบจำนวนลิงค์ของไฟล์ก่อน มันบันทึกหมายเลขอุปกรณ์และ inode ของแต่ละไฟล์ที่มีมากกว่าหนึ่งลิงค์และใช้ในการตรวจสอบเมื่อไฟล์เดียวกันจะถูกเก็บถาวรอีกครั้ง (เมื่อคุณใช้--hard-dereferenceจะไม่ทำเช่นนี้)


7

คุณสามารถแยกไฟล์ด้วยฮาร์ดลิงก์ (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แตกไฟล์


ตอนนี้ฉันเข้าใจแล้วว่า 'การติดตามการเชื่อมโยงอย่างหนัก' เป็นถ้อยคำที่ผิด ขอขอบคุณ. แต่ถ้าหากไฟล์ที่เหมือนกันหนึ่งในสองไฟล์นั้นไม่ถูกเก็บถาวร การนับลิงก์จะทำให้เข้าใจผิดในกรณีเช่นนี้
มูซา

2
ไม่ใช่ "สองไฟล์ที่เหมือนกัน" มันเป็นหนึ่งไฟล์ที่มีสองชื่อ ไม่สำคัญว่าไฟล์ tar ตัวไหนที่ไม่ได้เก็บถาวรเพราะมันเหมือนกัน ตามค่าเริ่มต้น tar อาจจะเก็บ "พอยน์เตอร์" บางอย่างจากชื่อไฟล์ที่ 2 กลับไปเป็นชื่อแรกอย่างไรก็ตามเช่นเดียวกับระบบไฟล์
Bruce Ediger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.