ฉันจะสร้างลิงค์สัญลักษณ์ใน Terminal ได้อย่างไร


คำตอบ:


542
┌── ln(1) link, ln -- make links
   ┌── Create a symbolic link.
                            ┌── the optional path to the intended symlink
                               if omitted, symlink is in . named as destination
                               can use . or ~ or other relative paths
                      ┌─────┴────────┐
ln -s /path/to/original /path/to/symlink
      └───────┬───────┘
              └── the path to the original file/folder
                  can use . or ~ or other relative paths
$ echo content > original
$ ln -s original symlink
$ ls -la original symlink
-rw-r--r--  1 grgarside  staff    8 28 Jan 18:44 original
lrwxr-xr-x  1 grgarside  staff    8 28 Jan 18:44 symlink -> original
$ cat symlink
content

สำหรับข้อมูลเพิ่มเติมเกี่ยว LN (1) ดูหน้าคน

เส้นทางไปยัง symlink นั้นเป็นทางเลือก หากเว้นไว้ให้ใช้lnค่าเริ่มต้นในการสร้างลิงก์ที่มีชื่อเดียวกับปลายทางในไดเรกทอรีปัจจุบัน:

$ cd ~/Documents
$ ln -s ../Pictures
$ ls -l Pictures
lrwxr-xr-x  1 user  staff  11 Feb  1 17:05 Pictures -> ../Pictures

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


63
ถ้ามีเพียงหน้าคนที่ชัดเจนเหมือนคำตอบของคุณ!
Adrian Lynch

ปฏิเสธการอนุญาต: S คุณจะให้คำแนะนำแก่ฉันได้หรือไม่ พยายามสร้าง symlink สำหรับผู้ใช้ดังนั้นฉันสามารถใช้มันบนฮาร์ดดิสก์ตัวอื่นและ ssd ก็แค่ symlink ขอบคุณ
Ewoks

2
@patrix ฉันได้แก้ไขคำตอบเพื่อชี้แจง; อย่าลังเลที่จะแก้ไขเพิ่มเติม
grg

4
สนุกจริง: ต้นฉบับไม่จำเป็นต้องมีอยู่จริง คำสั่งln -s "This directory is no longer in use" READMEจะถูกต้องตามกฎหมายอย่างสมบูรณ์และทุกคนที่ดำเนินการls -lจะเห็นข้อความ
Edward Falk

1
สำหรับการอ้างอิงในอนาคต: คุณไม่จำเป็นต้องย้าย / ผู้ใช้บน macOS เพื่อประหยัดพื้นที่ คุณสามารถเปลี่ยนพา ธ โฮมไดเร็กตอรี่ของผู้ใช้ทีละคนในการตั้งค่าระบบภายใต้ผู้ใช้ & กลุ่มโดยคลิกขวาที่รายการรายชื่อผู้ใช้
Peter W.

73

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

ln -s /any/file/on/the/disk linked-file

1
ไฟล์ที่เชื่อมโยงต้องมีอยู่ก่อนหรือไม่? ฉันได้รับไฟล์ไม่พบข้อผิดพลาดในเป้าหมาย
AlxVallejo

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

ลิงก์สัญลักษณ์ไม่ควรมีอยู่ก่อนที่คุณจะรันคำสั่งนี้ แต่ต้องใช้เส้นทางที่ถูกต้องเท่าที่ฉันรู้ หากโฟลเดอร์ของไฟล์เอาต์พุตไม่มีอยู่ก่อนที่คุณจะรันคำสั่งนี้คุณจะได้รับNo such file or directoryข้อผิดพลาดเช่นกัน
Deniz Kaplan

34

ฉันรู้ว่าคำถามนี้ถามเกี่ยวกับ Terminal อย่างชัดเจน แต่ถ้าคุณอยู่ใน GUI Land และไม่ต้องการเข้า Terminal Terminal คุณสามารถใช้SymbolicLinkerได้ สิ่งนี้ทำให้ตัวเลือก "สร้างลิงก์สัญลักษณ์" ในเมนูบริการของคุณใน Finder

เมนูบริบทสำหรับโฟลเดอร์ที่แสดงเมนูย่อย "บริการ" พร้อมกับ "สร้างลิงก์สัญลักษณ์" สว่างไสว

เมนูบริบทสำหรับลิงก์สัญลักษณ์พร้อม "สร้างลิงก์สัญลักษณ์" ที่เปล่งประกาย


3
ฉันชอบที่จะรู้ว่าทำไมนี้ที่ downvoted ดังนั้นฉันสามารถให้คำตอบที่มีคุณภาพสูงขึ้นจากนี้ :)
เบน Leggiero

10
อาจเป็นเพราะคำถามคือ "ฉันจะสร้างลิงก์สัญลักษณ์ใน Terminal ได้อย่างไร" แต่ผมไม่ได้ downvoting คุณ :)
vedrano

1
@EdwardFalk ฉันคิดว่าใน El Capitan คุณสามารถกดCommand+ Optionในขณะที่ลากไฟล์ ... จะอัปเดตคำตอบในภายหลัง
Ben Leggiero

1
@BenLeggiero นั่นทำให้นามแฝง
Andy Stewart

2
@BenLeggerio, อธิบายความแตกต่างได้ที่นี่: apple.stackexchange.com/questions/2991/…
MiB


5

ln -s /some/dir/ ~/Desktop/dir

คุณยังสามารถสร้าง symlink สำหรับไดเรกทอรีโดยใช้คำสั่งเดียวกัน

ln -s "$(pwd)" ~/Desktop/dir

เพื่อสร้าง symlink ไปยังไดเรกทอรีปัจจุบันที่คุณอยู่


2
ง่าย.(จุด) จะให้ pwd ไม่จำเป็นต้องมีข้อโต้แย้งแฟนซี :)
mylogon

@mylogon ฮ่าฮ่าฮ่าฉันชอบที่จะคิดใหม่บางครั้ง ทำให้คำตอบของฉันง่ายขึ้น!
เจอราลด์

@mylogon ฉันเพิ่งรู้ว่า.ไม่ทำงานบน macOS ยังไม่ได้ลองบน linux ใช้./ผลในสิ่งนี้foo -> ./fooซึ่งชี้ไปที่ตัวเอง
เจอราลด์

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