ความเข้าใจของฉันคือการเชื่อมโยงอย่างหนักรวมถึงสำเนาของไฟล์ต้นฉบับและฉันสามารถลบไฟล์ที่เชื่อมโยงอย่างหนักในไดเรกทอรีเดียวและมันจะยังคงอยู่ในไดเรกทอรีอื่น
หากเป็นเช่นนั้นทำไมฉันจึงต้องการใช้ฮาร์ดลิงก์ทั้งหมด ทำไมไม่มีแค่สองไฟล์แยกกันล่ะ?
ความเข้าใจของฉันคือการเชื่อมโยงอย่างหนักรวมถึงสำเนาของไฟล์ต้นฉบับและฉันสามารถลบไฟล์ที่เชื่อมโยงอย่างหนักในไดเรกทอรีเดียวและมันจะยังคงอยู่ในไดเรกทอรีอื่น
หากเป็นเช่นนั้นทำไมฉันจึงต้องการใช้ฮาร์ดลิงก์ทั้งหมด ทำไมไม่มีแค่สองไฟล์แยกกันล่ะ?
คำตอบ:
หากคุณคัดลอกไฟล์มันจะทำซ้ำเนื้อหา ดังนั้นหากคุณแก้ไขเนื้อหาของไฟล์เดียวนั่นจะไม่มีผลกับอีกไฟล์หนึ่ง
หากคุณสร้างฮาร์ดลิงก์นั้นจะสร้างไฟล์ที่ชี้ไปยังเนื้อหาเดียวกัน ดังนั้นหากคุณเปลี่ยนเนื้อหาของไฟล์ใดไฟล์หนึ่งการเปลี่ยนแปลงจะปรากฏในทั้งสองไฟล์
ฮาร์ดลิงก์เป็นชื่อไฟล์ที่สองสำหรับไฟล์เดียวกัน ดังนั้นหากคุณ hardlink ไฟล์มันจะเป็นเพียงครั้งเดียวในระบบไฟล์และใช้พื้นที่เพียงครั้งเดียว ดังนั้นคุณต้องการใช้สิ่งนี้หากคุณต้องการบันทึกพื้นที่ใช้งาน
ในระบบไฟล์ยูนิกซ์ทุกชื่อไฟล์เป็นลิงค์ยากไปยังตำแหน่งของข้อมูลบนแผ่นดิสก์ที่เรียกว่าไอโหนด หากคุณสร้างฮาร์ดลิงก์ใหม่ไปยังไฟล์ที่มีอยู่มันจะไม่เพิ่มพื้นที่ว่างในดิสก์เนื่องจากเป็นเพียงตัวชี้อื่นไปยังข้อมูลเดียวกัน หากคุณแก้ไขข้อมูลด้วยลิงค์เดียวหรือลิงค์อื่น (หรือแก้ไข inode โดยตรง) ไฟล์ทั้งสองจะถูกเปลี่ยน
ระบบเก็บนับจำนวนฮาร์ดลิงก์ที่แต่ละ inode มี เมื่อจำนวนลิงก์เป็น 0 ไฟล์จะไม่สามารถเข้าถึงได้อีกต่อไปและข้อมูลจะถูกทำเครื่องหมายว่าปลอดภัยที่จะถูกเขียนทับ ให้ไฟล์ที่มี 2 ฮาร์ดลิงก์หากคุณลบลิงค์ใดลิงก์หนึ่งข้อมูลจะไม่ถูกลบ เฉพาะในกรณีที่คุณลบข้อมูลทั้งสองจะหายไป
คุณสามารถดูหมายเลข inode ของไฟล์โดยใช้-i
สวิตช์เป็นls
คำสั่ง
ในทางกลับกันซอฟต์ลิงก์ชี้ไปที่ไฟล์อื่นด้วยชื่อไฟล์ หากคุณย้ายหรือลบไฟล์ต้นฉบับลิงก์จะเสียหาย
จากการอ้างอิงถึงส่วนของคำถามที่ถามว่า "ทำไมฉันถึงต้องการใช้ฮาร์ดลิงก์เลย?":
ไฟล์ที่เชื่อมโยงอย่างหนัก (หรือสำหรับไฟล์ที่มีความอ่อนนุ่ม (เป็นสัญลักษณ์) เสนอวิธีที่มีประโยชน์ในการมีไฟล์เรียกทำงานไฟล์เดียวที่สามารถทำการปลอมแปลงเพื่อวัตถุประสงค์ที่แตกต่างกัน
นั่นคือชื่อที่รหัสถูกเรียกสามารถตรวจสอบเพื่อกำหนดตัวเลือกที่มีอยู่สำหรับการดำเนินการ สิ่งนี้ช่วยให้การพัฒนาและการบรรจุโค้ดขนาดใหญ่หนึ่งชิ้นพร้อมฟังก์ชั่นการแชร์ที่จำเป็นทั้งหมดสำหรับวัตถุประสงค์ที่แตกต่างกันเล็กน้อย จากมุมมองของผู้ใช้ข้อมูลจำเพาะของ "อะไร" ที่จะเรียกใช้ (ตามชื่อ) จำกัด ตัวเลือกและงานนำเสนอให้กับตัวเลือกชุดย่อยที่จัดการได้ง่ายขึ้น
ตัวอย่างคลาสสิกคือ LVM ที่ครั้งหนึ่ง HP-UX ใช้ไฟล์ยากที่เชื่อมโยงสำหรับ executables ต่างๆ (เช่นvgdisplay
, vgcreate
, vgextend
ฯลฯ วันนี้เช่น Linux คำสั่งเหล่านี้เป็นจริงสัญลักษณ์การเชื่อมโยง (นิ่ม) เพื่อlvm
ปฏิบัติการ