ฉันต้องการ symlink ที่แก้ไขสัมพัทธ์กับไดเร็กทอรีที่วางไว้คำสั่งใดที่ใช้เพื่อสร้างสิ่งดังกล่าว
ฉันต้องการ symlink ที่แก้ไขสัมพัทธ์กับไดเร็กทอรีที่วางไว้คำสั่งใดที่ใช้เพื่อสร้างสิ่งดังกล่าว
คำตอบ:
ln -s ../some/other/file linkname
เส้นทางที่คุณระบุจะถูกเก็บไว้กับไฟล์ เมื่อคุณเข้าถึงไฟล์พา ธ ที่เก็บไว้จะถูกค้นหาและขยายสัมพันธ์กับไฟล์ ไม่ทราบว่าคุณอยู่ในไดเรกทอรีใดเมื่อคุณสร้างลิงค์
ln -s ../some/other/file /some/dir/linkname
ln -s ./file linkname
ตั้งแต่.
อ้างถึงไดเรกทอรีปัจจุบัน
ln -s somedir/original-dir link-name
ไม่สำเร็จ. มันสร้างไดเรกทอรีที่มีชื่อlink-name
ที่มีลิงค์ที่ไม่ถูกต้อง คำสั่งที่ใช้งานได้คือln -sr somedir/original-dir link-name
เวอร์ชันล่าสุดของ GNU coreutils 'ln (> = 8.16) รองรับตัวเลือก--relative
(หรือ-r
) ซึ่งหมายความว่าคุณสามารถโทรln -s
ด้วย 2 พา ธ สัมบูรณ์หรือสัมพัทธ์ (ในส่วนที่เกี่ยวข้องกับไดเรกทอรีการทำงานของคุณ) และจะหาเส้นทางสัมพัทธ์ที่ถูกต้องซึ่งจะต้องเป็น เขียนถึง symlink
-r
ตัวเลือกที่จะเป็นประโยชน์เมื่อคุณข้ามรวบรวมและต้องการเส้นทางที่แน่นอนในการสร้างโฮสต์ แต่ทางญาติเป้าหมาย
ln -r -s targetfile myalias
สามารถช่วยคุณแก้ไขได้
สิ่งที่คุณต้องเข้าใจก็คือ symlink นั้นเป็นเหมือนไฟล์ข้อความมากกว่าเช่นรายการไดเรกทอรีที่มีไฟล์ ดังนั้นหากคุณ
echo ../poo >/file/name
จากนั้นค่อนข้างคล้ายกับ
ln -s ../poo /file/name
ระบบไม่สนใจว่า/file/../poo
มีอยู่จริงหรือไม่มันเป็นเพียงส่วนหนึ่งของข้อความที่ใส่ลงใน symlink เมื่อมีบางสิ่งพยายามเปิด symlink นั่นคือเมื่อระบบพยายามแก้ไข
หากคุณกำลังใช้เชลล์ที่มีชื่อไฟล์ให้สมบูรณ์คุณสมบัตินี้สามารถสร้างความสับสนได้โดยอนุญาตให้คุณเติมชื่อไฟล์ที่สัมพันธ์กับไดเร็กทอรีการทำงานปัจจุบันของคุณแม้ว่าคุณจะจบลงด้วยการใช้มันเป็นเป้าหมายของ symlink ในไดเรกทอรีอื่นทั้งหมด
<
มีการเปลี่ยนแปลงวิธีการจัดสรรหน่วยความจำระบบ แน่นอนว่าไม่มีไฟล์ที่มีชื่อ<
อยู่ในไดเรกทอรีนั้นมันเป็นวิธีที่ประหยัดในการสร้างไฟล์ที่มีขนาดเล็กมากซึ่งมีคุณสมบัติที่น่าสนใจมากกว่าไฟล์ข้อความปกติบนแพลตฟอร์มนั้น ๆ
ลิงก์สัมพัทธ์เป็นเรื่องยุ่งยากสำหรับฉันใน OS X เช่น
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin ~/bin
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin/ ~/bin
ทั้งสองใช้งานไม่ได้ (มีบางสิ่งสร้างขึ้น แต่ไม่ใช่ไดเรกทอรี) ฉันสร้างการเชื่อมโยงที่ต้องการโดยใช้เส้นทางที่แน่นอน
~/Dropbox/git/dave-bot $ ln -s ~/Dropbox/git/codyhess/bin/ ~/bin
ln -s Dropbox/git/codyhess/bin ~/bin
ฉันแค่ต้องการอธิบายเพิ่มเติมเกี่ยวกับวิธีสร้าง symlink โดยใช้พา ธ สัมพัทธ์ (พร้อมตัวอย่างโดยละเอียด)
ดังที่ Ignacio Vazquez-Abrams พูดถึงในความคิดเห็นคุณต้องระบุตำแหน่งไฟล์ / โฟลเดอร์ที่สัมพันธ์กับตำแหน่งที่จะสร้าง symlink ไม่ใช่สัมพันธ์กับไดเรกทอรีปัจจุบันของคุณ
ตัวอย่าง
คุณกำลังอยู่ใน/usr/share/nginx/html/_src/learn
คุณจะสร้างลิงก์สัญลักษณ์coding
ใน/usr/share/nginx/html
สร้าง symlink สัมพัทธ์ (ทฤษฎี):
sudo ln -s /path/to/source/file-or-folder/relative/from/symlink /path/to/symlink/relative/to/current/location
สร้าง symlink ที่เกี่ยวข้องจริง:
sudo ln -s ./_src/learn/coding ../../coding
ข้อมูลเพิ่มเติม (ตัวอย่างเดียวกัน)
current path: /usr/share/nginx/html/_src/learn
symlink(to be) relative to current path: ../../coding
symlink location (absolute): /usr/share/nginx/html/coding
folder/file relative to symlink location: ./_src/learn/coding
folder/file absolute path: /usr/share/nginx/html/_src/learn/coding