Linux는 몇 단계의 심볼릭 링크를 해결할 수 있습니까?

Linux는 몇 단계의 심볼릭 링크를 해결할 수 있습니까?

나는 "Linux 프로그래밍 인터페이스"를 읽고 있는데 책에는 다음과 같이 나와 있습니다.

SUSv3에서는 최소한 _POSIX_SYMLOOP_MAX경로 이름의 모든 기호 링크 구성 요소를 역참조할 수 있도록 구현해야 합니다. _POSIX_SYMLOOP_MAX지정된 값은 입니다 8. 그러나 커널 2.6.18 이전에는 Linux에서 심볼릭 링크 체인을 따를 때 5개의 역참조 제한을 적용했습니다.커널 2.6.18부터 Linux는 SUSv3에서 지정한 최소 8개의 역참조를 구현합니다. Linux는 또한 전체 경로 이름에 대해 총 40개의 역참조를 적용합니다.

잘 이해하지 못 하겠어마지막 두 문장8, 40이들제한사항그리고 제한사항의 차이점은 무엇인가요? 나는 한계에 도달하기 위해 내 컴퓨터에 여러 개의 심볼릭 링크를 만들어 내 자신을 테스트했습니다.

$ l
Permissions Links Size User  Group Date Modified Name
.rw-r--r--@     1   12 steve steve 20 Oct 16:35  a
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:34  b -> a
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:35  c -> b
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:35  d -> c
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:35  e -> d
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:36  f -> e
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:36  g -> f
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:36  h -> g
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:36  i -> h
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:36  j -> i
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:37  k -> i
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:37  l -> k
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:37  m -> l
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:37  n -> m
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:38  o -> n
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:38  p -> o
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:40  q -> p
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:41  r -> q
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:41  s -> r
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:41  t -> s
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:41  u -> t
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:41  v -> u
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:41  w -> v
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:41  x -> w
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:41  y -> x
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:41  z -> y
lrwxrwxrwx@     1    1 steve steve 20 Oct 16:42  z1 -> z
lrwxrwxrwx@     1    2 steve steve 20 Oct 16:42  z2 -> z1
lrwxrwxrwx@     1    2 steve steve 20 Oct 16:42  z3 -> z2
lrwxrwxrwx@     1    2 steve steve 20 Oct 16:42  z4 -> z3
lrwxrwxrwx@     1    2 steve steve 20 Oct 16:43  z5 -> z4
lrwxrwxrwx@     1    2 steve steve 20 Oct 16:43  z6 -> z5
lrwxrwxrwx@     1    2 steve steve 20 Oct 16:43  z7 -> z6
lrwxrwxrwx@     1    2 steve steve 20 Oct 16:43  z8 -> z7
lrwxrwxrwx@     1    2 steve steve 20 Oct 16:43  z9 -> z8
lrwxrwxrwx@     1    2 steve steve 20 Oct 16:43  z10 -> z9
lrwxrwxrwx@     1    3 steve steve 20 Oct 16:43  z11 -> z10
lrwxrwxrwx@     1    3 steve steve 20 Oct 16:43  z12 -> z11
lrwxrwxrwx@     1    3 steve steve 20 Oct 16:43  z13 -> z12
lrwxrwxrwx@     1    3 steve steve 20 Oct 16:44  z14 -> z13
lrwxrwxrwx@     1    3 steve steve 20 Oct 16:44  z15 -> z14
lrwxrwxrwx@     1    3 steve steve 20 Oct 16:44  z16 -> z15
lrwxrwxrwx      1    3 steve steve 20 Oct 16:45  z17 -> z16
$ cat a
You did it.

$ cat z17
cat: z17: Too many levels of symbolic links

$  cat z16
You did it.

내가 이 제한을 발동시킨 것 같은데 40, 그게 뭐죠 8?

답변1

이 두 가지 제한 사항은 제한 사항입니다.같은 것.

8는 정의된 대로 _POSIX_SYMLOOP_MAXPOSIX입니다.가장 작은모든 POSIX 호환 운영 체제가 준수해야 하는 제한 사항입니다.

특정 운영 체제의 경우 POSIX 최소 제한이 충족되는 한(즉, 이상 8) 운영 체제는 다른 제한 값을 선택할 수 있습니다.

Linux는 커널 2.6.18 이후에 8.유일한 병목 현상단일 경로를 사용할 수 있는 횟수( path resolution40회)로 기호 링크 확인을 제한합니다. 따라서 경로 이름을 확인할 때 따라오는 최대 심볼릭 링크 수는 40입니다.

관련 정보