อะไรคือความแตกต่างระหว่างสัญลักษณ์และฮาร์ดลิงก์?


55

เมื่อไหร่ที่คุณจะใช้อันอื่น


5
ฉันไม่อยากคัดลอกคำตอบข้อผิดพลาดเซิร์ฟเวอร์ของฉัน: serverfault.com/questions/10543/…
dmckee

ฉันคิดว่าวิดีโอนี้ทำงานได้ดีในการอธิบายว่าyoutube.com/watch?v=IyiuP6iqduo
黒い雪

คำตอบ:


40

ความหมายที่แตกต่างกันระหว่างฮาร์ดลิงก์และซอฟต์ลิงค์ทำให้มันเหมาะสมกับสิ่งต่าง ๆ

ลิงค์ยาก:

  • แยกไม่ออกจากรายการไดเรกทอรีอื่น ๆ เพราะทุกรายการไดเรกทอรีเป็นการเชื่อมโยงอย่างหนัก
  • "ต้นฉบับ" สามารถย้ายหรือลบได้โดยไม่ทำลายลิงก์อื่น ๆ ไปยัง inode เดียวกัน
  • เป็นไปได้เฉพาะภายในระบบไฟล์เดียวกัน
  • สิทธิ์จะต้องเหมือนกับใน "ต้นฉบับ" (สิทธิ์จะถูกเก็บไว้ในไอโหนดไม่ใช่รายการไดเรกทอรี)
  • สามารถสร้างได้เฉพาะไฟล์เท่านั้นไม่ใช่ไดเรกทอรี

ลิงก์สัญลักษณ์ (ลิงก์อ่อน)

  • เพียงบันทึกที่ชี้ไปยังเส้นทางของไฟล์อื่น ( ls -lจะแสดงเส้นทางที่ symlink ชี้ไป)
  • จะแตกถ้าต้นฉบับถูกย้ายหรือลบ (ในบางกรณีเป็นที่พึงปรารถนาสำหรับลิงก์ที่ชี้ไปที่ไฟล์ใดก็ตามที่มีตำแหน่งเฉพาะ)
  • สามารถชี้ไปที่ไฟล์ในระบบไฟล์อื่น
  • สามารถชี้ไปที่ไดเรกทอรี
  • ในบางรูปแบบระบบไฟล์ symlink มีสิทธิ์แตกต่างจากไฟล์ที่ชี้ไป (เป็นเรื่องผิดปกติ) ที่เป็นไปได้

1
รายการที่ดี แค่ต้องการเพิ่มว่าคุณยังสามารถทำลาย symlink พา ธ แบบสัมพัทธ์ได้โดยการย้าย symlink นั้นเอง
jw013

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

@Mario: yup รายการไดเรกทอรีทุกลิงก์ชื่อกับ inode การเรียกระบบสำหรับการลบชื่อไฟล์จะถูกเรียกใช้unlink(2)ด้วยซ้ำ ไฟล์ "ปกติ" (ที่มีจำนวนลิงค์ 1) เป็นเพียงกรณีพิเศษ หากช่วยได้คุณสามารถคิดว่า inodes เป็นวัตถุและชื่อเป็นตัวชี้นับที่อ้างอิง (จำนวนลิงก์ของ inode คือจำนวนการอ้างอิง)
Peter Cordes

1
คุณอาจคิดถึงลิงก์สัญลักษณ์เป็นไฟล์ข้อความที่มีชื่ออยู่ในนั้น มันถูกตีความว่าเป็นลิงก์สัญลักษณ์เนื่องจากมีการตั้งค่าสถานะพิเศษไปยังไฟล์ ตัวอย่างการเชื่อมโยงอย่างหนักที่คุณรู้ว่ามีอยู่และ.. .
Ned64

ต่อไปนี้เป็นคำตอบอื่นที่อธิบายว่าทำไมฮาร์ดลิงก์ไม่สามารถสร้างเป็นไดเรกทอรีได้ ฉันคิดว่าคำตอบนี้มีประโยชน์เพราะมีความกระชับและอ่านง่ายกว่า
เทรเวอร์บอยด์สมิ ธ

18

จุดเชื่อมโยงทั้งสองประเภทคือการจัดทำวิธีการสร้างไฟล์ให้ปรากฏในสองตำแหน่งในเวลาเดียวกัน มีประโยชน์หลายอย่าง 9 ครั้งจากทั้งหมด 10 ครั้งคุณต้องการใช้ลิงก์สัญลักษณ์

