ファイル名とファイルパス名

ファイル名とファイルパス名

ファイルのファイル名は、ファイルのinodeへのポインタと呼ばれます。これを知る前に、これがタスクを実行したファイルのパス名だと思いました。

Unixでは、パス名とファイル名がどのように定義されているのかわかりません。たとえば、 /home/tim/tim.pdfファイル名のファイルパス名が正しいですtim.pdf

ファイル名とファイルパス名の違いが何であるかを知りたいです。ありがとうございます。

ベストアンサー1

ディレクトリにはファイル名 ⇒ inode マッピングのリストが含まれています。あなたのディレクトリには、(例えば)inodeを指す/home/timファイル名を持つエントリが含まれています。tim.pdf1234

このディレクトリにどのように行きますか?まあ、ディレクトリは実際にこれらのエントリを含む特別なファイルです。親ファイルを見ると、他のファイルと同じように見つけることができます。ディレクトリ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の別の名前にすぎないため、ファイルシステム全体にハードリンクを作成することはできません。1234tim.pdf

もう一つは特別な項目...。これは(通常はファイルシステムによって異なります)実際のディレクトリエントリです。これは本質的にディレクトリ自体と親ディレクトリへのハードリンクです。私たちのアルゴリズムもこの問題を処理します。マウントについて興味深い点があります。デフォルトのファイルシステムはマウントする場所がわからないため、正しい..エントリを持つことはできません。この問題を解決するために、システムは..マウントされたファイルシステムのルートエントリの代わりに親デバイスのディレクトリエントリをだまして表示します。


したがって、inodeの観点から見ると、次のようになります。

  • ファイル名特定のディレクトリ内で呼び出される特定のインデックスノードの名前。
  • 既知のポイントからインデックスノードに到達する方法については、いくつかのガイドラインがあります。

おすすめ記事