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