อะไรคือความแตกต่างระหว่างฮาร์ดลิงก์และไฟล์ที่คัดลอก?


22

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

หากเป็นเช่นนั้นทำไมฉันจึงต้องการใช้ฮาร์ดลิงก์ทั้งหมด ทำไมไม่มีแค่สองไฟล์แยกกันล่ะ?

คำตอบ:


29

หากคุณคัดลอกไฟล์มันจะทำซ้ำเนื้อหา ดังนั้นหากคุณแก้ไขเนื้อหาของไฟล์เดียวนั่นจะไม่มีผลกับอีกไฟล์หนึ่ง

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


3
สำหรับไฟล์ที่มีขนาดใหญ่มากการสร้างฮาร์ดลิงก์จะเร็วกว่าการคัดลอกไฟล์ต้นฉบับหรือไม่?
Jorge Bucaran

14

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


4
ขอบคุณสำหรับการตอบกลับที่รวดเร็ว ถ้าอย่างนั้นทำไมฉันถึงต้องการใช้ฮาร์ดลิงก์แทนซอฟต์ลิงค์?
Mike B

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

19
คำอธิบายของปีเตอร์นั้นดี แต่เขาก็ยังเหลือ "การนับลิงก์" ใน inode ของไฟล์ (บนข้อมูลเมตาของดิสก์) มีการนับลิงค์ ฮาร์ดลิงก์จะเพิ่มจำนวนลิงก์ แต่ซอฟต์ลิงก์จะไม่เพิ่ม เคอร์เนลได้รับอนุญาตให้ลบเนื้อหาของไฟล์หากนับลิงค์ลดลงถึงศูนย์
Bruce Ediger

4
ฉันคิดว่าคำตอบของ Alan มีความสำคัญ: การเปลี่ยนไฟล์เป็นการเปลี่ยนแปลงทั้งหมดของ hardlinks พร้อมสำเนาที่พวกเขาจะมีเนื้อหาที่แตกต่างกัน
donothingsuccessfully

6

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

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

คุณสามารถดูหมายเลข inode ของไฟล์โดยใช้-iสวิตช์เป็นlsคำสั่ง

ในทางกลับกันซอฟต์ลิงก์ชี้ไปที่ไฟล์อื่นด้วยชื่อไฟล์ หากคุณย้ายหรือลบไฟล์ต้นฉบับลิงก์จะเสียหาย


0

จากการอ้างอิงถึงส่วนของคำถามที่ถามว่า "ทำไมฉันถึงต้องการใช้ฮาร์ดลิงก์เลย?":

ไฟล์ที่เชื่อมโยงอย่างหนัก (หรือสำหรับไฟล์ที่มีความอ่อนนุ่ม (เป็นสัญลักษณ์) เสนอวิธีที่มีประโยชน์ในการมีไฟล์เรียกทำงานไฟล์เดียวที่สามารถทำการปลอมแปลงเพื่อวัตถุประสงค์ที่แตกต่างกัน

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

ตัวอย่างคลาสสิกคือ LVM ที่ครั้งหนึ่ง HP-UX ใช้ไฟล์ยากที่เชื่อมโยงสำหรับ executables ต่างๆ (เช่นvgdisplay, vgcreate, vgextendฯลฯ วันนี้เช่น Linux คำสั่งเหล่านี้เป็นจริงสัญลักษณ์การเชื่อมโยง (นิ่ม) เพื่อlvmปฏิบัติการ


สิ่งนี้ไม่เกี่ยวกับคำถาม
rjmunro

1
@rjmunro ฉันขอแตกต่าง OP ถามว่า "ทำไมฉันถึงต้องการใช้ฮาร์ดลิงก์"
JRFerguson

ฉันไม่เข้าใจตัวอย่างสุดท้าย ครั้งหนึ่งมีฮาร์ดลิงก์ไปยังไฟล์ปฏิบัติการจำนวนมากตอนนี้มีซอฟต์ลิงก์ไปยังไฟล์ปฏิบัติการหนึ่งไฟล์ ซอฟต์ลิงก์เหล่านั้นแยกแยะได้อย่างไร?
Emanuel Berg

@EmanuelBerg ประเด็นของฉันคือไม่ว่าจะใช้ลิงก์แบบ soft หรือ soft เป็นชื่อที่เรียกใช้ไฟล์เรียกทำงานที่กำหนดตัวเลือกและอาร์กิวเมนต์ที่ใช้ได้สำหรับการดำเนินการ
JRFerguson

1
@EmanuelBerg TMTOWTDI
JRFerguson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.