~からhttp://en.wikipedia.org/wiki/Symbolic_link#Storage_of_symbolic_links
シンボリックリンクの初期実装では、シンボリックリンク情報を一般ファイルのデータとして保存した。このファイルには、リンク先へのテキスト参照と、それをシンボリックリンク(説明が必要)として表すインジケータが含まれています。
この方法は低速で、小規模システムではディスクスペースを非効率的に使用します。と呼ばれる改善クイックシンボリックリンク、ディスクにファイル情報を格納するために使用されるデータ構造(インデックスノード)にターゲットパスを保存することを許可します。。このスペースには通常、ファイルに割り当てられているディスクブロックアドレスのリストが格納されます。これにより、短い宛先パスを持つシンボリックリンクにすばやくアクセスできます。高速シンボリックリンクを持つシステムは、元の方法を使用することがよくあります。ターゲットパスが使用可能なinodeスペースを超える場合。元のスタイルは遡及して呼び出されます。 遅いシンボリックリンク。また、他のバージョンまたは以前のバージョンのオペレーティングシステムとのディスク互換性にも使用されます。
「ディスクにファイル情報を格納するために使用されるデータ構造(アノード)内にターゲットパスを保存できるようにする」とは、クイックシンボリックリンクがクイックシンボリックリンクのアノード内にリンクされたファイルへのパスを保存することを意味します。 ?
ファイル自体として、高速シンボリックリンクは実際にはinodeであり、ファイルの内容はありませんか?
遅いシンボリックリンクにはファイル自体にinodeがあり、一部のファイルの内容はターゲットパスにありますか?
「ターゲットパスが使用可能なinodeスペースを超える場合」とはどういう意味ですか?
ファイルへのシンボリックリンクが高速シンボリックリンクである場合、シンボリックリンクとファイルが同じファイルシステムにある場合にのみこれは正しいですか?
シンボリックリンクが高速か遅いかを確認するコマンドはありますか?
ファイルの内容がある場合、シンボリックリンクの内容を表示するコマンドは何ですか? (この方法では、高速シンボリックリンクにファイルコンテンツはありませんが、遅いシンボリックリンクにファイルコンテンツがある場合はこれを確認できます。)
答え1
「ディスクにファイル情報を格納するために使用されるデータ構造(アノード)内にターゲットパスを保存できるようにする」とは、クイックシンボリックリンクがクイックシンボリックリンクのアノード内にリンクされたファイルへのパスを保存することを意味します。 ?
はい
ファイル自体として、高速シンボリックリンクは実際にはinodeであり、ファイルの内容はありませんか?
「ファイル内容を含める」の意味によって異なります。ファイルの内容open()
を取得できないため、シンボリックリンクにはread()
ファイルの内容は含まれません。ただし、引用したテキストとは、「ファイルにリンク先へのテキスト参照が含まれている」という意味です。はい。そのテキスト参照はファイルの「内容」と見なすことができます。
これは、シンボリックリンクが高速シンボリックリンクであるか遅いシンボリックリンクであるかにかかわらず同じです。ファイルシステムがこの情報をディスク上のデータ構造に保存することを選択する方法と場所は実装の詳細であり、これには影響しません。
遅いシンボリックリンクにはファイル自体にinodeがあり、一部のファイルの内容はターゲットパスにありますか?
同じ観点から見るとそうです!
「ターゲットパスが使用可能なinodeスペースを超える場合」とはどういう意味ですか?
inodeを格納するために使用されるファイルシステムとデータ構造の種類、そのデータ構造に空き容量がどれだけあるか、サイズが可変か固定かによって異なります。遅いシンボリックリンクとして保存される前のシンボリックリンクターゲットパスの最大長は、ファイルシステムの実装の詳細です。
しかし、特定のファイルシステムが短いコンテンツを保存するために同じトリックを使用するのを防ぐことはできません。定期的なスペースとディスクアクセスを節約するためのファイルです。
シンボリックリンクが高速か遅いかを確認するコマンドはありますか?
せいぜいファイルシステムのデバッグやダンプツールです。興味のあるファイルシステムの種類(xfs、ext *、btrfsなど...)に完全に依存します。
ファイルの内容がある場合、シンボリックリンクの内容を表示するコマンドは何ですか? (この方法では、高速シンボリックリンクにファイルコンテンツはありませんが、遅いシンボリックリンクにファイルコンテンツがある場合はこれを確認できます。)
を使用してシンボリックリンクのターゲットパス(コンテンツ)を取得できますが、それでもreadlink
問題ls -l
ありません。
答え2
つながったものからインデックスノードウィキページ:
ファイルの内容に加えて、ファイルシステムはファイルのデータ構造にも依存します。前者をメタデータ、つまりデータを記述するデータといいます。各ファイルはしばしば、i番号またはinode番号と呼ばれる整数で識別されるinodeに関連付けられます。
inodeには、ファイルの所有権、アクセスモード(読み取り、書き込み、実行権限)、ファイルの種類など、ファイルとディレクトリ(フォルダ)に関する情報が格納されます。多くの種類のファイルシステム実装では、ファイルシステムが作成されると、最大inode数が固定され、ファイルシステムが保持できるファイルの最大数が制限されます。ファイルシステムのinodeの一般的な割り当て経験的な方法は、フルサイズの1%です。
inode番号は、デバイスの既知の場所にあるinodeテーブルにインデックスを付けます。 inode番号に基づいて、カーネルのファイルシステムドライバ部分は、inodeにアクセスできるファイルの場所を含むことによってinodeの内容にアクセスできます。このコマンドを使用してファイルのinode番号を見つけることができます
ls -i
。このls -i
コマンドは、レポートの最初の列にあるinode番号を印刷します。
上記のように、ls -i
これはinode番号を提供できます。これはおそらくリンクがある場所です。ls -l
リンク先へのパスを提供します。後者はstat()
システムコールが必要です。ただし、ファイルのディレクトリリストディレクトリエントリ- inode 番号とファイル名が含まれますが、フォーマットにはls -i
含まれない場合があります。少なくともファイルシステムによっては、stat()
含まれているディレクトリ以外のファイルオブジェクトは必要ない場合があります。
ls
次のオプションを使用して、リンクされたレポートの報告方法を変更できます。POSIXで指定:
-F
- -H オプションまたは -L オプションを指定しない限り、オペランドと呼ばれるシンボリックリンクに従わないでください。ディレクトリである各パス名の直後にスラッシュ( '/' )を書き、各実行ファイルの後にアスタリスク( '*' )を書き、各FIFOの後にパイプ( '|')を書き、at記号( '@ )を書きます。 ')各パス名の後にはシンボリックリンクがあります。他のファイル形式の場合は、異なる記号を書くことができます。
-H
- ディレクトリタイプファイルを参照するシンボリックリンクがコマンドラインで指定されている場合、lsはリンク自体ではなくリンクが参照するファイルのファイル情報とファイルタイプを評価しますが、lsはリンク名を作成する必要があります。リンクが参照するファイルではありません。
-L
- すべてのシンボリックリンク(コマンドラインで名前が指定されたかファイル階層で見つかったか)のファイル情報とファイルタイプを、リンク自体ではなくリンクが参照するファイルのものと評価します。 ls リンクの名前です。リンクが参照するファイルではなく、独自に作成する必要があります。 -Lを-lと一緒に使用すると、シンボリックリンクの内容が長い形式で記録されます(STDOUTセクションを参照)。
リンクはどうなりますか?早く一つ? ~から同じリンク Wiki ページ:
インライン
非常に小さなファイルをinode自体に保存すると、スペース(データブロックは不要)とナビゲーション時間(追加のディスクアクセスは不要)が節約されます。このファイルシステム機能をインラインと呼びます。したがって、最新のファイルシステムを使用する場合、inodeとファイルデータの厳密な分離を想定することはできません。
ファイル内のデータがデータポインタに割り当てられたスペースに収まる場合は、そのスペースを便利に使用できます。たとえば、ext2は、データが60バイトを超えない場合、シンボリックリンク(通常はファイル名)のデータをこのように保存します。(「クイックシンボリックリンク」)。
Ext4には、ファイルシステムの作成中にアクティブになったときにext4がインライン化できるようにするinline_dataというファイルシステムオプションがあります。 inodeのサイズは限られているので、非常に小さなファイルでのみ機能します。
私はここでもう一つの素晴らしい答えが上記の方法に言及すると思います同じトリック...