Перейти к содержимому
Калькуляторы

Максимальная глубина вложенности symlink

Как можно узнать значение максимально допустимой вложенности символических ссылок?

В man к path_resolution читал, что вроде бы максимальная глубина 7.

Однако когда я проверял (на Debian 8) у меня получилось 40.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

смотреть в исходниках же.

 

встречный вопрос: зачем?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В исходниках само собой.

Но хотелось бы узнать действующее значение в текущей системе.

Просто любопытство.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А надо сделать три ссылки друг на друга по кольцу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вообще-то, он на то и линк, что он один, и просто указывает на другой файл или линк.

 

Вопрос другой - сколько конкретная прикладная программа будет "терпеть" перегоняя по линкам. Я, обычно, закладываю либо 16, либо 32. Не знаю, почему так. Просто в голову пришло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

>> Вообще-то, он на то и линк, что он один, и просто указывает на другой файл или линк.

 

[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: Слишком много уровней символьных ссылок

 

т.е. "по кругу" ездит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вопрос другой - сколько конкретная прикладная программа будет "терпеть" перегоняя по линкам.

Сомневаюсь, что это делает прикладная программа.

Разрешение ссылок делает системная функция, а прикладные программы просто ее вызывают.

Циклическая зависимость приходит на ум первой, но она глубину рекурсии не покажет.

Поэтому я сделал скрипт, который генерирует цепочку симлинков, проверяя их читаемость.

Этот скрипт и показал, что в Debian 8 симлинки работают до 40 уровня, затем "Слишком много уровней".

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вопрос другой - сколько конкретная прикладная программа будет "терпеть" перегоняя по линкам.

Сомневаюсь, что это делает прикладная программа.

Разрешение ссылок делает системная функция, а прикладные программы просто ее вызывают.

Циклическая зависимость приходит на ум первой, но она глубину рекурсии не покажет.

Поэтому я сделал скрипт, который генерирует цепочку симлинков, проверяя их читаемость.

Этот скрипт и показал, что в Debian 8 симлинки работают до 40 уровня, затем "Слишком много уровней".

 

Если программа просто открывает файл open/fopen, тогда да, файл ищет система. Если пишем под glibc, то до получения ошибки ELOOP ишем...

 

> grep param.h /usr/include/sys/param.h

#define MAXSYMLINKS 20

 

... 20 раз.

 

Если программа сама ищет "оригинал" файла по линкам - то считает сама. Хотя, по глубине TOODEEP - там другая величина.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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;
}
....
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

То есть все хард-кодом указано.

Я думал, что откуда-то из системных переменных это значение можно узнать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.