เมื่อใดการสร้างฮาร์ดลิงก์จะมีประโยชน์?


11

โดยทั่วไปมีข้อ จำกัด หลักสองประการกับการเชื่อมโยงฮาร์ด:

  1. โดยปกติฮาร์ดลิงก์ต้องการให้ลิงก์และไฟล์อยู่ในระบบไฟล์เดียวกัน
  2. เฉพาะ superuser เท่านั้นที่สามารถสร้างฮาร์ดลิงก์ไปยังไดเรกทอรี

ดังนั้นจึงมีการแนะนำลิงก์สัญลักษณ์เพื่อหลีกเลี่ยงข้อ จำกัด ของฮาร์ดลิงก์ ดังนั้นคำถามคือยังต้องการการเชื่อมโยงอย่างหนักหรือไม่ อาจมีสถานการณ์ที่พวกเขามีประโยชน์มากขึ้น?


3
1) Symlinks ไม่ได้ตามด้วยเซิร์ฟเวอร์ HTTP บางตัว 2) ฮาร์ดลิงก์สามารถใช้สำหรับการสำรองข้อมูล 3) คุณสามารถแชร์ซ็อกเก็ต unix ระหว่าง chroots 4) คุณสามารถลบฮาร์ดลิงก์เวอร์ชันใดก็ได้โดยไม่กระทบกับส่วนอื่น ๆ
Dietrich Epp

เซิร์ฟเวอร์ HTTP เหล่านั้นสามารถใช้ฮาร์ดลิงก์ที่ชี้ไปที่ symlink ได้หรือไม่? หรือฉันกำลังพูดเรื่องไร้สาระ?
arana

คำตอบ:


11

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


1
หรือหนึ่งอาจมีโปรแกรมหนึ่งที่ใครอยากจะวิงวอนขอจากสามชื่อgzip, และgunzip zcat
JdeBP

8

เนื้อหาของไฟล์จะไม่ถูกลบจนกว่าฮาร์ดลิงก์ทั้งหมด (ใช่ชื่อไฟล์ทั้งหมดเป็นฮาร์ดลิงก์แม้แต่ไฟล์แรก) จะถูกลบและไฟล์จะถูกปิด เช่นนี้มันจะมีประโยชน์เมื่อไฟล์ถูกต้องในหลายสถานที่ แต่อาจถูกลบออกจากส่วนใดของพวกเขาในเวลาใด ๆ เช่นระหว่างและ~/Downloads/coolsong.mp3~/Music/Cool Song.mp3


3
ถูกต้อง. ฉันใช้มันเพื่อเก็บไฟล์ฝนตกหนักในขณะที่มีไฟล์ชื่อถูกต้องในโฟลเดอร์ภาพยนตร์ที่สะอาดของฉัน มันง่ายกว่าการย้ายและเปลี่ยนชื่อไฟล์ที่ถูก seeded และฉันสามารถลบโฟลเดอร์ torrent เมื่อทำการ seed เสร็จแล้ว นั่นเป็นวิธีที่ Couch Potato ทำเช่นกัน
Nicolas Bouliane

1

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


จุดที่ดีเยี่ยม ใน Solaris เราสามารถสร้างลูปโดยใช้ symlinks ซึ่งการประมวลผลนั้นสนุกกว่า :-)

1

มีสาเหตุหลายประการสำหรับฮาร์ดลิงก์

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

ดังนั้นเหตุผลหนึ่งที่ใช้ฮาร์ดลิงก์คือการประหยัดพื้นที่จำนวนมาก ...

คุณสามารถผนวกการอ้างอิงและข้อมูลเข้าสู่ไฟล์ที่แชร์ได้ คุณสามารถผนวกไฟล์ descriptor หนึ่งไฟล์ในขณะที่อ่านจากอีกไฟล์หนึ่ง (เช่นด้วย tail -f)


0

ตัวอย่างจำนวนมากที่ให้ไว้ในที่นี้นั้นใช้ได้ แต่จะทำงานได้ดีกับซอฟต์ลิงก์ (เช่นปัญหา "ต้องการไฟล์เดียวในหลายที่")

