อ่าน 10 นาที
ลิงก์สัญลักษณ์
ใน ด้านคอมพิวเตอร์ ลิงก์ สัญลักษณ์ (หรือที่เรียกว่า symlink หรือ soft link ) เป็น ไฟล์คอมพิวเตอร์ พิเศษ ที่อ้างอิงถึงไฟล์หรือ ไดเร็กทอรี อื่น โดยการจัดเก็บ เส้นทาง...
ลิงก์สัญลักษณ์
ในด้านคอมพิวเตอร์ลิงก์สัญลักษณ์ (หรือที่เรียกว่าsymlinkหรือsoft link ) เป็นไฟล์คอมพิวเตอร์ พิเศษ ที่อ้างอิงถึงไฟล์หรือไดเร็กทอรี อื่น โดยการจัดเก็บเส้นทางไปยังไฟล์หรือไดเร็กทอรีนั้น[ 1 ]จึงทำให้มีเส้นทางการเข้าถึงทางเลือกโดยไม่ต้องทำซ้ำเนื้อหาของเป้าหมาย แอปที่ใช้บริการของระบบปฏิบัติการอาจจัดการลิงก์สัญลักษณ์เหมือนกับไฟล์หรือไดเร็กทอรีอื่นๆ และจะไม่ทราบว่าเป็นลิงก์สัญลักษณ์เว้นแต่จะตรวจสอบลักษณะของมัน ลิงก์สัญลักษณ์จะใช้งานไม่ได้หากเป้าหมายถูกย้ายหรือลบ
ลิงก์เชิงสัญลักษณ์ได้รับการสนับสนุนในระบบปฏิบัติการที่คล้าย UnixและMicrosoft Windowsแม้ว่าจะมีข้อจำกัดที่แตกต่างกันไปก็ตาม ทางเลือกอื่นนอกเหนือจากลิงก์เชิงสัญลักษณ์ ได้แก่ฮาร์ดลิงก์ไฟล์ทางลัดและออบ เจ็กต์เชลล์ของ Windows
ภาพรวม
ลิงก์สัญลักษณ์ (symbolic link) คือไฟล์อิสระที่เก็บ เส้นทาง ของระบบไฟล์ซึ่งโดยปกติแล้วจะถูกมองว่าเป็นรายการในระบบไฟล์ที่เส้นทางนั้นอ้างถึง ( target ) ยกเว้นในกรณีพิเศษ หากลิงก์สัญลักษณ์ถูกลบ เป้าหมายจะไม่ได้รับผลกระทบ หากเป้าหมายถูกย้าย เปลี่ยนชื่อ หรือลบ ลิงก์สัญลักษณ์จะไม่ได้รับการอัปเดตหรือลบโดยอัตโนมัติ เส้นทางของเป้าหมายจะชี้ไปยังที่ว่างเปล่าและอาจถูกอธิบายว่าเสียหายถูกทิ้งร้างตายหรือค้างอยู่ลิงก์สัญลักษณ์แตกต่างจากฮาร์ดลิงก์ ฮาร์ดลิงก์ไม่สามารถเชื่อมโยงไปยังเป้าหมายบนวอลุ่มหรือระบบไฟล์อื่นได้ แต่ลิงก์สัญลักษณ์ทำได้ ฮาร์ดลิงก์จะอ้างถึงเป้าหมายที่มีอยู่เสมอ ในขณะที่ลิงก์สัญลักษณ์อาจเป็นเส้นทางไปยังที่ว่างเปล่า
ลิงก์สัญลักษณ์ถูกนำมาใช้ในปี 1982 ในBSD Unix 4.1a [ 2 ] มาตรฐาน POSIX กำหนดลิงก์สัญลักษณ์ดังที่พบในระบบปฏิบัติการที่คล้าย Unix ส่วนใหญ่ เช่นFreeBSD , LinuxและmacOS CTSSบนIBM 7090รองรับไฟล์ที่เชื่อมโยงด้วยชื่อในปี 1963 [ 3 ] [ 4 ] [ 5 ] ภายใน ปี 1978 ลิงก์สัญลักษณ์บางส่วนได้รับการสนับสนุนในระบบปฏิบัติการมินิคอมพิวเตอร์จากDECและRDOSของ Data General
ลิงก์สัญลักษณ์อาจถูกนำไปใช้ในลักษณะที่ขึ้นอยู่กับบริบทหรือแบบแปรผันได้ โดยที่ลิงก์จะชี้ไปยังเป้าหมายที่แตกต่างกันไปขึ้นอยู่กับพารามิเตอร์การกำหนดค่า พารามิเตอร์ขณะทำงาน หรือเงื่อนไขทันทีอื่นๆลิงก์สัญลักษณ์แบบแปรผันหรือ แบบแปรผัน จะมีชื่อตัวแปร (เช่น ชื่อผู้ใช้หรือข้อมูลเฉพาะสภาพแวดล้อม) ฝังอยู่ในคำจำกัดความของเส้นทาง ทำให้มีความยืดหยุ่นบางอย่างที่ไม่สามารถทำได้ด้วยลิงก์สัญลักษณ์มาตรฐานNetBSD , DragonFly BSDและDomain/OSรองรับลิงก์ดังกล่าว[ 6 ] [ 7 ] [ 8 ] Tru64ใช้ลิงก์สัญลักษณ์ที่ขึ้นอยู่กับบริบทโดยที่บริบทคือหมายเลขสมาชิกคลัสเตอร์ระบบปฏิบัติการ OSx ของPyramid Technology รองรับ ลิงก์สัญลักษณ์แบบมีเงื่อนไข[ 9 ]
ลิงก์สัญลักษณ์ที่ขึ้นอยู่กับบริบทดังกล่าวทำหน้าที่ในการปรับโครงสร้างลำดับชั้นของระบบไฟล์ ช่วยให้มีโครงสร้างไดเร็กทอรีที่ใช้งานง่ายหรือเฉพาะเจาะจงสำหรับแอปพลิเคชัน และจัดระเบียบระบบไฟล์ใหม่โดยไม่ต้องออกแบบฟังก์ชันและยูทิลิตี้หลักของระบบใหม่ เนื่องจากธรรมชาติของมัน คุณลักษณะของลิงก์สัญลักษณ์ทำให้ระบบไฟล์แบบลำดับชั้นกลายเป็นกราฟแบบมีทิศทางแทนที่จะเป็นต้นไม้ซึ่งอาจส่งผลกระทบต่อการดำเนินการที่เรียบง่าย ตัวอย่างเช่น การนำทางไปยังไดเร็กทอรีแม่ อาจใช้งานไม่ได้ผลอย่างน่าเชื่อถือกับลิงก์สัญลักษณ์ เชลล์Unix บางตัวพยายามรักษาภาพลวงตาของลำดับชั้นแบบต้นไม้โดยใช้หลักการเชิง อนุมานแต่สิ่งนี้ทำให้พวกมันสร้างผลลัพธ์ที่แตกต่างกันเมื่อเทียบกับโปรแกรมอื่น ๆ ที่จัดการเส้นทางโดยไม่มีหลักการเชิงอนุมานดังกล่าว โดยอาศัยระบบปฏิบัติการแทน[ 8 ]
ระบบปฏิบัติการ Windows 95ก็มีข้อกังวลเรื่องความใช้งานง่ายที่คล้ายคลึงกัน แต่แทนที่จะใช้ลิงก์สัญลักษณ์ กลับสร้างเชลล์ของ Windows โฟลเดอร์พิเศษและไฟล์ทางลัดขึ้นมา (ดูรายละเอียดในหัวข้อทางเลือกอื่นๆ)
เหมือนยูนิก
ใช้
ในระบบปฏิบัติการที่คล้าย Unix lnคำสั่งเชลล์สามารถสร้างฮาร์ดลิงก์ (ผ่าน ฟังก์ชัน link()API ) [ 10 ]หรือลิงก์สัญลักษณ์ (ผ่านsymlink()ฟังก์ชัน) [ 11 ]ไวยากรณ์ของคำสั่งสำหรับการสร้างลิงก์สัญลักษณ์มีดังนี้:
ln -s "<เส้นทางของเป้าหมาย>" "<เส้นทางของลิงก์>"ตามหลักการแล้ว เป้าหมายควรมีอยู่จริง แม้ว่าอาจสร้างลิงก์เชิงสัญลักษณ์ไปยังเป้าหมายที่ไม่มีอยู่จริงได้ก็ตาม
ตัวอย่างต่อไปนี้สร้างไฟล์เปล่าชื่อ "foo" จากนั้นสร้างลิงก์สัญลักษณ์ชื่อ "bar" ที่ชี้ไปยังไฟล์ "foo"
$ touch foo $ ln -s foo bar การดำเนินการส่วนใหญ่จะถือว่าลิงก์เป็นนามแฝงของเป้าหมาย ตัวอย่างเช่น คำสั่งเชลล์ที่เข้าถึงเนื้อหาไฟล์จะเข้าถึงเนื้อหาของไฟล์เป้าหมาย แต่การดำเนินการจัดการไฟล์อาจดำเนินการกับลิงก์หรือเป้าหมาย API lstat()[ 12 ] lchown()[ 13 ]และreadlink()[ 14 ]ใช้กับไฟล์ลิงก์โดยตรง ไม่ใช่เป้าหมาย แอป (เช่นlsหรือ)findสามารถใช้lstat()แทนstat()เพื่อแยกแยะและรายงานเกี่ยวกับลิงก์สัญลักษณ์แทนที่จะเป็นเป้าหมาย เนื่องจาก ฟังก์ชัน API rename()และunlink()ถูกเขียนโค้ดให้ทำงานกับลิงก์สัญลักษณ์ คำสั่ง rmและmv(ซึ่งใช้ API เหล่านี้) จึงส่งผลต่อลิงก์สัญลักษณ์เองcpคำสั่ง มีตัวเลือกที่อนุญาตให้คัดลอกลิงก์สัญลักษณ์หรือเป้าหมายก็ได้
คำสั่ง นี้ls -lสามารถเปิดเผยเป้าหมายของลิงก์สัญลักษณ์ได้ ผลลัพธ์จะแสดงชื่อของลิงก์ ตามด้วย->เครื่องหมาย และเป้าหมายของลิงก์ ในตัวอย่างนี้lsจะแสดงลิงก์สัญลักษณ์ที่สร้างขึ้นในตัวอย่างก่อนหน้านี้
$ ls -l bar lrwxrwxrwx 1 user group 3 Aug 4 18:40 bar -> fooพื้นที่จัดเก็บ
การใช้งานในยุคแรกๆ จะเก็บเส้นทางลิงก์ไว้ในไฟล์ปกติ ไฟล์ดังกล่าวมีเส้นทางเป้าหมายเป็นข้อความ และบิตโหมดไฟล์จะทำเครื่องหมายไฟล์นั้นว่าเป็นลิงก์สัญลักษณ์ ขนาดที่รายงานของลิงก์สัญลักษณ์ดังกล่าวคือจำนวนอักขระในเส้นทางที่ชี้ไปสิทธิ์การเข้าถึงระบบไฟล์ของลิงก์สัญลักษณ์จะไม่ถูกนำมาใช้ โหมดการเข้าถึงของไฟล์เป้าหมายจะถูกควบคุมโดยสิทธิ์ของไฟล์เป้าหมายเอง ( FreeBSD , NetBSD , DragonFly BSDและmacOSสามารถแก้ไขสิทธิ์การเข้าถึงไฟล์และคุณลักษณะไฟล์ของลิงก์สัญลักษณ์ได้ผ่าน API lchmod()[ 15 ] [ 16 ] [ 17 ] [ 18 ]และlchflags()[ 19 ] [ 20 ] [ 21 ] [ 22 ]ตามลำดับ)
เพื่อเพิ่มพื้นที่จัดเก็บข้อมูลและประสิทธิภาพsymlink แบบเร็วช่วยให้สามารถจัดเก็บเส้นทางเป้าหมายไว้ในโครงสร้างข้อมูลที่ใช้สำหรับจัดเก็บข้อมูลไฟล์บนดิสก์ ( inodes ) พื้นที่นี้จะจัดเก็บรายการที่อยู่บล็อก ดิสก์ ที่จัดสรรให้กับไฟล์ ดังนั้น symbolic link ที่มีเส้นทางเป้าหมายสั้นจึงสามารถเข้าถึงได้อย่างรวดเร็ว ระบบที่มี fast symlink มักจะกลับไปใช้วิธีเดิมหากเส้นทางเป้าหมายเกินพื้นที่ inode ที่มีอยู่ รูปแบบดั้งเดิมนั้นถูก เรียกว่า slow symlink ในภายหลังและยังใช้เพื่อความเข้ากันได้กับดิสก์กับระบบปฏิบัติการเวอร์ชันอื่นหรือเวอร์ชันเก่ากว่าด้วย
แม้ว่าการจัดเก็บค่าลิงก์ไว้ใน inode จะช่วยประหยัดพื้นที่ดิสก์และลดการอ่านดิสก์ลงได้ แต่ระบบปฏิบัติการยังคงต้องวิเคราะห์ชื่อพาธในลิงก์ ซึ่งต้องอ่าน inode เพิ่มเติมเสมอ และโดยทั่วไปแล้วต้องอ่านไดเร็กทอรีอื่นๆ อีกหลายไดเร็กทอรี ประมวลผลทั้งรายการไฟล์และ inode ของแต่ละไฟล์จนกว่าจะพบการจับคู่กับส่วนประกอบพาธของลิงก์ เฉพาะเมื่อลิงก์ชี้ไปยังไฟล์ในไดเร็กทอรีเดียวกันเท่านั้นที่ "symlink เร็ว" จะให้ประสิทธิภาพที่ดีกว่าลิงก์สัญลักษณ์อื่นๆ อย่างเห็นได้ชัด
การใช้งานอื่นๆ
ลิงก์สัญลักษณ์ที่ค้างอยู่จะถูกสร้างขึ้นโดยเจตนาโดยsystemdเพื่อใช้เป็นที่เก็บข้อมูลแบบคีย์-ค่าเมื่อค่ามีขนาดเล็กพอ ชื่อลิงก์สัญลักษณ์คือคีย์ ส่วนเส้นทางเป้าหมายคือค่า เหตุผลก็คือ แทนที่จะใช้การเรียกใช้ระบบ 2 ครั้งสำหรับการอ่านและ 3 ครั้งสำหรับการเขียน จะใช้การเรียกใช้ระบบเพียง 1 ครั้งสำหรับการอ่านและ 2 ครั้งสำหรับการเขียน[ 23 ]
วินโดวส์
ระบบปฏิบัติการ Microsoft Windows รองรับลิงก์สัญลักษณ์ใน ระบบไฟล์ NTFSและReFSรวมถึงเนมสเปซของเคอร์เนล Windows ด้วย
จุดเชื่อมต่อ NTFS และจุดติดตั้งวอลุ่ม
ตั้งแต่ Windows 2000 เป็นต้นไป NTFS รองรับจุดเชื่อมต่อ[ 24 ]หรือที่รู้จักกันในชื่อลิงก์แบบอ่อน[ 25 ]จุดเชื่อมต่อคล้ายกับลิงก์สัญลักษณ์ แต่เชื่อมโยงไปยังไดเร็กทอรีอื่นเท่านั้น ไม่ใช่ไฟล์ จุดเชื่อมต่อเหล่านี้ถูกนำไปใช้ผ่าน จุดรีพาร์ส ของNTFS [ 25 ] Windows 7 และ Vista รองรับจุดรีพาร์สสูงสุด 31 จุดสำหรับเส้นทางที่กำหนด (กล่าวคือ เส้นทางที่กำหนดสามารถมีการเปลี่ยนเส้นทางได้มากที่สุด 31 ครั้งก่อนที่ Windows จะยอมแพ้) [ 26 ]
นอกจากนี้ ตั้งแต่ปี 2000 เป็นต้นมา NTFS ยังรองรับจุดเชื่อมต่อไดรฟ์ (volume mount points) ด้วย โดยปกติแล้วไดรฟ์ ใน Windows จะถูกกำหนดตัวอักษรไดรฟ์ให้ จุดเชื่อมต่อไดรฟ์จะทำหน้าที่เหมือนลิงก์สัญลักษณ์ไปยังรูทของไดรฟ์อื่นที่ไม่ได้กำหนดตัวอักษรไดรฟ์ไว้
ลิงก์สัญลักษณ์ NTFS
NTFSเวอร์ชัน 3.1 ได้แนะนำการสนับสนุนสำหรับลิงก์สัญลักษณ์Windows XPได้นำ NTFS 3.1 มาใช้เพียงบางส่วน โดยไม่ได้รวมลิงก์สัญลักษณ์ไว้ด้วย ดังนั้นจึงจำเป็นต้องใช้ไดรเวอร์ของบุคคลที่สามเพื่อเปิดใช้งานการสนับสนุนลิงก์สัญลักษณ์ NTFS ใน Windows XP [ 27 ] Windows Vistaและเวอร์ชันต่อมาได้เปิดใช้งานการสนับสนุนลิงก์สัญลักษณ์[ 28 ]แตกต่างจากจุดเชื่อมต่อ NTFSลิงก์สัญลักษณ์ยังสามารถชี้ไปยังไฟล์หรือ เส้นทางเครือข่าย Server Message Block (SMB) ระยะไกลได้ นอกจากนี้ การใช้งานลิงก์สัญลักษณ์ NTFS ยังให้การสนับสนุนอย่างเต็มที่สำหรับลิงก์ข้ามวอลุ่มอย่างไรก็ตาม ฟังก์ชันการทำงานที่เปิดใช้งานลิงก์สัญลักษณ์ข้ามโฮสต์นั้น จำเป็นต้องให้ระบบระยะไกลรองรับลิงก์สัญลักษณ์เหล่านั้นด้วย
ลิงก์สัญลักษณ์ถูกออกแบบมาเพื่อช่วยในการย้ายข้อมูลและความเข้ากันได้ของแอปพลิเคชันกับระบบปฏิบัติการPOSIX ไมโครซอฟต์ตั้งเป้าหมายให้ลิงก์สัญลักษณ์ของ Windows Vista "ทำงานเหมือนกับลิงก์ UNIX" [ 28 ]ในการสร้างลิงก์สัญลักษณ์ บัญชีผู้ใช้ต้องมี สิทธิ์ "สร้างลิงก์สัญลักษณ์" ใหม่ ( SeCreateSymbolicLinkPrivilege) ซึ่งโดยค่าเริ่มต้นจะมีเฉพาะผู้ดูแลระบบเท่านั้น[ 29 ]ใน Windows Vista และเวอร์ชันต่อมา เมื่อเส้นทางไดเร็กทอรีการทำงานลงท้ายด้วยลิงก์สัญลักษณ์ การอ้างอิงเส้นทางหลักปัจจุบัน..จะอ้างอิงถึงไดเร็กทอรีหลักของลิงก์สัญลักษณ์แทนที่จะเป็นไดเร็กทอรีเป้าหมาย
ผู้ใช้สามารถใช้Command PromptหรือPowerShellเพื่อสร้างลิงก์สัญลักษณ์ได้ ตัวอย่างต่อไปนี้จะสร้างลิงก์สัญลักษณ์ชื่อ "Downloads" ที่ " E:\" ซึ่งชี้ไปยังโฟลเดอร์ Downloads ในโปรไฟล์ของผู้ใช้ วิธีนี้ใช้ได้เฉพาะใน Command Prompt เท่านั้น เนื่องจากmklinkเป็นคำสั่งเชลล์ในตัว
mklink /DE:\Downloads %UserProfile% \Downloads ตัว/Dเลือกในคำสั่งนี้ต้องการจุดเชื่อมต่อแทนที่จะเป็นลิงก์สัญลักษณ์ของไฟล์ คำสั่งนี้จะทำงานได้แม้ว่าเป้าหมายจะไม่มีอยู่ก็ตาม
คำสั่ง PowerShell ต่อไปนี้จะสร้างลิงก์สัญลักษณ์ที่มีแหล่งที่มาและปลายทางเดียวกันกับข้างต้น:
สร้าง รายการใหม่ - เส้นทาง' E:\Downloads' - ประเภทรายการ'SymbolicLink' - ค่า"$Env:UserProfile\Downloads"ต่างจาก Command Prompt, PowerShell จะแสดงข้อผิดพลาดหากเส้นทางของวัตถุต้นทางไม่ถูกต้อง ในทางกลับกัน PowerShell จะตรวจสอบประเภทของวัตถุต้นทางอย่างถูกต้องและสร้างลิงก์สัญลักษณ์ประเภทที่ถูกต้อง นอกจากไฟล์และโฟลเดอร์แล้ว ลิงก์สัญลักษณ์ NTFS ยังสามารถชี้ไปยังสตรีมข้อมูลทางเลือกได้ตัวอย่างต่อไปนี้สร้างลิงก์สัญลักษณ์ชื่อ " Test.txt" ที่ชี้ไปยังZone.Identifier:$DATAสตรีมทางเลือก " ของไฟล์ชื่อ " npcap-1.83.exe" (สตรีมทางเลือกนี้คือเครื่องหมายของเว็บ )
New-Item -Path "E:\Test.txt" -ItemType 'SymbolicLink' -Value 'E:\npcap-1.83.exe:Zone.Identifier:$DATA'ฟังก์ชันระดับต่ำที่รับผิดชอบในการสร้างลิงก์สัญลักษณ์คือCreateSymbolicLink()ฟังก์ชันของWindows APIซึ่งเปิดตัวในปี 2008 สามารถสร้างลิงก์สัญลักษณ์ได้ทั้งไฟล์และไดเร็กทอรี[ 30 ]ต่อมาในปี 2021 ไมโครซอฟต์ได้เปิดFile.CreateSymbolicLink()ตัวDirectory.CreateSymbolicLink()วิธีการต่างๆ สำหรับ.NET 6ซึ่งเป็นแบบฟรีและโอเพนซอร์ส[ 31 ] [ 32 ]
ลิงก์สัญลักษณ์เคอร์เนล
ลิงก์สัญลักษณ์ Cygwin
Cygwinจำลองการสร้างลิงก์สัญลักษณ์ที่สอดคล้องกับมาตรฐาน POSIX ในระบบไฟล์ของ Windows โดยใช้ส่วนติดต่อการเขียนโปรแกรมและยูทิลิตี้ผู้ใช้ที่เหมือนกับ Unix (ดูด้านบน) แต่สร้างทางลัดของ Windows (.lnk ไฟล์) พร้อมข้อมูลเพิ่มเติมที่ Cygwin ใช้ในขณะที่ทำการแก้ไขลิงก์สัญลักษณ์ ลิงก์สัญลักษณ์ของ Cygwin สอดคล้องกับมาตรฐาน POSIX ในแง่ของวิธีการแก้ไข และสอดคล้องกับมาตรฐานของ Windows ในแง่ของการแสดงผลบนดิสก์
นอกจากนี้ Cygwin ยังสามารถตั้งค่าให้รองรับลิงก์สัญลักษณ์ของ Windows ดั้งเดิม ซึ่งสามารถใช้งานได้นอก Cygwin โดยไม่มีข้อจำกัด[ 33 ]ซึ่งต้องใช้:
- เปลี่ยนค่าตัวแปรสภาพแวดล้อม CYGWIN ให้มีwinsymlinks:native ;
- เรียกใช้ Cygwin ด้วยสิทธิ์ผู้ดูแลระบบ เนื่องจาก Windows จำกัดการสร้างลิงก์สัญลักษณ์เฉพาะผู้ใช้ที่มีสิทธิ์พิเศษ
อย่างไรก็ตาม ยังมีความแตกต่างบางประการ Cygwin ไม่มีวิธีระบุข้อมูลที่เกี่ยวข้องกับทางลัด เช่น ไดเร็กทอรีการทำงานหรือไอคอน เนื่องจากไม่มีที่สำหรับพารามิเตอร์ดังกล่าวในln -sคำสั่ง เพื่อสร้างไฟล์ .lnk มาตรฐานของ Microsoft Cygwin มี เครื่องมือ mkshortcutและreadshortcutยูทิลิตี้[ 34 ]
คู่มือผู้ใช้ Cygwin มีข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้[ 33 ] MSYS2ซึ่งใช้ Cygwin เป็นพื้นฐาน มี การตั้งค่า winsymlinks ที่คล้ายกัน แต่ค่าเริ่มต้นคือการคัดลอกไฟล์[ 35 ]
การเปรียบเทียบการใช้งานลิงก์สัญลักษณ์
ตารางต่อไปนี้เปรียบเทียบแง่มุมต่างๆ ของลิงก์สัญลักษณ์ (ทั้งบนระบบ UNIX และ Windows), จุดเชื่อมต่อ (NTFS) และลิงก์แบบแข็ง (บนระบบ UNIX)
| ลิงก์สัญลักษณ์ | จุดเชื่อมต่อ | ฮาร์ดลิงก์ | |
|---|---|---|---|
| เป้าหมายจะถูกลบเมื่อลิงก์ถูกลบใช่หรือไม่? | เลขที่ | ใช่[ก] | เฉพาะในกรณีที่จำนวนการอ้างอิงเป็น 0 หลังจากลดค่าลง |
| ลิงก์ยังใช้งานได้อยู่หรือไม่หากเป้าหมายถูกย้ายไปแล้ว? | เลขที่ | เลขที่ | ใช่ |
| อนุญาตให้ใช้เส้นทางสัมพัทธ์หรือไม่? | ใช่ | ไม่[ข] | ไม่มีข้อมูล |
| สามารถเชื่อมโยงไปยังระดับเสียงที่แตกต่างกันได้หรือไม่? | ใช่ | ใช่ | เลขที่ |
| สามารถใส่ลิงก์ไปยังไฟล์ได้ไหม? | ใช่[ค] | เลขที่ | ใช่ |
| สามารถใส่ลิงก์ไปยังไดเร็กทอรีได้ไหม? | ใช่ | บางส่วน[ d ] |
- ^ยกเว้นเมื่อใช้เครื่องมือพิเศษ
- ^เมื่อบันทึกแล้ว จะกลายเป็นเส้นทางที่แน่นอน
- ^รองรับบน Windows Vista และเวอร์ชันที่ใหม่กว่า การใช้งาน Windows ไม่สอดคล้องกับ POSIX การสร้างลิงก์สัญลักษณ์ต้องใช้สิทธิ์ "สร้างลิงก์สัญลักษณ์" (
SeCreateSymbolicLinkPrivilege) โดยค่าเริ่มต้น บัญชีผู้ใช้จะมีสิทธิ์นี้เมื่อเป็นผู้ดูแลระบบ [ 36 ]หรือเปิดใช้งานโหมดนักพัฒนา (Windows 10 เวอร์ชัน 1703 และเวอร์ชันที่ใหม่กว่า) [ 37 ] - มาตรฐาน POSIX อนุญาตให้สร้างฮาร์ดลิงก์ไปยังไดเร็กทอรีได้ แต่ไม่ได้กำหนดให้ต้องมีฟังก์ชันนี้ ระบบไฟล์สมัยใหม่ส่วนใหญ่มักไม่รองรับฟังก์ชันนี้
การใช้งานอื่นๆ
การนำฟังก์ชันการทำงานที่คล้ายกับลิงก์เชิงสัญลักษณ์มาใช้
MIT ยุคแรก
ระบบแบ่งเวลาที่เข้ากันได้กับ MIT ประมาณ ปี 1963และระบบแบ่งเวลาที่ไม่เข้ากันต่างก็มีไฟล์ที่เชื่อมโยงกัน โดยที่ชื่อของไฟล์เป้าหมายจะถูกระบุไว้ในรายการไดเร็กทอรี[ 3 ] [ 4 ] [ 5 ]
ข้อมูลทั่วไป RDOS
RDOSของData Generalสำหรับ คอมพิวเตอร์ Novaรองรับ "รายการลิงก์" ซึ่งเป็นรายการไดเร็กทอรีที่มีทั้งชื่อของรายการและชื่อของไฟล์อื่น เพื่อให้การอ้างอิงถึงไฟล์โดยใช้ชื่อของรายการนั้นหมายถึงไฟล์อื่น[ 38 ]
อามิกา
คำสั่งที่ใช้สร้างลิงก์สัญลักษณ์คือ ` makelinkdos.js` ซึ่งใช้สร้างลิงก์ถาวรด้วยเช่นกัน ภายในแล้ว dos.library จะส่งคืนรหัสข้อผิดพลาดที่ระบุว่าเป้าหมายเป็นลิงก์ชั่วคราว หากคุณพยายามดำเนินการกับเป้าหมายนั้นซึ่งอนุญาตเฉพาะกับไฟล์เท่านั้น และแอปพลิเคชันที่ต้องการติดตามลิงก์สัญลักษณ์จะต้องเรียกใช้คำสั่งติดตามลิงก์อย่างชัดเจนและลองดำเนินการอีกครั้ง เชลล์ AmigaDOSจะติดตามลิงก์โดยอัตโนมัติ
ระบบปฏิบัติการ Mac OS แบบคลาสสิก
ในระบบ ปฏิบัติการ Mac OS แบบคลาสสิกแอปพลิเคชันหรือผู้ใช้สามารถใช้นามแฝง ได้ ซึ่งแตกต่างจากลิงก์สัญลักษณ์ตรงที่นามแฝงจะติดตามเป้าหมายไป แม้ว่าเป้าหมายนั้นจะถูกย้ายไปยังตำแหน่งอื่นบนไดรฟ์เดียวกันก็ตาม (อย่าสับสนกับนามแฝง คำสั่งเชลล์ ในเชลล์ต่างๆ สำหรับระบบที่คล้าย Unix)
macOSยังรองรับนามแฝงด้วย ซึ่งนามแฝงนั้นไม่ได้รับการสนับสนุนในAPI ของ Unix เช่นopen()`command` แต่ได้รับการสนับสนุนในAPI ระดับสูง ของ CarbonและCocoa
โอเอส/2
ในระบบปฏิบัติการOS/2 ลิงก์สัญลักษณ์ค่อนข้างคล้ายกับ เงาในWorkplace Shell แบบกราฟิก อย่างไรก็ตาม เงาเนื่องจาก System Object Model ที่เน้นวัตถุอย่างสมบูรณ์ จึงมีประสิทธิภาพและแข็งแกร่งกว่าลิงก์ธรรมดามาก ตัวอย่างเช่น เงาจะไม่สูญเสียความสามารถเมื่อเปลี่ยนชื่อหรือเมื่อวัตถุหรือหัวข้อของลิงก์ถูกย้ายตำแหน่ง[ 39 ]
ทางเลือกอื่นๆ
ทางลัดไฟล์
ทางลัดซึ่งรองรับโดยโปรแกรมจัดการไฟล์แบบกราฟิกของระบบปฏิบัติการบางระบบ อาจดูคล้ายกับลิงก์สัญลักษณ์ แต่มีความแตกต่างกันในหลายประเด็นสำคัญ ความแตกต่างประการหนึ่งคือ ประเภทของซอฟต์แวร์ที่สามารถติดตามทางลัดเหล่านี้ได้:
- ระบบไฟล์จะทำการแปลงลิงก์สัญลักษณ์โดยอัตโนมัติ โปรแกรมใดๆ ก็ตาม เมื่อเข้าถึงลิงก์สัญลักษณ์ จะเห็นไฟล์เป้าหมายแทน ไม่ว่าโปรแกรมนั้นจะรู้จักลิงก์สัญลักษณ์หรือไม่ก็ตาม
- ระบบไฟล์และโปรแกรมซอฟต์แวร์ที่ไม่รู้จักทางลัดจะมองทางลัดเหมือนไฟล์ทั่วไป มีเพียงโปรแกรมซอฟต์แวร์ที่เข้าใจทางลัด (เช่น เชลล์ของ Windows และโปรแกรมจัดการไฟล์) เท่านั้นที่จะมองทางลัดเหล่านั้นเป็นการอ้างอิงถึงไฟล์อื่น
กลไกเหล่านี้ยังมีขีดความสามารถที่แตกต่างกันอีกด้วย:
- โดยปกติแล้วทางลัดของ Windows จะอ้างอิงถึงปลายทางโดยใช้เส้นทางสัมบูรณ์ (เริ่มต้นจากไดเร็กทอรีราก ) ในขณะที่ลิงก์สัญลักษณ์ POSIX สามารถอ้างอิงถึงปลายทางได้ทั้งโดยใช้เส้นทางสัมบูรณ์หรือเส้นทางสัมพัทธ์แบบหลังมีประโยชน์หากทั้งลิงก์สัญลักษณ์และปลายทางมีเส้นทางบรรพบุรุษร่วมกันซึ่งไม่ทราบในขณะที่สร้าง (เช่น ในไฟล์เก็บถาวรที่สามารถแตกไฟล์ได้ทุกที่)
- ทางลัดแอปพลิเคชันของ Windows มีข้อมูลเมตาเพิ่มเติมที่สามารถเชื่อมโยงกับปลายทางได้ ในขณะที่ลิงก์สัญลักษณ์ POSIX เป็นเพียงสตริงที่จะถูกตีความว่าเป็นชื่อพาธแบบสัมบูรณ์หรือแบบสัมพัทธ์
- ต่างจากลิงก์สัญลักษณ์ ทางลัดของ Windows จะคงการอ้างอิงไปยังเป้าหมายไว้แม้ว่าเป้าหมายจะถูกย้ายหรือเปลี่ยนชื่อก็ตาม ไคลเอนต์โดเมนของ Windows อาจสมัครใช้บริการของ Windowsที่เรียกว่า Distributed Link Tracking [ 40 ]เพื่อติดตามการเปลี่ยนแปลงในไฟล์และโฟลเดอร์ที่พวกเขาสนใจ บริการนี้จะรักษาความสมบูรณ์ของทางลัดไว้แม้ว่าไฟล์และโฟลเดอร์จะถูกย้ายไปทั่วเครือข่าย[ 41 ]นอกจากนี้ ใน Windows 9x และเวอร์ชันที่ใหม่กว่าเชลล์ของ Windowsจะพยายามค้นหาเป้าหมายของทางลัดที่เสียหายก่อนที่จะเสนอให้ลบ
ทางลัดโฟลเดอร์
เชลล์ของ Windowsอนุญาตให้ไดเร็กทอรีทั่วไปบนระบบไฟล์ทำหน้าที่เป็น "จุดเชื่อมต่อ" [ 42 ]เชลล์ของ Windows โปร่งใสต่อไดเร็กทอรีเหล่านี้ แต่ไม่มีประโยชน์ในสภาพแวดล้อมอื่น Windows มีสองวิธีในการสร้างทางลัดโฟลเดอร์ วิธีแรกคือผ่านข้อกำหนดการตั้งชื่อพิเศษ ทางลัดโฟลเดอร์ต้องเป็นไปตามไวยากรณ์ต่อไปนี้: Name.{CLSID}[ 42 ] เชลล์ของ Windows จะแทนที่ชื่อทั้งหมดด้วยชื่อที่แสดงของ CLSID ที่เกี่ยวข้อง ตัวอย่างเช่นTest.{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}จะกลายเป็นทางลัด Windows Desktop
ข้อที่สองต้องการสิ่งต่อไปนี้: [ 42 ]
- เพิ่ม แอตทริบิวต์ "อ่านอย่างเดียว" ให้กับโฟลเดอร์[ 43 ]
- กำหนดให้โฟลเดอร์นั้นเป็นโฟลเดอร์ระบบโดยการเรียกใช้
PathMakeSystemFolder()ฟังก์ชัน - การวาง
Desktop.iniไฟล์ที่ซ่อนไว้ในโฟลเดอร์ ตัวอย่างDesktop.iniเช่นดังนี้:
[.ShellClassInfo] CLSID2 = {0AFACED1-E828-11D1-9187-B532F1E9575D}อ็อบเจ็กต์เชลล์ในเชลล์ของ Windows
อ็อบเจ็กต์เชลล์[ 44 ]หรือโฟลเดอร์เชลล์ถูกกำหนดไว้ในรีจิสทรีของ Windowsและสามารถใช้เพื่อสร้างลิงก์สัญลักษณ์ได้เช่นกัน เช่นเดียวกับทางลัดโฟลเดอร์ พวกมันโปร่งใสต่อเชลล์ของ Windows
ต่อไปนี้เป็นแม่แบบทั่วไป{########-####-####-####-############}, 0x####, และ<Path>เป็นตัวแทนตำแหน่ง
[ HKEY_CLASSES_ROOT \CLSID\{########-####-####-####-############}] @ = "ชื่อที่แสดง"[ HKEY_CLASSES_ROOT \CLSID\{########-####-####-####-###########}\DefaultIcon] @ = "..." ; เส้นทางไปยังไอคอน[ HKEY_CLASSES_ROOT \CLSID\{########-####-####-####-###########}\InProcServer32] @ = "%SystemRoot%\\System32\\ShDocVw.Dll" "ThreadingModel" = "Apartment"[ HKEY_CLASSES_ROOT \CLSID\{########-####-####-####-###########}\Instance] "CLSID" = "{0AFACED1-E828-11D1-9187-B532F1E9575D}"[ HKEY_CLASSES_ROOT \CLSID\{########-####-####-####-###########}\Instance\InitPropertyBag] "Attributes" = hex : 15,00,00,00คุณสามารถระบุอย่างใดอย่างหนึ่งต่อไปนี้: ; ; - "Target" พร้อมพาธระบบไฟล์แบบสัมบูรณ์; - "Target" พร้อมพาธแบบสัมพัทธ์ หากมีการระบุ "TargetKnownFolder" หรือ "TargetSpecialFolder" ไว้ด้วย ; - "TargetSpecialFolder" (มีหรือไม่มี "Target" ที่มีพาธแบบสัมพัทธ์) ; ควรมี CSIDL ของเป้าหมาย; - "TargetKnownFolder" (มีหรือไม่มี "Target" ที่มีพาธแบบสัมพัทธ์) ; ควรมี GUID ของเป้าหมาย; รองรับบน Windows Vista และเวอร์ชันที่ใหม่กว่า"เป้าหมาย" = "<เส้นทาง>" "โฟลเดอร์เป้าหมายพิเศษ" = "0x####" "โฟลเดอร์เป้าหมายที่รู้จัก" = "{########-####-####-####-############}"[ HKEY_CLASSES_ROOT \CLSID\{########-####-####-####-###########}\ShellFolder] "แอตทริบิวต์" = เลขฐานสิบหก: 00,00,00,00โฟลเดอร์My Documentsบนเดสก์ท็อปรวมถึง โฟลเดอร์ FontsและAdministrative Toolsในแผงควบคุมเป็นตัวอย่างของอ็อบเจ็กต์เชลล์ที่ถูกเปลี่ยนเส้นทางไปยังโฟลเดอร์ในระบบไฟล์
ดูเพิ่มเติม
- การแข่งขันของลิงก์สัญลักษณ์ — ช่องโหว่ด้านความปลอดภัยที่เกิดจากลิงก์สัญลักษณ์
- freedup — สร้างลิงก์ระหว่างข้อมูลที่เหมือนกันโดยอัตโนมัติ
- ตัวชี้ (การเขียนโปรแกรมคอมพิวเตอร์)
ลิงก์ภายนอก
- ถาม-ตอบ: ความแตกต่างระหว่างฮาร์ดลิงก์และซอฟต์ลิงก์ในระบบปฏิบัติการลินุกซ์
- Junction : ดูแลรักษาจุดเชื่อมต่อ NTFS (สำหรับ Windows 2000 ขึ้นไป)
- FSUtil Hardlink : หน้าเว็บ Microsoft Technet เกี่ยวกับการใช้เครื่องมือบรรทัดคำสั่ง FSUtil เพื่อสร้างฮาร์ดลิงก์ (สำหรับ Windows 2000 ขึ้นไป)
- ไดรเวอร์สำหรับสร้างลิงก์สัญลักษณ์ใน Windows XP (ภาษาญี่ปุ่น) : ไดรเวอร์ระบบไฟล์เพื่อเปิดใช้งานลิงก์สัญลักษณ์ใน Windows XP (มีสำเนาอยู่ในเว็บไซต์ Link Shell Extension ด้วย) มีซอร์สโค้ดให้ใช้งาน
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ลิงก์สัญลักษณ์
ใน ด้านคอมพิวเตอร์ ลิงก์ สัญลักษณ์ (หรือที่เรียกว่า symlink หรือ soft link ) เป็น ไฟล์คอมพิวเตอร์ พิเศษ ที่อ้างอิงถึงไฟล์หรือ ไดเร็กทอรี อื่น โดยการจัดเก็บ เส้นทาง...
ภาพรวม
ลิงก์สัญลักษณ์ (symbolic link) คือไฟล์อิสระที่เก็บ เส้นทาง ของระบบไฟล์ ซึ่งโดยปกติแล้วจะถูกมองว่าเป็นรายการในระบบไฟล์ที่เส้นทางนั้นอ้างถึง ( target ) ยกเว้นในกรณีพิเศษ หากลิงก์สัญลักษณ์ถูกลบ เป้าหมายจะไม่ได้รับผลกระทบ หากเป้าหมายถูกย้าย เปลี่ยนชื่อ หรือลบ...
ใช้
ใน ระบบปฏิบัติการที่คล้าย Unix ln คำสั่งเชลล์ สามารถสร้างฮาร์ดลิงก์ (ผ่าน ฟังก์ชัน link() API ) [ 10 ] หรือลิงก์สัญลักษณ์ (ผ่าน symlink() ฟังก์ชัน) [ 11 ] ไวยากรณ์ของคำสั่งสำหรับการสร้างลิงก์สัญลักษณ์มีดังนี้:
พื้นที่จัดเก็บ
การใช้งานในยุคแรกๆ จะเก็บเส้นทางลิงก์ไว้ในไฟล์ปกติ ไฟล์ดังกล่าวมีเส้นทางเป้าหมายเป็นข้อความ และบิตโหมดไฟล์จะทำเครื่องหมายไฟล์นั้นว่าเป็นลิงก์สัญลักษณ์ ขนาดที่รายงานของลิงก์สัญลักษณ์ดังกล่าวคือจำนวนอักขระในเส้นทางที่ชี้ไป สิทธิ์การเข้าถึงระบบไฟล์...