Symbolic Link และ Shortcut แตกต่างกันอย่างไร?


คำตอบ:


54

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

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


6
คำสั่งการเดินบนต้นไม้ (เช่นยูทิลิตี้ยูนิกซ์ find, tar, duฯลฯ ) ทำ จำเป็นต้องรู้เกี่ยวกับลิงก์สัญลักษณ์หรืออาจทำสิ่งที่โง่มาก ตัวอย่างเช่นการทำให้ไม่เห็นลิงก์สัญลักษณ์ต่อไปนี้สามารถสร้างรอบในระบบไฟล์และนั่นคือ ไม่ดี .
dmckee

9
@dmckee; จุดดีมากในขณะที่แอปพลิเคชันไม่ต้องการการสนับสนุนที่เฉพาะเจาะจงเพื่อติดตามพวกเขาพวกเขาต้องการการสนับสนุนเฉพาะ ไม่ ตามพวกเขา!
Phoshi

ใช่ไม่ต้องการการสนับสนุน ใช้ พวกเขา แต่ไม่จำเป็นต้อง รู้เกี่ยวกับ พวกเขา
dmckee

@Phoshi คุณหมายความว่าอย่างไร "และพวกเขาต้องการแอปพลิเคชันเพื่อสนับสนุนประเภทไฟล์นั้นเพื่อใช้งาน" คุณช่วยอธิบายด้วยตัวอย่างได้ไหม
Geek

5
@Geek: "ทางลัด" เป็นไฟล์ที่เก็บไฟล์พา ธ ของไฟล์อื่นได้อย่างมีประสิทธิภาพ เมื่อคุณอ่านคุณจะอ่านไฟล์ที่มีการจัดรูปแบบเป็นพิเศษซึ่งจะบอกคุณว่าจะดูที่ไหนต่อไป หากแอปพลิเคชันของคุณไม่รับฟังและเพียงแค่อ่านคำต่อคำไฟล์คุณจะไม่ติดตาม ลิงก์สัญลักษณ์คือระดับระบบไฟล์เป็นระบบไฟล์ที่เก็บพา ธ "ของจริง" ไว้กับข้อมูลและเมื่อคุณพยายามเข้าถึงคุณจะดึงข้อมูลที่ชี้ไป
Phoshi

19

"Symbolic Link" สามารถทำหน้าที่แทนไดเร็กตอรี่หรือไฟล์ในแบบที่ใช้งานได้และมักใช้ในสภาพแวดล้อม Unix / Linux แม้ว่าจะมีการสนับสนุนใน Windows แต่ฉันยังไม่เห็นการใช้งานจริง

"ทางลัด" เป็นเพียงไฟล์ปกติที่มีการอ้างอิงไปยังไฟล์ปลายทางหรือไดเรกทอรีพร้อมกับสิ่งอื่น ๆ เช่นไอคอนที่จะแสดง ไม่เหมือนกับ Symbolic Link คุณไม่สามารถ "cd ./shortcut-name" ใน DOS (ใน Unix / Linux คุณสามารถ "cd ./symlink-name" และมันจะทำงานเหมือนกับไดเรกทอรีย่อยจริง)

นอกจากนี้ในแอปพลิเคชัน Windows ส่วนใหญ่เมื่อคุณคลิกที่ทางลัดในกล่องโต้ตอบ File- & gt; Open GUI ช่องชื่อไฟล์ของคุณจะถูกเติมด้วยชื่อไฟล์ของทางลัดนั้นและทำหน้าที่เหมือนไดเรกทอรีย่อยในขณะที่ Unix / Linux the GUI ใช้ Symbolic Link เป็นพา ธ (โดยไม่ต้องแก้ไขฟิลด์ชื่อไฟล์)


ใน Unix / Linux นอกจากนี้ยังมี "ฮาร์ดลิงก์" ซึ่งใช้เฉพาะกับไฟล์ (ไม่ใช่ไดเรกทอรี) เหล่านี้เป็นรายการชื่อไฟล์ธรรมชาติในระบบไฟล์ที่เพิ่งเกิดขึ้นชี้ไปที่ข้อมูลไฟล์เดียวกับรายการชื่อไฟล์อื่นที่อื่น (ไม่จำเป็นต้องอยู่ในไดเรกทอรีเดียวกัน)
Randolf Richardson

4
@Randolf: 1) มี hardlinks ใน Windows เช่นกัน 2) คุณลักษณะหนึ่งของเชลล์ลัดคือการติดตามเป้าหมายอัตโนมัติ - หากเป้าหมายถูกย้ายไปแล้วทางลัดส่วนใหญ่จะทำงานต่อไป (ในโดเมน AD ก็เป็นไปได้ที่จะติดตามไฟล์ผ่านคอมพิวเตอร์เช่นหากคุณย้าย HD ที่อื่น) 3) การใช้งาน symlinks อย่างหนึ่งคือการเปลี่ยนเส้นทางไฟล์หรือไดเรกทอรีไปยังตำแหน่งอื่น - พวกเขาสามารถชี้ไปที่ไฟล์ (ต่างจาก junctions) และไดเรกทอรี (ต่างจาก hardlinks), ข้าม filesystems (ไม่เหมือน hardlinks) และ AFAIK สามารถชี้ตำแหน่งเครือข่ายได้
grawity

ความคิดเห็นที่ล่าช้าและฉันไม่แน่ใจว่าฉันไม่รู้ว่าฉันกำลังทำอะไรกับ shorcuts แต่ฉันต้องสร้างลิงก์สัญลักษณ์แทนทางลัดสำหรับไฟล์ vimrc ของฉัน (ฉันอ้างอิงโครงการ dotfiles ที่ฉันใช้ใน ไดเรกทอรีแยกต่างหาก)
making3

10

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

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

