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


488

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

นอกจากนี้มันจะดีถ้ามีใครสามารถจัดให้มีการตั้งค่าที่อาจมีการเชื่อมโยงอย่างหนักกว่าลิงก์สัญลักษณ์


15
หนึ่งในความแตกต่าง ... คุณมีไฟล์เช่นการทดสอบไฟล์ หากคุณสร้างลิงก์ทดสอบ ln ให้สร้างลิงก์ทดสอบ ln -s แล้วย้ายการทดสอบไฟล์ไปยัง dir อื่น (หรือเปลี่ยนชื่อ) symlink จะไม่ทำงาน Hardlink จะทำงาน ตอนนี้ลองลบการทดสอบไฟล์ Hardlink จะยังคงทำงานในความเป็นจริงคุณจะยังคงสามารถ acces ไฟล์จนกว่าจำนวน hardlinks จะยื่น 0. Thats ไม่ได้เพราะ inodes มันเขียนในคู่มือ ...
Denwerko

5
ฉันเปิดใหม่อีกครั้งเพราะสมควรได้รับคำตอบทั่วไปที่ดีเกี่ยวกับปัญหานี้ (ไม่เหมือนคำถามก่อนหน้านี้ที่เป็นตัวอย่าง C ที่คลุมเครือ)
Oli

4
คำตอบที่ดีที่สุด: youtube.com/watch?v=aO0OkNxDJ3c
Abhishek Bhatia

1
ยังเป็นคำตอบที่สมบูรณ์ทีเดียว: stackoverflow.com/questions/185899/…
Elzo Valugi

@AbhishekBhatia วิดีโอไม่พร้อมใช้งาน
Ooker

คำตอบ:


59

ใน Linux / Unix ทางลัดนั้นรู้จักกันในชื่อ Links


การเชื่อมโยงมีสองประเภท: ซอฟต์ลิงค์ (ลิงก์สัญลักษณ์) หรือฮาร์ดลิงก์

  1. ซอฟต์ลิงค์ ( ลิงค์สัญลักษณ์)

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

    ถ้าจริงสำเนาถูกลบการเชื่อมโยงจะไม่ทำงาน

  2. ลิงค์ยาก

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

    หากสำเนาจริงถูกลบลิงก์จะทำงานเนื่องจากจะเข้าถึงข้อมูลพื้นฐานที่สำเนาจริงกำลังเข้าถึง


คำถาม:ฉันจะสร้างซอฟต์ลิงค์ได้อย่างไร?

คำตอบ:ลิงค์นุ่มสามารถทำกับln -s; ก่อนอื่นคุณต้องกำหนดแหล่งที่มาจากนั้นคุณจะต้องกำหนดปลายทาง (โปรดทราบว่าคุณต้องกำหนดเส้นทางแบบเต็มของทั้งต้นทางและปลายทางมิฉะนั้นจะไม่สามารถใช้งานได้)

 sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib32/libGL.so.1
             (----------Source-------)             ( Destination )

ป้อนคำอธิบายรูปภาพที่นี่

อย่างที่คุณเห็นมันมีไอโหนดที่ต่างกันและสามารถสร้างได้ในพาร์ติชั่นอื่น


คำถาม:ฉันจะสร้างฮาร์ดลิงก์ได้อย่างไร

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

สมมติว่าผมมีสคริปต์ในส่วนไดเรกทอรีชื่อ/scriptfirefox

 ls -i # Shows you the inode
 5898242 firefox

 ln /scripts/firefox /scripts/on-fire
       ( Source )    ( Destination )

ป้อนคำอธิบายรูปภาพที่นี่

อย่างที่คุณเห็นมันมีไอโหนดเดียวกัน ถ้าฉันลบต้นฉบับลิงค์จะใช้ได้และมันจะทำหน้าที่เหมือนต้นฉบับ

ป้อนคำอธิบายรูปภาพที่นี่

ด้านบนฉันตรวจสอบว่าลิงก์ใช้งานได้แล้วลบสคริปต์ firefox ดั้งเดิม


