シンボリックリンクが含まれている小さなファイルです場所をそれはシンボリックリンクだことを示すディレクトリエントリ内のフラグと、対象ファイルの(すなわち、パスとファイル名)。
シンボリックリンクを開くと、OSはその場所をたどってターゲットファイルを見つけます。ターゲット自体シンボリックリンクである場合、それは同様にその位置を次の(1)(2)のファイルへの地点までありません FinalFileと呼びます)。次に、OS はFinalFileのiノードを取得します(inodeには変更時間などのメタデータが含まれ、ファイルのデータへのポインターも含まれます)。最後に、FinalFileのiノードが開かれます。これ以降、プロセスはそのiノードを使用してファイルの読み取り/書き込みを行います。結果として、シンボリックリンクの名前またはパスの変更、シンボリックリンクの削除、FinalFileのパスまたは名前の変更、あるいは削除FinalFileを(3)プロセスに影響を与えません。同じiノードからまだ読み取り中です。
ほとんどの場合、シンボリックリンクのファイルデータ操作はFinalFileに影響します(たとえば、シンボリックリンクの読み取りと書き込みはFinalFileの読み取り/書き込みになります)例外があります。readlink()
システムコールはシンボリックリンク自体の内容を読み取ります。
一方、ファイルのメタデータ操作(名前の変更や削除など)は通常、シンボリックリンクに影響します。ただし、ここにも例外があります。lstat()
システムコールはと似stat()
ていますが、FinalFileではなくシンボリックリンク自体に関する情報を返します(2)。
(1)レベルの数には制限があり、シンボリックリンク内の場所が相対パスの場合、状況は少し複雑になります。
(2)詳細については、symlink(7):シンボリックリンクの処理を参照してください。man 7 symlink
(3)rm
コマンドまたはunlink()
システムコールは、ファイルを物理的に削除しません。ファイルのiノードを指すディレクトリエントリを削除します。ファイル自体た場合にのみ削除され、両方の a)にそのiノードaとbを参照してください。これ以上のディレクトリエントリ(ハードリンク)がないが)何のプロセスがファイルオープンを持っていません。