ลิงก์สัญลักษณ์หรือ "symlinks" ทำงานคล้ายกับทางลัด Windows เล็กน้อย เนื้อหาของ symlink เป็นตัวชี้ไปยังตำแหน่งที่แท้จริงของไฟล์ / ไดเรกทอรี หากคุณลบไฟล์จริง symlink จะกลายเป็น "ห้อย" และจะไม่ทำงาน การลบ symlink ไม่ได้เป็นการลบไฟล์จริง คุณสามารถมี symlink ได้หลายไฟล์ในไฟล์เดียว (หรือแม้กระทั่ง symlink อื่น ๆ ) ตามที่คุณต้องการ

แตกต่างจาก Windows แม้ว่าจะทำงานกับระดับระบบแฟ้มไม่ใช่ระดับเชลล์หรือแอปพลิเคชันดังนั้นแอปพลิเคชันใด ๆ ก็ตามจะ "ติดตาม" symlink ตามที่คาดไว้ ls -alสามารถใช้เป็นวิธีที่รวดเร็วเพื่อดูว่า symlink "ชี้" ไปที่ใด

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

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


นอกจากนี้ symlink ยังมีสิทธิ์เช่นเดียวกับไฟล์ปกติ แต่ระบบปฏิบัติการไม่สามารถตรวจสอบได้มันจะพิจารณาสิทธิ์ของไฟล์ที่กำหนดเป้าหมายแทนเพื่อตัดสินใจว่าจะทำอย่างไร และอย่าทำโซ่ symlink ที่เลวร้ายมาก.
LawrenceC

3
มันแย่จริงๆเหรอ? อะไรจะเกิดขึ้น? ความตื่นเต้นที่สุดที่ฉันสามารถสร้างได้คือข้อความแสดงข้อผิดพลาด "การเชื่อมโยงสัญลักษณ์หลายระดับเกินไป"
mattdm

1
ls -lก็พอที่จะเห็นสิ่งที่ถูกเชื่อมโยงโดย symlink ที่aย่อมาจากให้--allดู manpage และแม้ว่า symlink จะทำงานที่ระบบไฟล์ แต่ก็มีฟังก์ชั่นทางเลือกอื่นให้ใช้ลิงก์สัญลักษณ์เป็นไฟล์แทนการติดตาม
D4RIO

4
ทางลัดจริง ๆ ของ Windows นั้นค่อนข้างแตกต่างจาก symlink: พวกมันทำตามเป้าหมายและเป็นไฟล์ปกติ (Windows ยังมี symlinks แต่ไม่ได้ใช้มากนัก) Symlinks นั้นเป็นข้อความล้วนๆข้อความเป้าหมายจะถูกอ่านเมื่อใดก็ตามที่คุณเข้าถึงไฟล์ การอนุญาต symlink นั้นขึ้นอยู่กับระบบปฏิบัติการและระบบไฟล์หรือไม่
Gilles 'หยุดความชั่วร้าย'

AFAIK เนื้อหาของไฟล์ symlink คือเส้นทางที่ symlink ชี้ไปซึ่งสามารถมองเห็นได้เมื่อดูขนาดของไฟล์ symlink: ln -s /home 1; ls -l 1แสดงว่า symlink 1 มีความยาว 5 ไบต์ในขณะที่ln -s /usr/share/ 2; ls -l 2showas ที่ 2 มีความยาว 11 ไบต์
daniel kullmann

13

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


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

1
นึกถึงระบบสำรองข้อมูลเพิ่มเติมเช่น Apple Time Machine (ควรชัดเจนว่าสิ่งเหล่านี้ไม่ใช่การสำรองข้อมูลประเภทการกู้คืนความเสียหาย แต่การสำรองข้อมูล "อุ๊ปส์ฉันลบไฟล์นั้นโดยไม่ได้ตั้งใจ") ไฟล์ที่ไม่เปลี่ยนแปลงในการสำรองข้อมูลส่วนเพิ่มนั้นจะเชื่อมโยงกันด้วยกัน เมื่อไฟล์มีการเปลี่ยนแปลงที่เพิ่มขึ้นต่อไปคัดลอกมันแทนที่จะเชื่อมโยงไปยังรุ่นก่อนหน้า
geekosaur

ขอบคุณแล้วระบบสำรองข้อมูลที่เพิ่มขึ้นนั้นคล้ายกับระบบควบคุมเวอร์ชันด้วยวิธีนี้ = D
D4RIO

แต่กลไกการสำรองข้อมูลส่วนเพิ่มจะรักษาไฟล์เวอร์ชัน "เก่า" ไว้อย่างไร 1) การสำรองข้อมูลที่สร้างขึ้นมันฮาร์ดลิงก์ไฟล์ F; 2) ไฟล์ F ถูกปรับเปลี่ยน; 3) วันถัดไปสร้างการสำรองข้อมูล B ... ดูเหมือนว่าฉันจะไม่ได้รับอะไรเลย
Dmitry Pashkevich