ชื่อไฟล์ของ shorcut คือ: C: \ Users \ user5 \ Desktop \ Games.lnk แม้ว่า Windows จะระงับนามสกุล. lnk และเพียงแค่แสดง "เกม" แม้ว่าคุณจะไม่ได้เลือก "ซ่อนนามสกุลสำหรับประเภทไฟล์ที่รู้จัก" แต่ถ้าคุณเปิดพรอมต์คำสั่งและทำ dir คุณจะเห็น:

C:\Users\user5\Desktop>dir "g*"
 Volume in drive C has no label.
 Volume Serial Number is 900...
 Directory of C:\Users\user5\Desktop
03/08/2014  05:30 PM             1,710 Games.lnk
               1 File(s)          1,710 bytes
               0 Dir(s)  246,818,222,080 bytes free

ฉันสามารถสร้างสิ่งที่เทียบเท่าได้ด้วย symlink โดยใช้ตัวเลือก \ D (สำหรับไดเรกทอรี):

C:\Users\user5\Desktop>mklink /D mysymlink  "C:\ProgramData\Microsoft\Windows\S
tart Menu\Programs\G"
symbolic link created for mysymlink <<===>> C:\ProgramData\Microsoft\Windows\Sta
rt Menu\Programs\G

C:\Users\user5\Desktop>cd mysymlink

C:\Users\user5\Desktop\mysymlink>

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

ทางลัดไม่ทำงานเหมือนไดเรกทอรีย่อย ฉันสามารถเรียกใช้ไฟล์เริ่มต้นของ Windows UI ได้ด้วยคำสั่งนี้ (จะเปิดโฟลเดอร์ "G" ใน Windows Explorer):

C:\Users\user5\Desktop>"Games.lnk"

ในขณะที่ mysymlink อยู่ในรายการ (ดูจำนวน) เป็นไดเรกทอรีย่อยที่แท้จริงและไม่สามารถเปิดตัวด้วยวิธีดังกล่าว:

C:\Users\user5\Desktop>dir "my*"
 Volume in drive C has no label.
 Volume Serial Number is 900...

 Directory of C:\Users\user5\Desktop

03/29/2014  06:08 PM    <DIR>          mysubdir
03/29/2014  05:40 PM    <SYMLINKD>     mysymlink [C:\ProgramData\Microsoft\Windo
ws\Start Menu\Programs\G]
               0 File(s)              0 bytes
               2 Dir(s)  246,816,153,600 bytes free

C:\Users\user57\Desktop>mysubdir
'mysubdir' is not recognized as an internal or external command,
operable program or batch file.

C:\Users\user57\Desktop>mysymlink
'mysymlink' is not recognized as an internal or external command,
operable program or batch file.

ในทางกลับกันคุณไม่สามารถเปลี่ยนไดเรกทอรีเป็นทางลัดได้:

C:\Users\user5\Desktop>cd "Games.lnk"
The directory name is invalid.

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

C:\Users\user5\Desktop>notepad.exe "Games.lnk"

ในขณะที่พยายามเรียกใช้ Notepad บนโฟลเดอร์ย่อยที่แท้จริงจะปรากฏขึ้นข้อความแสดงข้อผิดพลาด "การเข้าถึงถูกปฏิเสธ" และ Notepad เปล่า

ในทางกลับกันถ้าฉันสร้างไฟล์ symlink (ไม่ใช่ symlink ของโฟลเดอร์) ฉันสามารถเปิดใช้งานด้วย Notepad การเรียกใช้ notepad.exe ต่อไปนี้การทำงานสองครั้งแรกและครั้งที่สามล้มเหลว (จะเปิดไฟล์. LNK ซึ่งเป็นไบนารี gobbledegook)

C:\Users\user5\Desktop>mklink symplain.txt plain.txt
symbolic link created for symplain.txt <<===>> plain.txt

C:\Users\user5\Desktop>notepad.exe "symplain.txt"

C:\Users\user5\Desktop>notepad.exe "plain.txt"

C:\Users\user5\Desktop>notepad.exe "plain.txt.lnk"

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

เกี่ยวกับความแตกต่างระหว่าง symlink ไดเรกทอรีและทางแยกให้ดู การสนทนานี้ และนี่คือสิ่งที่ดี คำอธิบายที่เป็นประโยชน์ :

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

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


2

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

ที่มา: http://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html


0

บางครั้งการมีตัวอย่างที่ใช้งานได้ดีก็อธิบายได้ไม่ดีว่าฉันใช้ฟังก์ชั่นนี้อย่างไร

ฉันใช้ google ไดรฟ์เพื่อสำรองไฟล์ แต่บางครั้งฉันต้องการสำรองไฟล์ในโฟลเดอร์เฉพาะ (ฉันไม่สามารถย้ายไปยังไดรฟ์ .. / google) โดยเฉพาะอย่างยิ่งกับแอพสากล windows 10 ไฟล์ config และอื่น ๆ จะถูกเก็บไว้ใน appdata และส่วนใหญ่ฉันไม่สามารถเปลี่ยนตำแหน่งนี้ได้

ฉันใช้แอพ stikynot ของ windows พื้นเมืองและฉันต้องการสำรองข้อมูลบันทึกย่อของฉันดังนั้นฉันจึงใช้ symlink ที่นี่ Google ไดรฟ์รู้จักการเชื่อมโยงเป็นไฟล์จริงและซิงค์ไฟล์ได้ดีในขณะที่ไฟล์จริงยังคงอยู่ในโฟลเดอร์ appdata

เมื่อฉันมีไฟล์เช่นโฟลเดอร์โครงการในเครื่องที่ฉันไม่ต้องการซิงค์กับคลาวด์ฉันใช้ทางลัด (คัดลอก, วางทางลัด & วาง)

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