23

シンボリック リンクは、UNIX/Linux システムによって内部でどのように管理されていますか。実際のターゲット ファイルがなくても、シンボリック リンクが存在する場合があることが知られています (ダングリング リンク)。では、シンボリックリンクを内部的に表現するものは何ですか。

Windows では、答えはreparse point.

質問:

答えinodeは UNIX/Linux でしょうか?

はいの場合、inode 番号はターゲットとリンクで同じになりますか?

はいの場合、リンク i ノードは、ターゲットの i ノード (存在する場合) とは異なるアクセス許可を持つことができますか?

4

2 に答える 2

3

You can also easily explore this on your own:

$ touch a
$ ln -s a b
$ ln a c
$ ls -li
total 0
95905 -rw-r--r-- 1 regnarg regnarg 0 Jun 19 19:01 a
96990 lrwxrwxrwx 1 regnarg regnarg 1 Jun 19 19:01 b -> a
95905 -rw-r--r-- 2 regnarg regnarg 0 Jun 19 19:01 c

The -i option to ls shows inode numbers in the first column. You can see that the symlink has a different inode number while the hardlink has the same. You can also use the stat(1) command:

$ stat a
  File: 'a'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 28h/40d Inode: 95905       Links: 2
[...]

$ stat b
  File: 'b' -> 'a'
  Size: 1           Blocks: 0          IO Block: 4096   symbolic link
Device: 28h/40d Inode: 96990       Links: 1
[...]

If you want to do this programmatically, you can use the lstat(2) system call to find information about the symlink itself (its inode number etc.), while stat(2) shows information about the target of the symlink, if it exists. Example in Python:

>>> import os
>>> os.stat("b").st_ino
95905
>>> os.lstat("b").st_ino
96990
于 2016-06-19T17:16:42.077 に答える