อะไรคือความแตกต่างระหว่างจุดเชื่อมต่อระบบไฟล์ NTFS และลิงค์สัญลักษณ์?


140

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

มีความแตกต่างอะไรอีกระหว่างสองสิ่งนี้?

(หมายเหตุฉันได้เห็นคำถามนี้แล้วและสิ่งที่ฉันกำลังมองหาแตกต่างออกไปเล็กน้อย - คำถามนั้นกำลังค้นหารายการผู้เชี่ยวชาญและการต่อต้านฉันกำลังมองหาชุดของความแตกต่างทางเทคนิค)

คำตอบ:


88

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

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

** คำแถลงความแตกต่างของความเร็ว / ความซับซ้อนมาจากคำแถลงที่ยังไม่ผ่านการตรวจสอบในรายการ Wikipedia บนจุดแยกย่อยของ NTFS (การอ่านที่ดี)


การเปรียบเทียบลิงค์ NTFS อื่น ๆ

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

นำมาจากที่นี่ (อ่านเบื้องต้นที่ดี)

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

จากหน้า SS64 บน MKLink

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


ความคิดเห็นเกี่ยวกับคำศัพท์

จุดเชื่อมต่อเป็นจุดแยกซัด (อาจอธิบายเป็นลิงก์สัญลักษณ์)

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

NTFS

ถึงแม้ว่า OP จะระบุสิ่งนี้ แต่มันก็คุ้มค่าที่จะชี้ให้เห็นว่า "symbolic link" เป็นคำทั่วไปที่ไม่เฉพาะ NTFS ดังนั้นเพื่อให้มีความเฉพาะเจาะจงการเปรียบเทียบนี้เป็นเรื่องเกี่ยวกับ NTFS Junctions vs. การเชื่อมโยงสัญลักษณ์ NTFS


จุดเชื่อมต่อและลิงก์สัญลักษณ์เป็นทั้งจุดแยกย่อย แต่จุดเชื่อมต่อส่วนใหญ่ไม่ใช่ลิงก์สัญลักษณ์! โอ้และตารางผิดหนึ่งนับด้วย เป้าหมายของจุดเชื่อมต่อจะต้องมีอยู่เมื่อสร้าง แต่อาจถูกลบในภายหลัง
0xC0000022L

3
@ 0xC0000022L ใช่คุณพูดถูกถ้าสิ่งที่คุณพูดคือ NTFS Junction นั้นไม่ใช่ลิงก์สัญลักษณ์ของ NTFS ฉันสามารถดูว่าถ้อยคำของฉันอาจเข้าใจผิดที่จะพูดนี้ ฉันจะแก้ไขเพื่อให้ชัดเจน แต่ประเด็นก็คือในบริบทนี้ "ลิงก์สัญลักษณ์" หมายถึงลิงก์สัญลักษณ์ NTFS ซึ่งเป็นการใช้งานเฉพาะของแนวคิด "สัญลักษณ์ลิงก์" ทั่วไปซึ่งเป็นส่วนหนึ่งของ Junctions คุณติดตามลิงค์ที่ฉันโพสต์หรือไม่? ไม่ได้บอกว่าทางแยก NTFS เป็นลิงค์สัญลักษณ์ของ NTFS แต่สามารถใช้คำว่า "สัญลักษณ์การเชื่อมโยง" เพื่ออธิบายจุดเชื่อมต่อได้
u8it

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

@ 0xC0000022L ฉันไม่เห็นปัญหาที่คุณพูดถึงตารางผิด คุณอ้างถึงคุณลักษณะ "สามารถชี้ไปที่เป้าหมายที่ไม่มีอยู่จริง" ได้หรือไม่? และคุณกำลังบอกว่านี่เป็นสิ่งที่ผิดอย่างน้อยในตอนแรกที่สร้างทางแยก หากคุณแน่ใจว่าเป็นกรณีในสภาพแวดล้อมที่เฉพาะเจาะจง (อาจเป็นสำหรับ Windows XP หรือเนื่องจากการตั้งค่าความปลอดภัย) ฉันจะจดบันทึกสิ่งนั้น แต่ในประสบการณ์ของฉันและจากเอกสารประกอบ (และฉันเพิ่งยืนยันบน Windows 10) ทางแยกสามารถ กำหนดเส้นทางที่ไม่มีอยู่เสมอแม้ว่าจะสร้าง ... อาจมีการตั้งค่าความปลอดภัยที่ จำกัด สิ่งนี้
u8it