3

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

Symlinks คือไฟล์ที่เชื่อมโยงไฟล์อื่น ๆ (เช่นทางลัดของ Windows) อาจอยู่ในระบบไฟล์เดียวกันอาจจะไม่ใช่

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

$ stat plantilla-disenos.odt 
  File: «plantilla-disenos.odt»
  Size: 12367       Blocks: 32         IO Block: 4096   fichero regular
Device: 803h/2051d  Inode: 319875      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   d4rio)   Gid: ( 1000/   d4rio)
Access: 2011-02-11 21:36:19.000000000 -0300
Modify: 2010-03-02 23:27:28.000000000 -0300
Change: 2010-04-10 17:46:27.000000000 -0300

ขอบคุณ @geekosaur สำหรับการอ้างอิงนี้:

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

และสิ่งนี้ (แก้ไข):

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

ไชโย


ประสิทธิภาพมีประโยชน์กับการใช้ฮาร์ดลิงก์หรือไม่? หรือเพราะเหตุใดคุณจึงต้องใช้ฮาร์ดลิงก์แทน symlink
ripper234

เคอร์เนลต้องรีสตาร์ทการแปล pathname-to-inode (ภายในแผนผังไดเรกทอรี) เพื่อขยาย symlink ในขณะที่ฮาร์ดลิงก์ทั้งหมดใช้ inode เดียวกัน (คุณมักจะเห็นสิ่งนี้เรียกว่าnameiจากชื่อของฟังก์ชั่นเคอร์เนลที่ทำสิ่งนี้ใน Unix แบบดั้งเดิม)
geekosaur

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

@geekosaur: ฉันกำลังเพิ่มคำตอบของคุณเพราะมีประโยชน์มาก
D4RIO

ไม่มีปัญหา. ที่จริงฉันเริ่มเขียนมันเป็นความคิดเห็นของคุณ แต่ความคิดเห็นสั้นเกินไป
geekosaur

3

ซอฟต์ลิงก์ชี้ไปที่ชื่อพา ธ อื่น ชื่อพา ธ นั้นอาจมีหรือไม่มีอยู่จริง เส้นทางจะไม่ค้นหาจนกว่าคุณจะเข้าถึง symlink หากเส้นทางนั้นไม่มีอยู่เมื่อคุณพยายามเข้าถึงคุณมี symlink ที่ใช้งานไม่ได้

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

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

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


3

ลิงก์ "ยาก" ใช้ inode เดียวกันร่วมกัน

$ touch foo
$ ln foo foolink # Creates a hard  link
$ ls -li foo foolink
54996 -rw-r--r-- 2 bsd users 0 2011-12-11 09:06 foo
54996 -rw-r--r-- 2 bsd users 0 2011-12-11 09:06 foolink

ถ้าฉันแก้ไข foo หรือ foolink มีเพียงไฟล์เดียวและมันจะได้รับการอัปเดต หากฉันลบชื่อไฟล์เพียงชื่อเดียวไอโหนดและข้อมูลจะยังคงอยู่คนโง่จะอยู่รอด

$ rm foo
$ ls -li foo foolink
ls: cannot access foo: No such file or directory
54996 -rw-r--r-- 1 bsd users 0 2011-12-11 09:06 foolink

ถ้าฉันจะสร้างเหมือนกัน แต่มีลิงค์ "อ่อน" หรือสัญลักษณ์แล้วมีหนึ่งไฟล์หนึ่ง inode และไฟล์ใหม่ที่มี inode ของตัวเองชี้ไปที่แรก

$ touch foo
$ ln -s foo foolink # Create symlink
$ ls -li foo foolink
55029 -rw-r--r-- 1 bsd users 0 2011-12-11 09:11 foo
55033 lrwxrwxrwx 1 bsd users 3 2011-12-11 09:11 foolink -> foo

หากฉันแก้ไข foo หรือ foolink ยังคงมีเพียงไฟล์เดียวและจะอัปเดต

ถ้าฉันลบ symlink เฉพาะ inode และ data จะยังคงอยู่ หากฉันลบ foo ข้อมูลจะหายไป symlink จะยังคงอยู่ แต่ชี้ไปที่ไฟล์ที่ไม่มีอยู่

