Как вы увеличиваете MAXSYMLINKS

10

В скрипте Python я создаю связку символических ссылок.

пример: link1-> link2-> link3 -> .......-> somefile.txt

Мне было интересно, как вы можете изменить максимальное количество символических ссылок, чтобы быть больше 20?

grebwerd
источник
5
Зачем тебе это делать? MAXSYMLINKS определяется в системных заголовках (например, /usr/include/x86_64-linux-gnu/sys/param.hв моей системе) и не предназначен для изменения пользователями.
ire_and_curses
1
Необходимость вызова readlink () более 20 раз, чтобы получить реальный файл, не будет хорошей для производительности.
Иордания
5
В школе я беру уроки этического хакерства, что довольно круто. Один из ХАКОВ называется 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
Стефан Шазелас
источник