ตัวอย่างที่ดีสำหรับการที่ฮาร์ดลิงก์มีประโยชน์จริง ๆ คือซอฟต์แวร์สำรองข้อมูลDirvish :

Dirvish เป็นระบบสำรองข้อมูลบนเครือข่ายแบบหมุนที่รวดเร็วและมีดิสก์

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

Dirvish สร้างการสำรองข้อมูลที่ระดับระบบแฟ้ม (เช่นคัดลอกไฟล์ไม่สร้างภาพ) โดยการคัดลอกไฟล์ไปยังระบบไฟล์ (สำรอง) แยกต่างหาก (เช่นฮาร์ดไดรฟ์ USB) ทุกครั้งที่คุณทำการสำรองข้อมูล dirvish จะสร้างสำเนาไดเรกทอรีต้นไม้ที่สมบูรณ์ที่จะบันทึกแยกต่างหาก

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

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

สิ่งนี้เป็นไปได้เท่านั้นเนื่องจากฮาร์ดลิงก์นั้นโปร่งใสสำหรับเครื่องมือของผู้ใช้

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

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


เสียงเหมือน rsnapshot
Ignacio Vazquez-Abrams

0

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

หากคุณมีเหตุผลบางประการที่ต้องการเก็บรักษา tarball นั้นไว้เพื่อใช้ในอนาคตวิธีที่ดีที่สุดln /tmp/tarball.tgz ~ในขณะที่ยังคงดาวน์โหลด tarball อยู่ จากนั้นคุณไม่จำเป็นต้องทำอะไร

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


0

ฉันใช้ 'ฮาร์ดลิงก์' เพื่อสำรองข้อมูล 'HowTos' และตัวอย่างบางส่วนของฉัน

ฉันมีไดเรกทอรีชื่อ 'เอกสารที่ใช้ร่วมกัน' ในผู้ใช้ / รูทของฉัน ในไดเรกทอรีนั้นฉันมี 'ฮาร์ดลิงก์' ไปยังเคล็ดลับกลเม็ดเกร็ดความรู้และวิธีการที่อยู่ในไดเรกทอรีที่เหมาะสม php, mysql, css, regex, formulas, linux, ฯลฯ การมีพวกมันไว้ใน 'ที่เดียว' ทำให้ใช้งานได้ง่ายกว่ามากอัปเดตพวกมันแทนที่จะต้องกระโดดไปรอบ ๆ ในเอกสาร / ไดเรกทอรีที่กำลังมองหาเอกสารเหล่านี้ที่ฉันใช้บ่อย

นานมาแล้วฉันใช้ symlink ฉันจะสำรองข้อมูลไดเรกทอรี 'เอกสารที่ใช้ร่วมกัน' นี้โดยสุจริตไปยังเซิร์ฟเวอร์ของฉัน ปัญหาคือ symlink หรือ 'Soft Links' หากคัดลอก (cp -auv) หรือ tar'ed และคัดลอกออกให้สำรองเท่านั้นหรือคัดลอก 'ลิงค์' และไม่ใช่เนื้อหาของเอกสาร ดังนั้นฉันต้องสำรวจไดเรกทอรีและคัดลอกไฟล์สองโหลแต่ละไฟล์ออกจากตำแหน่งจริง

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

ข้อเสียของการใช้ 'ฮาร์ดลิงก์' คือการทำ ls ในไดเรกทอรีไม่ได้ให้ข้อบ่งชี้ว่าไฟล์นั้น 'เชื่อมโยง' กับไฟล์อื่นหรือไฟล์นั้นอาจอยู่ร่วมกัน มีวิธีการค้นหาพวกเขา แต่ฉันกำลังบอกว่ามันไม่ชัดเจนกับ ls -l ง่าย ๆ > ชี้ไปที่ ... ดังนั้นฉันมักจะเพิ่มบันทึกย่อไปที่จุดเริ่มต้นของเอกสารที่ระบุว่าไฟล์ / ไดเรกทอรี 'ไฟล์นี้ 'is' shared 'with

แลนดิส

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