ファイルのファイル名は、ファイルのinodeへのポインタと呼ばれます。これを知る前に、これがタスクを実行したファイルのパス名だと思いました。
Unixでは、パス名とファイル名がどのように定義されているのかわかりません。たとえば、
/home/tim/tim.pdf
ファイル名のファイルパス名が正しいですtim.pdf
。
ファイル名とファイルパス名の違いが何であるかを知りたいです。ありがとうございます。
ベストアンサー1
ディレクトリにはファイル名 ⇒ inode マッピングのリストが含まれています。あなたのディレクトリには、(例えば)inodeを指す/home/tim
ファイル名を持つエントリが含まれています。tim.pdf
1234
このディレクトリにどのように行きますか?まあ、ディレクトリは実際にこれらのエントリを含む特別なファイルです。親ファイルを見ると、他のファイルと同じように見つけることができます。ディレクトリinodeを指す/home
ファイル名を持つエントリがあります。tim
順番に、私たちは/home
その親を調べることでそれを見つけることができます/
。
/
根なのにちょっと特別ですね。システムは親がないので、直接アクセスする方法を知っています。
これ名前ファイルのローカル名はそのディレクトリのローカル名ですtim.pdf
。道ファイルの説明では、ルートディレクトリからファイルにアクセスする方法について説明します。/home/tim/tim.pdf
必要に応じて、これを一連のガイドラインとして考えることができます。まず探し/
、home
その中を探しtim
、最後にtim.pdf
欲しいものを探します。
すべてのパスを解析することは、実際に次の疑似コードを使用する再帰アルゴリズムです。
inode find_file(inode where_i_am, string[] remaining_path):
if remaining_path is empty:
# Nothing more to look at - we've found the file!
return where_i_am
current_item = remaining_path[0]
rest_of_path = remaining_path[1..]
for entry in directory_entries(where_i_am):
if entry.filename == current_item:
return find_file(entry.inode, rest_of_path)
return file not found
以下からあなたのファイルを見つけることができます:
find_file(inode_of_root, ["home", "tim", "tim.pdf"])
場合によっては、状況がより複雑になり、疑似コードはそのような場合に対処しません。そのうちの1つはマウントです。別のパーティションをマウントすると、/home
システムはそのパーティションが入ったときに/home
別のパーティションに移動する必要があることを覚えておいて、tim
そのファイルシステムのルートで検索を開始します。新しいファイルシステムには独自のinodeセットがあるため、実際にファイルデータにアクセスするにはinodeとデバイスを知る必要があります。実際の構造は、実際には両方で構成されます。
シンボリックリンクは、システムに別のルートを探し、その新しい場所で検索を続行するように指示します。
もう一つのケースはハードリンク(古い友人)です。通常のファイルinodeには、必要な数のハードリンクがある可能性があります。ln tim.pdf pdf.tim
同じ内容を持ち、ディスク上の同じ場所にあるリンク設定を使用できます。pdf.tim
同じinodeを指すエントリを持つ別のディレクトリエントリがあります。私たちのアルゴリズムはこの場合非常にうまく機能します。ファイルへのハードリンクは元のファイルとまったく同じであり、いかなる方法でもそれらを区別する必要はありません。実際、ハードリンクはinodeの別の名前にすぎないため、ファイルシステム全体にハードリンクを作成することはできません。1234
tim.pdf
もう一つは特別な項目.
と..
。これは(通常はファイルシステムによって異なります)実際のディレクトリエントリです。これは本質的にディレクトリ自体と親ディレクトリへのハードリンクです。私たちのアルゴリズムもこの問題を処理します。マウントについて興味深い点があります。デフォルトのファイルシステムはマウントする場所がわからないため、正しい..
エントリを持つことはできません。この問題を解決するために、システムは..
マウントされたファイルシステムのルートエントリの代わりに親デバイスのディレクトリエントリをだまして表示します。
したがって、inodeの観点から見ると、次のようになります。
- ㅏファイル名特定のディレクトリ内で呼び出される特定のインデックスノードの名前。
- ㅏ道既知のポイントからインデックスノードに到達する方法については、いくつかのガイドラインがあります。