cd ..
ルートフォルダに入力しても警告が表示されない、またはエラーで失敗するのはなぜですか?
私は期待:
/$ cd ..
-bash: cd: ..: No such file or directory
代わりに私は一人で残されました/
。もちろん、..
実際にあるから/
だと簡単に言って/
みたいです.
。なぜこれが起こるのか知りたいです。
答え1
Open Group(POSIX標準担当)によると:
各ディレクトリには、その名前で表示される親ディレクトリが1つしかありません。ピアツーピア最初のディレクトリに。 [...]ファイル名は何ですか?ピアツーピアルートディレクトリに基づいて実装定義を参照します。バージョン7では、これはルートディレクトリ自体を表します。これはPOSIX.1-2008に記載されている動作です。一部のネットワークシステムでは、建物/../CPU名/他のホストのルートディレクトリを参照するために使用されるPOSIX.1は、この動作を許可します。
ルートディレクトリのドットポイントエントリは、ルートディレクトリ自体を表すと解釈されます。したがって、ドットポイントは、ルートディレクトリにルートがあるサブツリーの外側のファイルにアクセスするためには使用できません。
答え2
/
ディレクトリでさえ、実際にはエラーは発生しません。持つの有効なディレクトリエントリ..
ですが、他のディレクトリとは異なり、ディレクトリ自体を指すので、動作は次のとおりです.
。
$ ls -lid / /. /..
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /.
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /..
$
最初の列からわかるように.
、..
および/
すべてが同じinode番号を持つため、同じファイルシステムエントリです。
cd ..
だからあなたは深い内側にいても、/
あなたはただ内部にとどまります/
。
答え3
これを削除するには、カーネルとCライブラリに特別なケース処理コードを生成する必要があるためです。今、あなたが訪問しているすべてのディレクトリには常に、そしてそれがあると仮定できます.
。..
これで必要な唯一の特別なケースコードは、ファイルシステムのマウントコードです。ここで、コードは..
マウントポイントを含むディレクトリを指すように inode 値をオーバーライドします。なぜなら、ルートディレクトリは常にルートディレクトリではないからです。
答え4
確認し.
てチェックインする..
別の方法は次のとおり/
です。
$ readlink -f ..
/home
$ readlink -f /.
/
$ readlink -f /..
/
ご覧のとおり、 と.
を..
指します/
。