次のコマンドを実行するとします。
$ mkdir -pa / b $ ln -sa / bc $ cd c
次に、ディレクトリcで、ディレクトリals ..
の内容を表示するのに、元のディレクトリに戻るのはなぜですか。cd ..
シェルは、ディスク上のフォルダの実際のレイアウトを反映する物理パスと、シンボリックリンクを考慮した論理パスの2種類のパスを区別します。作業ディレクトリをc
(ではなくa/b
)に変更すると、シェルは現在のディレクトリへの論理パスが~/c
(ホームディレクトリにあると仮定しa
て)であり、物理パスがであると認識します~/a/b
。
例でls
は、の内容を示しています。a
これ..
は、の物理的な親ディレクトリの実際のファイルシステムエントリですc
。一方、作業ディレクトリはシェルの概念でありcd
、シェルの組み込みコマンドです。シェルは、c
は単なる別名ですがa/b
、作業ディレクトリは具体的にはであり、ではc
ないことを認識していa/b
ます。したがって、..
物理的にではなく論理的に解析します。
POSIX標準では、コマンドのオプション-L
と-P
オプションを指定して、cd
どのパスをたどるかを明示的に指定できるようにします。あなたの例では、の代わりにcd c; cd -P ..
あなたを入れるべきです。~/b
~