$ rm foo
removed `foo'
$ ls -l foo foolink 
ls: cannot access foo: No such file or directory
lrwxrwxrwx 1 bsd bsd 3 2011-12-11 09:11 foolink -> foo

1
แต่สิ่งที่เป็นประโยชน์สำหรับกรณีนี้คืออะไร?
ewwhite

1
การใช้งานครั้งเดียวเช่นเดียวกับ "ทางลัด" การใช้งานอื่นการมีแอพพลิเคชั่นหลายเวอร์ชันในระบบอนุญาตให้ติดตั้งทดสอบเวอร์ชันใหม่ระบุแอปตามเส้นทางแบบเต็มขณะที่ symlink ใน bin ชี้ไปที่การผลิต หลังจากการทดสอบเสร็จสิ้นการเปลี่ยน symlink เป็นเวอร์ชันใหม่ให้ปล่อยเวอร์ชั่นเก่าไว้สำหรับผู้ใช้ที่มีรหัสขึ้นกับเวอร์ชัน นึกถึง Perl, Python และอื่น ๆ
bsd

1
กรณีใช้งานจริงสำหรับฮาร์ดลิงก์ ในปัจจุบันในระบบไฟล์ของฉันฉันพบฮาร์ดลิงก์จำนวนมากใน / usr / share / zoneinfo คิดถึงไฟล์ที่มีชื่อทั้งหมดที่แสดงเขตเวลาซึ่งเหมือนกันกับ EST ทั้งหมด เราประหยัดพื้นที่ระบบไฟล์โดยไม่มีการทำสำเนาซ้ำซ้อนและอนุญาตให้จัดการแพคเกจได้ง่ายขึ้นโดยไม่ต้องมีค่าใช้จ่ายในการจัดการของการติดตั้ง / ลบ symlink เนื่องจากแพ็คเกจถูกติดตั้ง / ลบ แม้ว่าจะมีการลบข้อมูลเดิมจะถูกเก็บไว้ ขออภัยฉันไม่มีเวลาอธิบายเพิ่มเติม
bsd

1

ฮาร์ดลิงก์คือรายการไดเร็กทอรีเพิ่มเติมสำหรับไฟล์เดียวกัน นั่นหมายความว่า

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

    1. เขียนเนื้อหาใหม่ไปยังไฟล์ใหม่
    2. เปลี่ยนชื่อไฟล์เก่าเป็นชื่อสำรอง (หรือหากไม่เก็บข้อมูลสำรองของเวอร์ชันไฟล์ก่อนหน้าให้ลบออก)
    3. เปลี่ยนชื่อไฟล์ที่เขียนใหม่เป็นชื่อไฟล์ก่อนหน้า

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

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

ในทางกลับกันลิงก์สัญลักษณ์จัดเก็บชื่อพา ธ (ชื่อไปยังไฟล์ - หรือแทนรายการไดเรกทอรี - อาจรวมถึงเส้นทางเช่น/bin/shหรือหรือsubdir/foo.bar) - ของไฟล์อื่น หากชื่อพา ธ นั้นสัมพันธ์กันมันจะแปลความสัมพันธ์กับไดเรกทอรีที่ลิงค์นั้นบรรจุอยู่เสมอนั่นหมายถึง:

  • ลิงก์สัญลักษณ์อาจอ้างถึงไฟล์ในระบบไฟล์ที่แตกต่างกัน (แม้จะเป็นระบบไฟล์ที่ไม่สนับสนุนฮาร์ดลิงก์หรือซอฟต์ลิงก์เช่น FAT)

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

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

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

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

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


1

HARD LINK (เฉพาะไฟล์) vs SOFT LINK (ไฟล์หรือไดเรกทอรี) เทียบกับ BIND (HARD LINK สำหรับไดเรกทอรี)

ดูภาพนี้ก่อนที่จะอ่านโพสต์
(ที่มา: freesoftwareservers.com )

ในขณะที่คำตอบของ daxelrod อธิบายคำถามได้ดีฉันคิดว่าภาพในกรณีนี้สร้างความแตกต่างอย่างมากโดยเฉพาะกับผู้เริ่มต้นที่ไม่เข้าใจ inodes และศัพท์แสง Linux ที่ซับซ้อน

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

ฉันอ่าน "หนึ่งสายการบิน" ที่ยิ่งใหญ่ซึ่งทำให้ทุกอย่างเข้าท่าและฉันต้องการแบ่งปัน!

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

สร้าง HARD LINK 2 และลบ HARD LINK 1 ไฟล์ต้นฉบับ :

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

ลบไฟล์ (HARD LINK 1) ที่เชื่อมโยง SOFT ไปที่:

หากคุณลบ HARD LINK 1 คุณคิดว่า SOFT LINK จะใช้งานได้หรือไม่ ไม่ระบบปฏิบัติการจะรายงานกลับมาว่า HARD LINK 1 ไม่มีอยู่

ลบ SOFT LINK ไปยัง HARD LINK:

ในทางกลับกันถ้าคุณลบ SOFT LINK HARD LINK จะทำงานหรือไม่ ใช่. ตราบใดที่ระบบปฏิบัติการมีไฟล์ HARD LINK ไฟล์เดียวมันจะรายงานว่าการเติมนั้นยังไม่ถูกลบ

- มูลค่าการค้นคว้า / สังเกตคือ BIND วิธีการผูกสองไดเรกทอรีเช่น symlinking สองไดเรกทอรี แต่โปร่งใสสำหรับ OS (ระบบปฏิบัติการสามารถบอกได้เมื่อคุณ Symlink และบางคนมีกฎเกี่ยวกับสภาพอากาศที่พวกเขาสามารถติดตาม Symlink) มันใช้ Mount ไม่ใช่ LS และสามารถกำหนดค่าผ่าน FSTAB

เมานต์ BIND คืออะไร


1
นั่นเป็นความพยายามที่ค่อนข้างทะเยอทะยานโดยเฉพาะอย่างยิ่งสำหรับการโพสต์แรก น่าเสียดายที่ฉันเชื่อว่าการเพิ่มเนื้อหาลงใน "ผูกมัด" (ซึ่งไม่ได้ขอ) จะทำให้เกิดความสับสน โดยเฉพาะอย่างยิ่งเมื่อคุณดูเหมือนจะไม่พยายามอธิบายการติดตั้ง "ผูก" มากนัก นอกจากนี้ฉันเข้าใจลิงก์ที่แข็งและนุ่ม / เป็นสัญลักษณ์ได้เป็นอย่างดีและฉันก็แทบจะไม่เข้าใจภาพของคุณ ฉันจะแปลกใจมากหากผู้เริ่มต้นสามารถเรียนรู้อะไรจากมัน
G-Man

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

1
(1) จริง ๆ แล้วบน Linux บางเวอร์ชันคุณสามารถผูกไฟล์ได้ (2) ในขณะที่การเชื่อมโยงการเชื่อมโยงมีลักษณะคล้ายกับการเชื่อมโยงที่ยากมากการพูดว่า "การผูกเป็นเพียงการเชื่อมโยงอย่างหนัก (ยกเว้นคุณไม่สามารถเชื่อมโยงไดเรกทอรีที่ยาก)" ไม่ถูกต้อง
G-Man

@ G-Man ตกลงและนำออกโดยมีเพียงข้อความที่กล่าวถึง BIND
FreeSoftwareServers

@ ฟรีจริง ๆ แล้วซอฟต์ลิงค์ชี้ไปที่ชื่อไฟล์(ฮาร์ดลิงค์ 1); แผนงานควรทำให้สิ่งนี้ชัดเจน
JB

0

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


0

นี่เป็นคำถามที่เก่ามาก แต่ฉันมีกรณีการใช้งานที่ต้องการให้ฉันใช้ฮาร์ดลิงก์

ฉันเป็นนักดนตรีดังนั้นฉันจึงมีไฟล์เสียงมากมายหลายประเภทในฮาร์ดไดรฟ์หลายตัวที่ติดกับ Mac ของฉัน เทราไบต์ ฉันให้พวกเขาส่วนใหญ่จัดระเบียบอย่างดีกับไดเรกทอรี symlink เพื่อให้ฉันสามารถค้นหาพวกเขาโดยผู้เผยแพร่เนื้อหาสไตล์ / เสียงและเกณฑ์อื่น ๆ ตามที่ฉันคิดในเวลานั้น น่าเสียดายที่โปรแกรมหนึ่งที่ฉันใช้ Ableton Live ไม่สามารถดูนามแฝงหรือ symlink จากเบราว์เซอร์ไฟล์ได้อย่างสมบูรณ์ วิธีแก้ปัญหาเดียวที่ฉันพบคือการสร้างฮาร์ดลิงก์ของไดเรกทอรีที่ฉันต้องการให้สามารถดูได้จากนั้นทุกอย่างก็ใช้งานได้ดี

ดังนั้นนี่เป็นอีกกรณีเมื่อคุณอาจต้องใช้ฮาร์ดลิงก์ซึ่งอาจไม่เกิดกับผู้อื่น


ฉันจะยื่นรายงานข้อผิดพลาดสำหรับ Ableton Live บางทีพวกเขาสามารถแก้ไขปัญหานี้ได้
aventurin

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