ฮาร์ดลิ้งค์ใน Linux คืออะไร?


9

ฉันค้นหาไปรอบ ๆ และพยายามเข้าใจความแตกต่างระหว่างฮาร์ดลิงก์และลิงก์สัญลักษณ์ (ซอฟต์ลิงก์)

ฉันพบลิงค์นี้มีประโยชน์มาก แต่ฉันยังไม่ชัดเจนมาก ฉันเข้าใจว่าซอฟต์ลิงค์ไม่ใช่ไฟล์ต้นฉบับ แต่เป็นฮาร์ดลิงก์ที่คัดลอกหรือไม่?

คำตอบ:


15

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

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

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


+1 สำหรับการเปรียบเทียบที่ดีมากซึ่งจะทำให้สิ่งต่าง ๆ เรียบง่ายสำหรับฉันเมื่อฉันพยายามที่จะทำให้หัวของฉันรอบนี้
John Gardeniers

1
+1 แต่มีสองรายละเอียดเล็กน้อย: 1) เป็นไปได้ที่จะมีที่อยู่หลายแห่งสำหรับสถานที่เดียวกันในโลกแห่งความเป็นจริงไม่ใช่เรื่องธรรมดา 2) บางทีความแตกต่างที่สำคัญที่สุดระหว่างฮาร์ดลิงก์และสำเนาคือถ้าคุณมี/fooและ/barการเปลี่ยนแปลง/fooจะเปลี่ยน/barหากพวกเขาเป็นฮาร์ดลิงก์(เพราะทั้งสองชื่อเป็นไฟล์เดียวกัน) แต่ไม่ใช่ถ้าพวกเขาเป็น สำเนา (เพราะเป็นไฟล์สองไฟล์ที่เป็นอิสระโดยสมบูรณ์)
Dave Sherohman

3

ไม่ A (ลิงก์ลำดับที่สองและถัดไปทั้งหมด) ไปยังไฟล์เป็นตัวชี้ไปยัง inodes เดียวกันบนดิสก์


3

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

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


2

ไฟล์ในระบบ * nix มีสองส่วน ส่วนหนึ่งของข้อมูลและอื่น ๆ เป็น inode inode เก็บเมตาดาต้า (ข้อมูลที่เกี่ยวข้องกับข้อมูลเช่นตำแหน่งที่เก็บข้อมูล HDD) ฮาร์ดลิงก์ทำให้สร้างสำเนาที่แน่นอนของ inode นี้ ในขณะที่ลิงค์ sym สร้าง inode ซึ่งชี้ไปที่ inode ของ inode จริง ดังนั้นข้อมูลไอโหนดในฮาร์ดลิงก์จะเหมือนกับเป้าหมาย แต่ข้อมูลต่างกันใน sym ลิงค์ ดังนั้นเพื่อให้เรื่องสั้นสั้นลิงค์ sym และฮาร์ดลิงก์แตกต่างกันตามเนื้อหาของข้อมูล inode ไม่ใช่ข้อมูลไฟล์ นี่คือความเข้าใจของฉันแตกต่างระหว่าง sym ลิงค์และฮาร์ดลิงค์ ฉันมีช่วงเวลาที่ยากลำบากในตอนแรกที่เข้าใจสิ่งนี้เพราะนี่คือสิ่งที่นักพัฒนายิ่งกว่าและฉันไม่ใช่นักพัฒนา โอ้คนที่มีความรู้โปรดแก้ไขฉันถ้าฉันผิด


3
"directory" ใน * nix คือรายการชื่อไฟล์และหมายเลข inode ฮาร์ดลิงก์คือรายการไดเร็กทอรีสองรายการที่มีหมายเลขไอโหนดเดียวกันดังนั้นจึงอ้างถึงไอโหนดเดียวกันที่แน่นอนไม่ใช่การคัดลอกไอโหนด symlink คือรายการไดเร็กทอรีที่ชี้ไปยังรายการไดเร็กทอรีอื่น (ตามชื่อ) ไม่ใช่ไอโหนดใด ๆ (ตกลงจริง ๆ แล้วมันมีไอโหนด แต่ไอโหนดนั้นอ้างถึงรายการไดเรกทอรีไม่ใช่ไฟล์ข้อมูล)
Randy Orrison
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.