cd ..ルートフォルダに

cd ..ルートフォルダに

cd ..ルートフォルダに入力しても警告が表示されない、またはエラーで失敗するのはなぜですか?

私は期待:

/$ cd ..
-bash: cd: ..: No such file or directory

代わりに私は一人で残されました/。もちろん、..実際にあるから/だと簡単に言って/みたいです.。なぜこれが起こるのか知りたいです。

答え1

Open Group(POSIX標準担当)によると:

各ディレクトリには、その名前で表示される親ディレクトリが1つしかありません。ピアツーピア最初のディレクトリに。 [...]ファイル名は何ですか?ピアツーピアルートディレクトリに基づいて実装定義を参照します。バージョン7では、これはルートディレクトリ自体を表します。これはPOSIX.1-2008に記載されている動作です。一部のネットワークシステムでは、建物/../CPU名/他のホストのルートディレクトリを参照するために使用されるPOSIX.1は、この動作を許可します。

A.4.13 パス名の解釈

ルートディレクトリのドットポイントエントリは、ルートディレクトリ自体を表すと解釈されます。したがって、ドットポイントは、ルートディレクトリにルートがあるサブツリーの外側のファイルにアクセスするためには使用できません。

chroot - ルートディレクトリの変更

答え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 /..
/

ご覧のとおり、 と...指します/

関連情報