私は「Linuxプログラミングインタフェース」を読んでいますが、本には次のように記載されています。
SUSv3では、少なくとも
_POSIX_SYMLOOP_MAX
パス名のすべてのシンボリックリンクコンポーネントを逆参照できるように実装する必要があります。_POSIX_SYMLOOP_MAX
指定された値はです8
。ただし、カーネル 2.6.18 以前は、Linux でシンボリックリンクチェーンに従う際に 5 つの逆参照制限を適用していました。カーネル2.6.18以降、LinuxはSUSv3で指定された少なくとも8つの逆参照を実装します。 Linuxはまた、フルパス名に合計40の逆参照を適用します。
よくわかりません。最後の2つの文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
これら2つの制限は制限です。同じもの。
8
は定義されているように_POSIX_SYMLOOP_MAX
POSIXです。最小すべてのPOSIX準拠のオペレーティングシステムが準拠する必要がある制限。
特定のオペレーティングシステムでは、POSIX最小制限が満たされている限り(つまり、それ以上8
)、オペレーティングシステムは他の制限値を選択できます。
Linuxはカーネル2.6.18以降8
。唯一のボトルネックシングルパスを使用できる回数(path resolution
40回)にシンボリックリンクの確認を制限します。したがって、パス名を解決するときに続く最大シンボリックリンク数は40です。