최대 수준의 심볼릭 링크 가져 오기


3

시스템에서 가능한 최대 symlink 수준의 수를 얻고 싶습니다. 커널에서 40으로 하드 코딩 된 것으로 나타났습니다. 그러나 누군가 소스 코드에서이를 변경하고 커널을 다시 컴파일 할 경우를 대비 하여이 숫자를 동적으로 가져 오려고합니다. 이것도 가능합니까? 그렇지 않다면이 숫자를 항상 40으로 가정하는 것이 얼마나 나쁜 생각입니까?

감사.


이 질문 (해머를 피하기 위해 중복으로 제안하지는 않음) 도 참조하십시오 .
Stephen Kitt

답변:


1
touch file
test_max=45
for ((j=2,i=3;i<test_max;i++,j++)) ; do ln -s $j $i; done
for ((i=1;i<test_max;i++)) ; do if ! [ -f "$i" ]; then echo "$i"; break; fi ; done
41

이것이 실제로 유일한 옵션입니까?
karlosss

1
@karlosss 그건 내 주장이 아닙니다. 나는 당신의 질문을 읽을 때까지 문제를 알지 못했습니다. 그것은 그 정보를 얻는 방법에 대한 저의 자연스러운 생각이었습니다. 그러나 명시 적으로 어딘가에서 사용할 수 있습니다 ( /proc/sys/kernel/하지만 아무것도 찾지 못했습니다 ).
Hauke ​​Laging

1
가장 가까운 것은 echo -n "#include <sys/param.h>\nMAXSYMLINKS" | gcc -E -이지만 커널 (20 v. 40)이 아닌 C 라이브러리 버전을 제공합니다. 에 아무것도 없습니다 getconf. 일부 유닉스 시스템은 이것을 커널 조정 가능 ( fs_symlinksHP-UX의 IIRC)으로 사용했습니다.
Stephen Kitt

나는 여전히 우리가 무언가를 놓치고 누군가가 쉘 변수 또는이 값을 포함하는 파일을 가지고 있기를 바라고 있습니다 (예, 확률은 매우 낮습니다). 나는 또한 gcc해결책 을 피하고 싶다 .
karlosss

내 OpenBSD 시스템에서 getconf SYMLOOP_MAX"32"를 다시 얻을 수 있습니다 .
Kusalananda
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.