UNIX/Linuxについてではなくファイルシステムの実装についてですが、Unix/Linuxはカーネルレベルでinodeを使用し、ファイルシステムの実装ではinode(少なくとも仮想のもの)を使用します。
一般に
、シンボリックリンクは単に持っているファイル(ところで、ディレクトリもファイルである)、以下のとおりです。
- フラグ
file-type
システムに伝える「iノード」にこのファイルがあります"シンボリックリンク"
- file-content:ターゲットへのパス - 言い換えれば、シンボリックリンクは、単にinodeにフラグを持つファイル名を含むファイルです。
仮想ファイルシステムにもシンボリックリンクが存在する可能性があるため、FUSEやその他のファイルシステムの実装元を確認してください。 (EXT2/EXT3/ufs..etc)
ので、
は、UNIX/Linuxではiノード答えますか?
は、ファイルシステムの実装に依存しますが、一般的には「ファイルタイプ」(所有者、アクセス権、タイムスタンプ、サイズ、データブロックへのポインタ)が含まれます。ファイルシステムにはinode
(物理的な意味合いではありません)がありますが、カーネルとの互換性を維持するための「仮想inode」しかありません。
「はい」の場合、iノード番号はターゲットとリンクで同じになりますか?
いいえ。通常、シンボリックリンクは(ファイルタイプ、独自のデータ・ブロックなどで)独自のiノードを持つファイル、ある
はい、リンクinodeがターゲットの iノードとは異なる権限を持つことができた場合は(もし1つは存在する)?
約どのようにシンボリックリンクファイルが処理されます。通常、カーネルはシンボリックリンクパーミッションの変更を許可しません。シンボリックリンクは常にデフォルトパーミッションを持ちます。のような一般的なプログラムは、シンボリックリンクのアクセス権を変更しないので、このようなファイルシステムを作るのは無意味なので、シンボリックリンクに対して異なるアクセス権を許可する独自のファイルシステムを書くことはできますが、問題になるでしょう)
Toハードリンクとシンボリックリンクの違いを理解するには、まずディレクトリを理解する必要があります。
ディレクトリは、 "このファイルをfile-name
からinode_number
のマップとして扱う"というファイルをカーネルに伝えるファイルです(inodeのフラグによって区別されます)。ハードリンクは単に同じファイルにマップされるファイル名です。inode
だから、ディレクトリ・ファイルが含まれている場合:
file_a: 1000
file_b: 1001
file_c: 1000
上記の手段を、このディレクトリに3つのファイルです:1000
file_bは、iノード1001によって記述iノードによって記述
- file_aと
- file_cは、再びinode 1000で記述されています(ハードリンクと file_aで、ハードリンク〜 file_aではありません - どのファイル名が最初に来たのかはわかりませんyは同一である)。
これはfile_b
のiノード(iノード1001)コンテンツ「file_a」および「これはシンボリックリンクである」を意味するフラグを有することができるシンボリックリンク、の主な違いです。この場合、file_b
はfile_a
を指し示すシンボリックリンクになります。
と 'READLINK()'あなたが与えられたシンボリックリンクにパス名として保存されているものを見つけることができます - しかし、1つのシンボリックリンクにパス名が横断する要素の1つは、それ自体であるとき、人生は本当に面白いですシンボリックリンク。カーネルはそれをaplombで処理します。人々は必ずしもそうではありません。与えられたファイルのシンボリックリンクのない絶対パスを決定する 'realpath()'もあります。 –