คุณคำถาม:มันจะดีถ้ามีคนสามารถให้การตั้งค่าที่อาจมีการเชื่อมโยงอย่างหนักกว่าลิงก์สัญลักษณ์

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

ในทางกลับกันซอฟต์ลิงก์สามารถชี้ไปที่ไดเร็กทอรีหรือไฟล์ (+1 จุด) และไม่มีข้อ จำกัด ของพาร์ติชัน (+1 จุด) แต่(-1 จุด)หากแหล่งที่มาถูกลบลิงก์จะไม่ทำงาน


ฉันสามารถสร้างฮาร์ดลิงก์และระบุไอโหนดเป็นแหล่งที่มาได้หรือไม่?
TMOTTM

324

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

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


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

320

"ภาพที่มีค่าพันคำ." การเป็นตัวแทนภาพ


และ "ตัวอย่างมีค่าหนึ่งร้อยย่อหน้า ... "

สร้างสองไฟล์:

$ touch blah1   
$ touch blah2

ป้อนข้อมูลบางส่วนลงไป:

$ echo "Cat" > blah1
$ echo "Dog" > blah2

และตามที่คาดไว้:

$cat blah1; cat blah2
Cat
Dog

มาสร้างลิงก์ที่แข็งและอ่อนนุ่มกันเถอะ:

$ ln blah1 blah1-hard
$ ln -s blah2 blah2-soft

มาดูกันว่าเกิดอะไรขึ้น:

$ ls -l

blah1
blah1-hard
blah2
blah2-soft -> blah2

การเปลี่ยนชื่อของ blah1 ไม่สำคัญ:

$ mv blah1 blah1-new
$ cat blah1-hard
Cat

blah1-hard ชี้ไปที่ inode, เนื้อหา, ของไฟล์ - ที่ไม่เปลี่ยนแปลง

$ mv blah2 blah2-new
$ ls blah2-soft
blah2-soft
$ cat blah2-soft  
cat: blah2-soft: No such file or directory

ไม่พบเนื้อหาของไฟล์เนื่องจากซอฟต์ลิงก์ชี้ไปที่ชื่อที่ถูกเปลี่ยนแปลงและไม่ไปที่เนื้อหา
ในทำนองเดียวกันถ้าลบ blah1 แล้ว blah1-hard จะยังคงมีเนื้อหาอยู่ ถ้าลบ blah2, blah2-soft เป็นเพียงลิงก์ไปยังไฟล์ที่ไม่มีอยู่


แหล่งที่มา: คัดลอกมันโจ๋งครึ่มจากStackOverflow!


13
เพื่อความเป็นธรรมกับคุณ - คุณเพิ่มภาพน่ารักที่ด้านบน ... อาคุณก็คัดลอกมาด้วย! การรวมคำตอบทั้งสองเข้าด้วยกันเป็นประโยชน์จริง ๆ :)
icc97

2
อธิบายได้ดีขึ้นที่ไหนเลย!
dennisbot

3
ฉันจ้องมองที่ภาพเป็นเวลา 20 วินาทีจากนั้นทันใดนั้นฉันก็คิดออก อันนี้ยอดเยี่ยมจริงๆ
Mohammed Joraid

1
btw: การใช้ฮาร์ดลิงก์ด้วยgit เป็นความคิดที่ไม่ดีในกรณีที่มีคนสงสัย (หงุดหงิดกับซอฟต์ลิงค์) ... สามารถนำไปใช้กับระบบเวอร์ชันอื่น ๆ ได้เช่นกัน
Frank Nocke

1
inode ไปยัง hardlink ของมันคล้ายกับไฟล์ที่จัดเก็บในคลาวด์กับอุปกรณ์ใด ๆ ที่เข้าถึงมันได้หรือไม่?
Ooker

89

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

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

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


