スタブパス「/」と「//」の違いは何ですか? [コピー]

スタブパス「/」と「//」の違いは何ですか? [コピー]

Ubuntuでは、次のコマンドはファイルシステムの見かけ上別の場所に移動しますが、これらの場所に同じファイルがあることを確認しました。

cd /
cd //

両方の位置で ls-ing すると、同じ結果が生成されます。

vm@virtual-machine://$ ls
bin    dev   initrd.img      lib64       mnt   root  snap      sys  var
boot   etc   initrd.img.old  lost+found  opt   run   srv       tmp  vmlinuz
cdrom  home  lib             media       proc  sbin  swapfile  usr

一見違うのですが、同じファイルパスの動作に違いはありますか?

注: " cd ///"は有効なファイルパスではありませんが、 " //usr/"と " //bin/"は有効です。注 2: したがって、
すべてのポイントで自分自身を指す cd .. を実行します。// -> cd .. -> /// -> cd .. -> /

答え1

POSIX仕様によると、次から始まるパスは正確に2つのスラッシュ実装によって定義されたセマンティクスがあります。

パス内の複数のスラッシュは単一のスラッシュに縮小されます。とは別に状況によっては正確に2つスラッシュは次の位置にあります。始まりに過ぎないパス。

したがって、、、、等/fooは同じ経路を保証し、、、等は同じ経路を保証する///fooが、////foo///////////////////foo/foo/bar/foo//bar/foo///bar/foo//fooいいえ同じパスが保証され、どちらも同じではありません//foo///foo すべての実装は必要に応じてセマンティクスを定義できます。それらできる選択定義は と と同じ意味を持ちますが、//foo同じではありません。/foo///foo〜しなければならない

これは、オペレーティングシステムが.で始まるパスを使用して、//POSIXファイルシステムの意味とは異なる意味を実装できることです。

たとえば、WindowsとUnixの仮想ミックスを//Windowsファイルシステムセマンティクスに使用できます。 Cygwinは、実際に//Windowsで使用されているものと同様のネットワークパスで動作します\\

たとえば、Cygwinでは、cd //; lsルートディレクトリではなくローカルネットワーク上のすべてのSMBファイルサーバーが一覧表示されます。

関連情報