스텁 경로 "/"와 "//"의 차이점은 무엇입니까? [복사]

스텁 경로 "/"와 "//"의 차이점은 무엇입니까? [복사]

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개슬래시는 다음 위치에 있습니다.시작에 불과하다경로.

따라서 , /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 파일 서버가 나열됩니다!

관련 정보