If you replace the named file, then the link still contains the same name, and so now it points to the new file- ฉันคิดว่ามันไม่ได้อธิบายอย่างดี คุณหมายถึงถ้าฉันแทนที่ไฟล์ที่ฉันได้รับลิงก์สัญลักษณ์ไปแล้วลิงก์ที่มีชื่อยังคงไม่ถูกแตะต้อง แต่มันจะชี้ไปที่ไฟล์ที่ถูกแทนที่เมื่อชื่อไฟล์ (เช่นไฟล์ใหม่ซึ่งแทนที่ไฟล์เก่า) นั้นเหมือนกับไฟล์ที่ถูกแทนที่ (เช่นไฟล์เก่าที่ถูกแทนที่ด้วยไฟล์ใหม่) ใช่ไหม?
Mike

@ ไมค์, ใช่: ลิงก์สัญลักษณ์ชี้ไปที่ชื่อไฟล์ต้นฉบับดังนั้นการแทนที่ไฟล์นั้นหมายความว่าตอนนี้ลิงก์ชี้ไปที่ไฟล์ใหม่
psusi

หากมันมีชื่อเดียวกันถูกต้องเท่านั้น symlink จะชี้ไปที่ Banana และฉันแทนที่ไฟล์ด้วยสีส้มแล้ว sy link จะไม่สามารถหาไฟล์ Banana ได้อีกต่อไปนั่นคือมันจะไม่ทำงาน
Mike

@ ไมค์โลกแทนที่หมายความว่ามันมีชื่อเดียวกันมิฉะนั้นคุณเพียงแค่ลบไฟล์เดียวและเพิ่มอีก;)
psusi

58

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

symlink (symbolic link) เป็นไฟล์พิเศษที่มีเส้นทางไปยังไฟล์อื่น เส้นทางนี้สามารถเป็นแบบสัมบูรณ์หรือแบบสัมพัทธ์ symlink สามารถทำงานได้ในระบบไฟล์และยังสามารถชี้ไปที่ไฟล์ต่าง ๆ ได้เช่นหากคุณถอดปลั๊กฮาร์ดไดรฟ์ภายนอกและแทนที่ด้วยฮาร์ดไดรฟ์ตัวอื่นซึ่งมีไฟล์ต่างกันที่พา ธ เดียวกัน symlink สามารถชี้ไปที่ไฟล์หรือไดเรกทอรี


ขอบคุณสิ่งนี้บอกฉันว่ามันทำงานอย่างไร แต่ฮาร์ดไดรฟ์ทำหน้าที่อะไรกันแน่? และทำไมมันไม่ทำงานกับไดเรกทอรี?
ste_kwr

@ knittl: คุณแน่ใจเหรอ? ดูเหมือนว่าในบางระบบอนุญาตให้ลิงก์ไปยังไดเรกทอรีได้ แต่อนุญาตให้รูทสามารถสร้างได้ ดู-d, -F, --directoryสวิตช์ และใช่ฉันได้เห็นข้อความในln(1)หน้า :)
0xC0000022L

1
@ kniwor: วิธีที่ง่ายที่สุดในการอธิบายฮาร์ดลิงก์คือ "ชื่ออื่นสำหรับไฟล์เดียวกัน (นั่นคือข้อมูลบนดิสก์)" และ - อย่างน้อยในระบบของฉัน - lnไม่สามารถใช้สร้างลิงก์ไปยังไดเรกทอรีได้ มี hardlinks ไปยังไดเรกทอรีที่มีอยู่ แต่ตัวอย่างที่โดดเด่นที่สุดและ. ..ฉันไม่ต้องการที่จะรวมไว้ในคำตอบเดิมของฉันเพราะจะทำให้สิ่งที่ซับซ้อนเท่านั้น
knittl

2
@STATUS_ACCESS_DENIED: ก็โอเค… แต่โดยปกติแล้วมันจะไม่ใช่ความคิดที่ดี นั่นเป็นเหตุผลที่ฉันเขียน»มักจะ«ในคำตอบเดิมของฉัน ดูความคิดเห็นก่อนหน้าของฉันสำหรับตัวอย่าง
knittl

ดังนั้นฮาร์ดลิงก์สามารถชี้ไปยังโฟลเดอร์ / ไฟล์เดียวกันที่มีชื่อแตกต่างกันเช่นมีชื่อต่าง ๆ ที่ลิงก์ไปยังไอโหนดเดียวกันหรือไม่?
Charlie Parker

21

