二重ルートフォルダと単一ルートフォルダ

二重ルートフォルダと単一ルートフォルダ

私の Linux ボックスでは、bash で、2 つのスラッシュで示される「ダブル ルート」フォルダーにアクセスできます。

tomas:~ $ cd /
tomas:/ $ ls
bin/ cdrom@ ...
tomas:/ $ cd //
tomas:// $ ls 
bin/ cdrom@ ...

フォルダとそのサブフォルダの内容は、「通常の」シングル スラッシュ ルートと同じです。サブフォルダにアクセスしても、ダブル スラッシュは消えません。異常は 3 つ以上のスラッシュで繰り返されません。これらはルートの単純な同義語です。

tomas:// $ cd home/tomas
tomas://home/tomas $ cd ///
tomas:/ $ cd ////
tomas:/ $

それはどのような場所ですか? バグですか? 誰かこの異常を説明できますか?

答え1

からバッシュ FAQ E10:

E10) 'cd //' を実行すると $PWD が '//' のままになるのはなぜですか?

POSIX.2の「cd」の説明では、三つ現在の作業ディレクトリを正規化するときに、先頭の 1 つ以上のスラッシュを 1 つのスラッシュに置き換えることができます。

これは、歴史的な互換性のためだと思います。Unix の特定のバージョンや初期のネットワーク ファイル システムでは、//hostname/path という形式のパスを使用して、サーバー 'hostname' 上の 'path' にアクセスしていました。

答え2

「それはバグではなく、機能です!」

まだ同じルート ディレクトリにいます。原因はわかりませんが、絶対パスの文字列の構築に関係しているのではないかと思います。他に確実なことがわかっている方がいたら、教えてください。

答え3

複数のスラッシュは使用したツールによって無視され、常に同じルート フォルダーにアクセスします。

答え4

パス名解決の目的で、複数のスラッシュは 1 つのスラッシュとして扱われます。

シェル プロンプトに表示されるのは、bash PS1 処理の結果です (bash マニュアル ページの「PROMPTING」セクションを参照)。

[root@linux /]# cd /    ; echo $PWD
/
[root@linux /]# cd //   ; echo $PWD
//
[root@linux //]# cd /// ; echo $PWD
/
[root@linux /]# cd //// ; echo $PWD
/

結果は表示上の問題に過ぎず、常に同じルート ディレクトリにいます。これを確認するには、 を参照してください/proc/$$/root

[編集] まあ、私はこれを知りませんでした: http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11 「//」の意味は標準では定義されていませんが、「///」およびそれ以上のスラッシュは「/」と同等です。

関連情報