คุณเพิ่ม MAXSYMLINKS อย่างไร


10

ในสคริปต์ไพ ธ อนฉันกำลังสร้างลิงก์สัญลักษณ์มากมายที่ถูกล่ามโซ่ไว้ด้วยกัน

ตัวอย่าง: link1-> link2-> link3 -> .......-> somefile.txt

ฉันสงสัยว่าคุณสามารถเปลี่ยนจำนวนสูงสุดของ symlink ให้มากกว่า 20 ได้อย่างไร


5
ทำไมคุณต้องการทำเช่นนี้? MAXSYMLINKS มีการกำหนดไว้ในส่วนหัวของระบบ (เช่น/usr/include/x86_64-linux-gnu/sys/param.hในระบบของฉัน) และไม่ได้มีไว้สำหรับแก้ไขโดยผู้ใช้
ire_and_curses

1
ต้องโทร readlink () มากกว่า 20 ครั้งเพื่อไปยังไฟล์จริงจะไม่ดีต่อประสิทธิภาพ
จอร์แดน

5
ฉันกำลังเรียนแฮ็คจริยธรรมที่โรงเรียนซึ่งค่อนข้างเท่ห์หนึ่งใน HACKS เรียกว่า TOCTTOU ที่คุณต้องการส่งผลกระทบต่อประสิทธิภาพโดยการสร้างเขาวงกตของไดเรกทอรี / สัญลักษณ์ลิงก์ที่ซับซ้อน
grebwerd

คำตอบ:


16

บน Linux (อย่างน้อย 3.5) มันฮาร์ดโค้ดเป็น 40 (ดูfollow_link()ในfs/namei.c ) และโปรดทราบว่ามันเป็นจำนวนลิงก์ที่ตามมาเมื่อแก้ไขส่วนประกอบทั้งหมดของเส้นทางคุณสามารถเปลี่ยนได้โดยการคอมไพล์เคอร์เนลใหม่เท่านั้น

$ ln -s . 0
$ n=0; repeat 50 ln -s $((n++)) $n
$ ls -LdF 39
39/
$ ls -LdF 40
ls: cannot access 40: Too many levels of symbolic links
$ ls -LdF 20/18 10/10/10/6
10/10/10/6/  20/18/
$ ls -LdF 20/19 10/10/10/7
ls: cannot access 20/19: Too many levels of symbolic links
ls: cannot access 10/10/10/7: Too many levels of symbolic links
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.