나는 "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_MAX
POSIX입니다.가장 작은모든 POSIX 호환 운영 체제가 준수해야 하는 제한 사항입니다.
특정 운영 체제의 경우 POSIX 최소 제한이 충족되는 한(즉, 이상 8
) 운영 체제는 다른 제한 값을 선택할 수 있습니다.
Linux는 커널 2.6.18 이후에 8
.유일한 병목 현상단일 경로를 사용할 수 있는 횟수( path resolution
40회)로 기호 링크 확인을 제한합니다. 따라서 경로 이름을 확인할 때 따라오는 최대 심볼릭 링크 수는 40입니다.