ทางแยกไม่ใช่มรดก พวกเขาใช้จุดเชื่อมต่อ (ผูก / ปริมาณ) ไม่ใช่ symlinks เมื่อมีการแยกวิเคราะห์พา ธ ในที่เปิดระบบจะจดจำจุดเชื่อมต่อที่สำรวจเพื่อประเมิน symlink สัมพัทธ์ที่สำรวจจุดเชื่อมต่อ Traversals เหล่านี้จำเป็นต้องจัดการจุดเชื่อมต่อราวกับว่าเป็นไดเรกทอรีปกติในขณะที่ symlink จะถูกแยกวิเคราะห์เป็นเส้นทางเป้าหมาย ตัวอย่างเช่นพูดว่า "C: \ junction" และ "C: \ symlink" ทั้งเป้าหมาย "E: \ spam" และ symlink สัมพัทธ์ "E: \ spam \ eggs.txt" เป้าหมาย ".. \ eggs.txt" จากนั้น "C: \ junction \ eggs.txt" จะเปลี่ยนเป็น "C: \ eggs.txt" และ "C: \ symlink \ eggs.txt" จะเปลี่ยนเป็น "E: \ eggs.txt"
Eryk Sun

35

สถานที่ที่ฉันพบว่ามีประโยชน์มากที่สุดสำหรับความแตกต่าง:

http://blogs.msdn.com/b/junfeng/archive/2006/04/15/576568.aspx

http://www.hanselman.com/blog/MoreOnVistaReparsePoints.aspx

Postulate: Symlink คือ Junction ใน Windows เนื่องจาก Symlink คือ Hardlink ใน Unix

http://en.wikipedia.org/wiki/Symbolic_link#Windows_7_.26_Vista_symbolic_link

Windows 7 และ Windows Vista รองรับการเชื่อมโยงสัญลักษณ์สำหรับไฟล์และไดเรกทอรีด้วยอรรถประโยชน์บรรทัดคำสั่ง mklink ซึ่งแตกต่างจากจุดเชื่อมต่อสัญลักษณ์ลิงก์ยังสามารถชี้ไปที่ไฟล์หรือเส้นทางเครือข่าย Server Message Block (SMB) ระยะไกล นอกจากนี้การใช้ลิงก์สัญลักษณ์ NTFS ยังให้การสนับสนุนอย่างเต็มรูปแบบสำหรับการเชื่อมโยงข้ามระบบไฟล์ อย่างไรก็ตามฟังก์ชั่นที่เปิดใช้งานลิงค์สัญลักษณ์ข้ามโฮสต์ต้องการให้ระบบระยะไกลรองรับเช่นกันซึ่ง จำกัด การสนับสนุน Windows Vista และระบบปฏิบัติการ Windows ในภายหลังอย่างมีประสิทธิภาพ

http://www.tuxera.com/community/ntfs-3g-advanced/junction-points-and-symbolic-links/

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


1
สำหรับข้อมูลเฉพาะของ Windows 7: msdn.microsoft.com/en-us/library/windows/desktop/ ......
Joshua Drake

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

@elgonzo เห็นด้วยทั้งหมด AFAIK ฮาร์ดลิงก์ Unix สามารถอ้างถึงไฟล์เท่านั้นดังนั้นจึงไม่เหมือนกับการแยกไดเรกทอรี NTFS เลย
Franklin Yu

20

