alibek Posted June 30, 2017 · Report post Как можно узнать значение максимально допустимой вложенности символических ссылок? В man к path_resolution читал, что вроде бы максимальная глубина 7. Однако когда я проверял (на Debian 8) у меня получилось 40. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
edo Posted June 30, 2017 · Report post смотреть в исходниках же. встречный вопрос: зачем? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted June 30, 2017 · Report post В исходниках само собой. Но хотелось бы узнать действующее значение в текущей системе. Просто любопытство. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
sol Posted June 30, 2017 · Report post А надо сделать три ссылки друг на друга по кольцу. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vop Posted June 30, 2017 · Report post Вообще-то, он на то и линк, что он один, и просто указывает на другой файл или линк. Вопрос другой - сколько конкретная прикладная программа будет "терпеть" перегоняя по линкам. Я, обычно, закладываю либо 16, либо 32. Не знаю, почему так. Просто в голову пришло. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
sol Posted July 3, 2017 · Report post >> Вообще-то, он на то и линк, что он один, и просто указывает на другой файл или линк. [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 Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted July 4, 2017 · Report post Вопрос другой - сколько конкретная прикладная программа будет "терпеть" перегоняя по линкам. Сомневаюсь, что это делает прикладная программа. Разрешение ссылок делает системная функция, а прикладные программы просто ее вызывают. Циклическая зависимость приходит на ум первой, но она глубину рекурсии не покажет. Поэтому я сделал скрипт, который генерирует цепочку симлинков, проверяя их читаемость. Этот скрипт и показал, что в Debian 8 симлинки работают до 40 уровня, затем "Слишком много уровней". Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vop Posted July 4, 2017 · Report post Вопрос другой - сколько конкретная прикладная программа будет "терпеть" перегоняя по линкам. Сомневаюсь, что это делает прикладная программа. Разрешение ссылок делает системная функция, а прикладные программы просто ее вызывают. Циклическая зависимость приходит на ум первой, но она глубину рекурсии не покажет. Поэтому я сделал скрипт, который генерирует цепочку симлинков, проверяя их читаемость. Этот скрипт и показал, что в Debian 8 симлинки работают до 40 уровня, затем "Слишком много уровней". Если программа просто открывает файл open/fopen, тогда да, файл ищет система. Если пишем под glibc, то до получения ошибки ELOOP ишем... > grep param.h /usr/include/sys/param.h #define MAXSYMLINKS 20 ... 20 раз. Если программа сама ищет "оригинал" файла по линкам - то считает сама. Хотя, по глубине TOODEEP - там другая величина. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vop Posted July 4, 2017 · Report post 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 Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted July 4, 2017 · Report post То есть все хард-кодом указано. Я думал, что откуда-то из системных переменных это значение можно узнать. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...