ドットドット(..)とは何ですか?シンボリックリンクと動作が異なるのはなぜですか?


14

..(二重ドット)の性質を理解しようとしています。アクセス方法によって異なるターゲットを指しているようです。

例:-

    /outer/
        middle/
            inner/
        inner --> ./middle/inner/

今、に/outer/middle/inner/..つながり/outer/middle/ますが、シンボリックリンクからアクセスすると、に/outer/inner/..つながり/outer/ます。..ここには2つの異なるものがあるようです。

..正確には何ですか?シンボリックリンク?ハードリンク?または、ディレクトリにアクセスするときにパスに応じて動的に生成されますか?または、シンボリックリンクに関する私の理解が間違っている可能性があります。

編集:

その他の関連する観察

    /outer/
        middle/
            file
            inner/
               f --> ./../file
        inner --> ./middle/inner/

今、私は/outer/inner/fそれを介してファイルにアクセスしようとすると動作します。しかし、それは/outer/inner/../fileファイルを指し示していないため、そうすべきではありません。ファイルはにあり/outer/middle/inner/..ます。これは上記の動作と矛盾するようです!?


シンボリックリンクはショートカットではないことに注意してください。それらはポインタのようなものです。
wizzwizz4 16

回答:


34

..あるハードリンクディレクトリエントリの一部として作成された親ディレクトリには。

ls -ailこれらの各ディレクトリで発行すると、次のエントリがすべて同じinode(最初のフィールド)とハードリンクカウント(3番目のフィールド)を持っていることがわかります。

  • ..実行するときls -ailinner
  • .実行するときls -ailmiddle
  • middle実行するときls -ailouter

現在、/ outer / middle / inner / ..は/ outer / middle /につながりますが、シンボリックリンクからアクセスすると、/ outer / inner / ..は/ outer /につながります。ここには2つの異なる..があるようです。

には1つの..エントリがありinnerます。現在の作業ディレクトリがの場合outer、同じ結果(のディレクトリ一覧middle)が表示されます。

  • ls -al inner/..
  • ls -al middle/inner/..

..シンボリックリンクを介した「アクセス」が異なる動作を提供する唯一の状況は、シンボリックリンクcdinner使用して、論理作業ディレクトリ(pwd -L)が物理作業ディレクトリ(pwd -P)と異なる場合です。この場合、別のものがあるのでcd ..あなたを連れ戻しouter ません..エントリ、シェルが論理的な作業ディレクトリを追跡し、の実際の..エントリを参照するのではなく、1つのレベルをポップアウトますinner

これは、たとえばbash組み込みの一部として提供される利便性ですcdコマンドのです。実際の..エントリに変更するように依頼することで、これをオーバーライドできます

cd -P ..

where -Pcdpwd上記と同様に)物理パスを使用するように指示します。


ああ、混乱はcdチェックするために使うことから来る。だから、私が間違っている場合は、私を修正してください。..常に物理的な親を指します。シンボリックリンクが使用..する場合は、実際の(物理的な)親に向けられます。混乱はcdディレクトリへのingでのみ起こります。
user98456 16

これは、秒の動作も説明しています。どうもありがとうございました。
user98456 16

3
@Theophrastus は、これがルートディレクトリそのものであるls -laiことを示しています/..(別名/. または/)。ファイルシステムが壊れていない限り、他のケースはありません. == ..; fsが..(一時的な)親の正しい場所にマウントされた場合でも(..ファイルシステムテーブル内の単純な静的エントリではなく、そこで何らかの魔法が行われます)。
AnoE 16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.