หนึ่งในคำตอบจากหัวข้ออื่น (ตอนนี้เชื่อมโยงจากด้านบนของโพสต์ของคุณ) กล่าวถึงหน้านี้ซึ่งฉันคิดว่าเป็นคำอธิบายระดับกลางที่ค่อนข้างดี หากคุณหลงทางใน ascii art นี่คือเวอร์ชัน tl; dr:

  • ไฟล์มาตรฐานเป็นตัวชี้จากระบบแฟ้มไปยัง inode ซึ่งจะชี้ไปที่ข้อมูลทางกายภาพ องค์ประกอบไฟล์เก็บลิงค์ไปยังระบบไฟล์ (เป็นหลักเส้นทางของมัน) และลิงค์ไปยังไอโหนด
  • ฮาร์ดลิงก์เป็นเหมือนไฟล์ พวกมันเป็นเพียงตัวชี้เพิ่มเติมไปยังไอโหนดโดยตรง
  • Symbolic-links เป็นไฟล์แยกต่างหาก (รวมถึง inode และ data แยกต่างหาก) ที่เก็บพา ธ ระบบไฟล์ไปยังไฟล์

เคอร์เนลและระบบไฟล์เกี่ยวข้องกับการแปลทุกอย่างอย่างโปร่งใส

ดังนั้นตามที่:

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

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

การเพิ่มฮาร์ดลิงก์นั้นเป็นเพียงการให้ inode พร้อมกับตัวชี้ที่อิงกับระบบไฟล์เพิ่มเติม นั่นถูกต้องใช่ไหม?


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

ฉันกำลังพยายามที่จะเข้าใจสิ่งนี้ ... แต่คุณพูดว่า:> "Symbolic-links เป็นไฟล์ที่แยกต่างหาก (รวมถึง inode และ data ที่แยกต่างหาก) ที่เก็บเส้นทางของระบบไฟล์ไปยังไฟล์" symlink มีข้อมูลแยกกันจริงๆหรือ งั้นมันก็เหมือนกับสำเนาของ dir ที่มันลิงก์ไปใช่ไหม? ... และทุกครั้งที่มีการเขียนสิ่งที่ symlink จะต้องมีการเขียนสองครั้งในดิสก์? ทำให้รู้สึกไม่
MiniGod

@MiniGod ไม่มี symlink เป็น inode ไปยังบล็อกของข้อมูลที่เก็บพา ธ ไปยัง inode อื่น (ชื่อไฟล์) ใช่มัน Matrix เหมือนสับสน แต่เมื่อคุณได้รับมันคุณจะไม่มีวันลืม :)
Oli

@Oli ฉันอาจสับสน แต่เมื่อคุณพูดว่า: "รวม inode และ dataแยกต่างหาก" คุณหมายถึงว่า symlink มีข้อมูลแยกต่างหาก!
MiniGod

1
@MiniGod ใช่ Symlink เป็น inode ที่ชี้ไปที่ข้อมูล (เช่นเดียวกับไฟล์ปกติ) และข้อมูลนั้นเป็นเส้นทาง มันฉลาดกว่านี้นิดหน่อยเพื่อให้สามารถใช้งานได้อย่างโปร่งใสผ่าน symlink แต่นั่นคือทั้งหมดที่พวกเขามี
Oli

15

เมื่อใดที่จะใช้ Soft Link:

ลิงก์ข้ามระบบไฟล์: หากคุณต้องการเชื่อมโยงไฟล์ข้ามระบบไฟล์คุณสามารถใช้ symlink / soft link เท่านั้น

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

เมื่อใดที่จะใช้ฮาร์ดลิงก์:

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

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

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


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

8

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

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

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

Symlinks ตามที่อธิบายไว้ก่อนหน้านี้เพียงบอกคุณว่า "มีไฟล์ชื่อ<targetname>ในโฟลเดอร์ชื่อ<targetfolder>" พวกเขาชี้ไปที่ลิงค์ยาก พวกเขาไม่รู้ว่าข้อมูลอยู่ที่ไหน การเชื่อมโยงอย่างหนักรู้ว่า


0

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

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