วิธีสร้าง symlink ไปที่รูท


13

ฉันต้องการสร้าง symlink ไปยังโฟลเดอร์ root ( /) ในโฮมไดเร็กตอรี่ของฉัน อย่างไรก็ตามถ้าฉันลองสิ่งนี้ฉันก็จะได้

~$ ln -s /
ln: failed to create symbolic link './': File exists

แน่นอนว่าฉันสามารถทำได้โดยใช้ Nautilus Ctrl+ Dดังนั้นฉันจึงรู้ว่าเป็นไปได้

วิธีการใช้เทอร์มินัล


ในขณะนี้เป็นคำถามที่ดีฉันต้องการทราบสาเหตุที่คุณต้องการทำเช่นนี้? พิมพ์ยากเกินไปcd /หรือไม่ หรือคุณต้องการสร้างลิงค์ที่จะวนซ้ำไปเรื่อย ๆ ? ตัวอย่าง: cd root/home/terrance/root/home/terrance/root/home/terrance/root. . . ฯลฯ
Terrance

ไม่จริงคุณสามารถทำสิ่งนี้ได้โดยไม่จำเป็นต้องเชื่อมโยงกับรูท จริง ๆ แล้วฉันแค่อยากรู้ว่าทำไมคุณถึงทำไม่ได้
Ankur S

ยุติธรรมพอสมควร ขอบคุณที่ตอบคำถามของฉัน =)
Terrance

คำตอบ:


17

คุณไม่มีชื่อลิงก์ควรเป็น:

cd ~
ln -s / root

ซึ่งจะสร้าง symlink ชื่อ root ในโฮมไดเร็กตอรี่ของคุณ ดังนั้นการใช้งานที่ถูกต้องคือ:

ln -s <target> <link-name>

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

จากman ln:

สรุป

(1st form) ln [OPTION]... [-T] TARGET LINK_NAME  
(2nd form) ln [OPTION]... TARGET  
(3rd form) ln [OPTION]... TARGET... DIRECTORY  
(4th form) ln [OPTION]... -t DIRECTORY TARGET...  

รายละเอียด

ในรูปแบบที่ 1 สร้างการเชื่อมโยงที่จะมีชื่อTARGET LINK_NAMEในฟอร์มที่ 2 ให้สร้างลิงก์ไปยังTARGETในไดเรกทอรีปัจจุบัน ในครั้งที่ 3 และครั้งที่ 4 รูปแบบการสร้างการเชื่อมโยงถึงกันในTARGET DIRECTORYสร้างการเชื่อมโยงอย่างหนักโดยค่าเริ่มต้นการเชื่อมโยงสัญลักษณ์ด้วย --symbolicโดยค่าเริ่มต้นแต่ละปลายทาง (ชื่อของการเชื่อมโยงใหม่) ไม่ควรมีอยู่แล้ว 4 เมื่อสร้างฮาร์ดลิงก์แต่ละอันTARGETจะต้องมีอยู่ ลิงก์สัญลักษณ์สามารถเก็บข้อความโดยพลการ หากแก้ไขในภายหลังลิงก์ที่เกี่ยวข้องจะถูกตีความโดยสัมพันธ์กับไดเรกทอรีหลัก

อาร์กิวเมนต์ที่จำเป็นต้องมีสำหรับตัวเลือกแบบยาวนั้นจำเป็นสำหรับตัวเลือกแบบสั้นเช่นกัน

ตัวเลือก

พารามิเตอร์สุดท้าย<link-name>, ค่าเริ่มต้นเป็นส่วนสุดท้ายของเป้าหมาย ดังนั้นเมื่อเป้าหมายคือ/path/dirชื่อลิงค์จะเริ่มต้นdirหากไม่ได้ระบุ 1และถ้าคุณเช่นสร้าง~/etcด้วยmkdir ~/etcและจากนั้นเรียกใช้ln -s /etcใน~มันไม่สามารถสร้างลิงค์เพราะชื่อ / ไดเรกทอรีมีอยู่แล้ว 3

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

$ ls -l ~/root
lrwxrwxrwx 1 videonauth videonauth 1 Dez 14 00:28 root -> /

1 ขอบคุณ@thomasrutter ที่ชี้ให้เห็นว่า
2 ดูเพิ่มเติมman linkและman symlink
3 ขอบคุณ@steeldriver ที่ให้ตัวอย่างในความคิดเห็น
4 เน้นส่วนที่จะทำให้ข้อความเป็นประเด็นเนื่องจากเกี่ยวข้องกับคำถาม


ข้อสงสัยเดียวที่เหลืออยู่ของฉันคือทำไมคำสั่งควรln -s /etcทำงาน แต่ไม่ใช่คำสั่งนี้ ขอบคุณสำหรับคำตอบ
Ankur S

มันถูกสร้างขึ้นเพราะมีชื่อไดเรกทอรี/สามารถเป็นรูทหรืออาจเป็นส่วนประกอบของพา ธ ดังนั้นโปรแกรมไม่สามารถรู้ได้ว่าหมายถึงอะไรในขณะนี้ /etcเป็นเพียงเส้นทางที่แตกต่างอย่างชัดเจน
Videonauth

7
@AnkurSonawane เพราะ./จะมีอยู่เสมอ - ./etcไม่น่า ลองmkdir etcก่อนแล้วln -s /etcคุณจะได้รับFile exists
steeldriver

8
พารามิเตอร์สุดท้ายชื่อลิงก์จะใช้ค่าเริ่มต้นเป็นส่วนสุดท้ายของเป้าหมายหากไม่ระบุ ดังนั้นเมื่อเป้าหมายคือ/some/dirชื่อลิงค์จะเริ่มต้นdirหากไม่ได้ระบุ เมื่อเป้าหมายเป็นเพียง/สิ่งนี้จะไม่ทำงาน
thomasrutter

ฉันไม่รู้สึกว่าสิ่งนี้สำคัญมาก แต่คำอธิบายของ @steeldriver ฟังดูสมเหตุสมผลกว่าเมื่อให้File Existsผลลัพธ์ ไม่ว่ามันจะมีความสำคัญเช่นนี้เนื่องจากเป็นคดีความเสื่อม
Ankur S
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.