alibek Posted June 30, 2017 Posted June 30, 2017 Как можно узнать значение максимально допустимой вложенности символических ссылок? В man к path_resolution читал, что вроде бы максимальная глубина 7. Однако когда я проверял (на Debian 8) у меня получилось 40. Вставить ник Quote
edo Posted June 30, 2017 Posted June 30, 2017 смотреть в исходниках же. встречный вопрос: зачем? Вставить ник Quote
alibek Posted June 30, 2017 Author Posted June 30, 2017 В исходниках само собой. Но хотелось бы узнать действующее значение в текущей системе. Просто любопытство. Вставить ник Quote
sol Posted June 30, 2017 Posted June 30, 2017 А надо сделать три ссылки друг на друга по кольцу. Вставить ник Quote
vop Posted June 30, 2017 Posted June 30, 2017 Вообще-то, он на то и линк, что он один, и просто указывает на другой файл или линк. Вопрос другой - сколько конкретная прикладная программа будет "терпеть" перегоняя по линкам. Я, обычно, закладываю либо 16, либо 32. Не знаю, почему так. Просто в голову пришло. Вставить ник Quote
sol Posted July 3, 2017 Posted July 3, 2017 >> Вообще-то, он на то и линк, что он один, и просто указывает на другой файл или линк. [sol@sol ]$ ln -s 222 111 [sol@sol ]$ ln -s 333 222 [sol@sol ]$ ln -s 111 333 [sol@sol ]$ [sol@sol ]$ ll lrwxrwxrwx 1 sol sol 3 июл 4 00:08 111 -> 222 lrwxrwxrwx 1 sol sol 3 июл 4 00:09 222 -> 333 lrwxrwxrwx 1 sol sol 3 июл 4 00:09 333 -> 111 [sol@sol ]$ [sol@sol ]$ cat 111 cat: 111: Слишком много уровней символьных ссылок т.е. "по кругу" ездит. Вставить ник Quote
alibek Posted July 4, 2017 Author Posted July 4, 2017 Вопрос другой - сколько конкретная прикладная программа будет "терпеть" перегоняя по линкам. Сомневаюсь, что это делает прикладная программа. Разрешение ссылок делает системная функция, а прикладные программы просто ее вызывают. Циклическая зависимость приходит на ум первой, но она глубину рекурсии не покажет. Поэтому я сделал скрипт, который генерирует цепочку симлинков, проверяя их читаемость. Этот скрипт и показал, что в Debian 8 симлинки работают до 40 уровня, затем "Слишком много уровней". Вставить ник Quote
vop Posted July 4, 2017 Posted July 4, 2017 Вопрос другой - сколько конкретная прикладная программа будет "терпеть" перегоняя по линкам. Сомневаюсь, что это делает прикладная программа. Разрешение ссылок делает системная функция, а прикладные программы просто ее вызывают. Циклическая зависимость приходит на ум первой, но она глубину рекурсии не покажет. Поэтому я сделал скрипт, который генерирует цепочку симлинков, проверяя их читаемость. Этот скрипт и показал, что в Debian 8 симлинки работают до 40 уровня, затем "Слишком много уровней". Если программа просто открывает файл open/fopen, тогда да, файл ищет система. Если пишем под glibc, то до получения ошибки ELOOP ишем... > grep param.h /usr/include/sys/param.h #define MAXSYMLINKS 20 ... 20 раз. Если программа сама ищет "оригинал" файла по линкам - то считает сама. Хотя, по глубине TOODEEP - там другая величина. Вставить ник Quote
vop Posted July 4, 2017 Posted July 4, 2017 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/namei.c?id=v3.5#n624 static __always_inline int follow_link(struct path *link, struct nameidata *nd, void **p) { .... if (unlikely(current->total_link_count >= 40)) { *p = ERR_PTR(-ELOOP); /* no ->put_link(), please */ path_put(&nd->path); return -ELOOP; } .... } Вставить ник Quote
alibek Posted July 4, 2017 Author Posted July 4, 2017 То есть все хард-кодом указано. Я думал, что откуда-то из системных переменных это значение можно узнать. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.