ฟังก์ชั่นใน windows เมื่อสร้างขึ้นไม่มีความแตกต่างที่แท้จริง อย่างไรก็ตามมีความแตกต่างอย่างมีนัยสำคัญระหว่างพวกเขาในสิ่งที่พวกเขาสามารถทำได้ จุดแยกสามารถใช้สำหรับการสร้างลิงก์ไปยังโฟลเดอร์ไม่ว่าจะเป็นไดรฟ์เดียวกันหรือไดรฟ์อื่น แต่หากไดรฟ์เหล่านั้นอยู่ในระบบภายในเครื่อง (คุณไม่สามารถสร้างลิงก์เชื่อมต่อไปยังโฟลเดอร์ผ่านเครือข่าย) ลิงก์สัญลักษณ์ อย่างไรก็ตามไม่มีข้อ จำกัด เหมือนกัน ลิงก์สัญลักษณ์สามารถใช้ลิงก์ไปยังไฟล์หรือโฟลเดอร์และไฟล์หรือโฟลเดอร์เหล่านั้นสามารถอยู่ในระบบเดียวกัน (ไดรฟ์เดียวกันหรือไดรฟ์อื่น) หรือไปยังเครือข่ายที่ใช้ร่วมกันและสามารถใช้สัญลักษณ์ตำแหน่งสัมพันธ์ ("\\ system2 \ foldera \ file.txt "," d: \ foldera \ file.txt "," \\ system2 \ foldera "," d: \ foldera "หรือ" d: \ foldera \ folderb .. "

ในการสรุปผล: จุดเชื่อมต่อถูก จำกัด เฉพาะโฟลเดอร์ในระบบโลคัลเท่านั้นในขณะที่ Symbolic Links สามารถสร้างลิงก์ไปยังโฟลเดอร์หรือไฟล์ที่สามารถเข้าถึงได้ผ่านเส้นทาง UNC หรือบนระบบโลคัลที่มีความสามารถในการกำหนดตำแหน่งเหล่านั้นได้มากขึ้น Symbolic Links นั้นเป็นสิ่งที่ใช้แทนจุดเชื่อมต่อและ Hard Links ได้อย่างหลากหลาย นอกจากนี้ Symbolic Links เข้ากันได้กับ Unix และ Linux เมื่อสร้าง cross path UNC pathed link

หวังว่านี่จะตอบคำถามของคุณอย่างน่าพอใจ แก้ไขเพื่อแก้ไขข้อผิดพลาดในการพิมพ์


10

Link Shell Extension, http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.htmlเป็นเครื่องมือที่ยอดเยี่ยมสำหรับการสร้างและดูลิงค์หลายประเภท นอกจากนี้ยังมีเอกสารที่ยอดเยี่ยม

[ในการติดตั้งแบบเต็มจะเพิ่มแท็บคุณสมบัติใหม่หากคุณกำลังมองหาลิงก์ขั้นสูง ที่ยังเพิ่มลูกศรไอคอนซ้อนทับสำหรับประเภทการเชื่อมโยงต่างๆ - เลื่อนไปที่ส่วนคำถามที่พบบ่อยหากสิ่งเหล่านี้ไม่ปรากฏขึ้น; Windows รองรับเฉพาะโอเวอร์เลย์สิบสามเท่านั้น เขาแสดงวิธีแก้ไขรีจิสทรี ตัวอย่างของข้อมูลที่มีประโยชน์: ไม่ประสบความสำเร็จในการพยายามรับสิทธิ์ในสิ่งที่คุณคิดว่าเป็นโฟลเดอร์ แต่อันที่จริงแล้วคือ Junction Link ที่ระบบจัดเตรียมไว้ให้ซึ่งมักใช้เพื่อวัตถุประสงค์ในการเข้ากันได้กับ Windows รุ่นเก่า]

Junctions และ Symbolic Links ทำหน้าที่เหมือนกันเมื่อสร้างขึ้นสำหรับไดเรกทอรีในระบบท้องถิ่น

อย่างไรก็ตาม:

พวกเขาทำหน้าที่แตกต่างกันผ่านเครือข่าย ลิงก์นี้อธิบายพฤติกรรมนี้: /superuser/343074/directory-junction-vs-directory-symbolic-link

หากคุณคิดว่า Junction Links เป็น "ทางลัดที่หลอกระบบปฏิบัติการให้เป็นที่ตั้ง" คุณจะได้รับประโยชน์จากการใช้งานและสิ่งที่ทำให้แตก ความแตกต่างที่สำคัญคือถ้าคุณคัดลอก Symbolic Links หรือ Junctions จะเป็นการคัดลอกเป้าหมายแทนที่จะเป็นไฟล์ทางลัดที่มีตัวชี้ เช่นเดียวกับทางลัดคุณสามารถลบ Symbolic หรือ Junction Links โดยไม่ต้องลบไฟล์ / โฟลเดอร์เป้าหมาย [ฮาร์ดลิงค์ไฟล์จะถูกลบเฉพาะเมื่อมีการลบลิงค์ล่าสุด - รวมถึงจากถังรีไซเคิล ดูที่แท็กคุณสมบัติใน LSE เพื่อหาลิงก์เหล่านี้เพื่อดูเป้าหมายหรือจำนวนการอ้างอิงสำหรับฮาร์ดลิงก์]

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

การสร้าง Symbolic Links ต้องการสิทธิ์ของผู้ดูแลระบบในขณะที่ Junctions ไม่ต้องการ สิ่งนี้รวมถึงการใช้ Junctions ระบบปฏิบัติการภายในที่กว้างขวางแสดงให้เห็นว่า Windows จัดการสิ่งเหล่านี้ในลักษณะที่ใช้งานง่ายและคาดหวัง [ต้องระวังผลข้างเคียงที่ไม่คาดคิดจากโฟลเดอร์ระบบ (จากประสบการณ์กับ Win 10)

[คุณสมบัติเฉพาะการสำรองข้อมูลบางส่วนของ Link Shell Extension มีประโยชน์อย่างยิ่ง - โดยย่อสามารถสร้างโครงสร้างลิงก์สัญลักษณ์ที่สามารถอัปเดตได้หลายประเภทในโฟลเดอร์มาตรฐานเพื่อการสำรองข้อมูลที่ค้างอยู่]


และ Link Shell Extension ดูเหมือนเป็นเครื่องมือที่ยอดเยี่ยม นอกจากนี้ยังมียูทิลิตี้น้ำหนักเบาที่เกี่ยวข้องที่เรียกว่าln.exe ... แม้ว่าคุณจะไม่ได้ใช้งานคุณก็จะได้เรียนรู้มากมายจากการอ่านคู่มือผู้ใช้ที่ตรงไปตรงมาของเว็บไซต์
u8it

ฉันคิดว่าการแก้ไขของคุณเมื่อวันที่ 2 เม.ย. 2559 ทำให้สิ่งที่ชัดเจนน้อยลงดิน ฉันคิดว่าคุณหมายถึงสิ่งนี้: "ความแตกต่างหลักระหว่างไฟล์เหล่านี้และ 'ทางลัด' คือถ้าคุณ ... มันจะคัดลอกเป้าหมายไม่ใช่แค่ไฟล์ที่มีตัวชี้ (ซึ่งเป็นสิ่งที่เกิดขึ้นหากคุณคัดลอกทางลัด ไฟล์) "
Jon Coombs

4

ลิงค์สัญลักษณ์ได้รับการแนะนำใน Windows เมื่อเร็ว ๆ นี้: จาก Vista

ลิงก์สัญลักษณ์ไม่ควรถือเป็นทางเลือกแทนเทคโนโลยี "จุดแตกหัก" ของ NTFS ที่มีอยู่

Microsoft อธิบายว่าจุดประสงค์เดียวของลิงก์สัญลักษณ์คือเพื่อให้เข้ากันได้กับ Unix

MSDN: " ลิงก์สัญลักษณ์ได้รับการออกแบบมาเพื่อช่วยในการโยกย้ายและความเข้ากันได้ของแอปพลิเคชันกับ UNIX Microsoft ได้นำลิงค์สัญลักษณ์ไปใช้เพื่อทำงานเหมือนกับลิงก์ UNIX "

Vista ยังเป็นระบบปฏิบัติการตัวแรกที่ใช้ลิงค์สำหรับการทำงานของตัวเอง เข้ากันได้กับชื่อโฟลเดอร์เดิมอยู่ในขณะนี้เชื่อมโยงไปยังC:\Documents and SettingsC:\Users

ที่น่าสนใจแม้ว่า Vista จะแนะนำลิงก์สัญลักษณ์ แต่Documents and Settingsกลอุบาย "" นี้เป็นทางแยกเก่าแบบธรรมดา


2
คำตอบนี้ไม่ได้พูดอะไรเกี่ยวกับความแตกต่างระหว่างลิงก์สัญลักษณ์และทางแยก (เช่นนี้ฉันไม่คิดว่ามันใช้ได้กับคำถามนี้จริง ๆ )
Billy ONeal

จาก Windows Vista เชื่อมโยงสัญลักษณ์เป็นต้นไปแทนที่ Junctions (ยังเป็นที่ที่เรารู้ว่าทั้งสองเป็นจุดแยกวิเคราะห์ใหม่)
Aravind

2

นอกจากคำตอบที่ยอดเยี่ยมจาก u8it:

หากใครสนใจความแตกต่างของพฤติกรรมในWindows File Explorerใน Windows 10:

ลากและวางไปยังไดเรกทอรีเป้าหมาย:

  • symbolic link: ย้ายsymbolic linkไปยังไดเรกทอรีเป้าหมาย
  • junction: ย้ายoriginal directoryไปยังไดเรกทอรีเป้าหมาย

คลิกเมาส์ขวาที่ + คุณสมบัติ:

  • symbolic link: แสดงคุณสมบัติทางลัดให้คุณ
  • junction: แสดงoriginal directoryคุณสมบัติโฟลเดอร์

คลิกซ้ายในบานหน้าต่างด้านซ้าย ( แผนผังไดเรกทอรี):

  • symbolic link: เลือก original directory
  • junction: เลือก junction

การสร้าง Symbolic Links ต้องใช้สิทธิ์ของผู้ดูแลระบบในขณะที่ Junctions ไม่ต้องการ
Jinjinov

Windows 10 เวอร์ชัน 10.0.17134.1130: การย้ายจุดเชื่อมต่อใน explorer จะย้ายเฉพาะเนื้อหาของไดเรกทอรีต้นฉบับเท่านั้น คลิกซ้ายที่ลิงก์สัญลักษณ์ในแผนผังไม่ได้เลือกไดเรกทอรีดั้งเดิม
SalgoMato
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.