"." 디렉토리를 삭제해 보았습니다. 상위 디렉터리로 이동하지 않고도 작업 디렉터리를 삭제할 수 있다고 생각했습니다.
내 질문의 초점은 Linux 시스템에서 파일이 삭제되는 방법에 대한 통찰력을 찾는 것입니다.
답변1
현재 디렉터리를 삭제해도 파일 시스템이나 해당 논리적 구성의 무결성에는 영향을 미치지 않습니다. 삭제 로부터 보호하는 .
것은 POSIX 표준을 준수하는 것입니다.rmdir(2)
매뉴얼 페이지:
path 인수가 참조하는 경로의 마지막 구성 요소가 점 또는 점-점인 경우 rmdir()은 실패합니다.
그 근거는 다음에서 찾을 수 있습니다.rm
매뉴얼 페이지:
실수로 다음 작업을 수행한 결과를 방지하려면 rm 유틸리티에서 dot 및 dot-dot 이름을 삭제하지 못하도록 비활성화하세요.
rm -r .*
반면에 현재 디렉터리를 명시적으로 삭제하는 것(즉, 전체 또는 상대 경로를 선언하여)은 SVR2 이전의 Unix 버전 7에서는 금지되었기 때문에 적어도 SVR3부터 Unix에서는 허용되는 작업입니다. 이는 읽거나 쓰고 있는 파일을 삭제할 때 발생하는 상황과 매우 유사합니다. 삭제된 파일에 액세스하는 프로세스는 아무 일도 일어나지 않은 것처럼 읽기 및 쓰기 작업을 계속합니다. 프로세스의 현재 디렉터리가 삭제되면 해당 디렉터리는 더 이상 해당 경로를 통해 액세스할 수 없지만 프로세스가 종료되거나 자체 디렉터리로 변경될 때까지 해당 inode는 파일 시스템에 남아 있습니다.
cd ..
현재 디렉토리에 더 이상 항목이 없기 때문에 프로세스는 현재 디렉토리에 대한 상대 경로를 사용하여 cwd를 변경할 수 없습니다(예를 들어)...
누군가가 를 입력하면 rmdir .
현재 디렉토리 항목을 삭제하려고 할 수 있지만 디렉토리가 해당 경로를 사용하여 삭제되면 세 개의 디렉토리 항목 .
및 ..
디렉토리 자체가 실제로 삭제됩니다.
이 디렉토리를 삭제하지 않고 디렉토리 항목 만 제거하면 .
호환되지 않는 디렉토리가 생성되지만 앞서 언급한 것처럼 표준에서는 이를 금지합니다.
.
@Emmanuel이 올바르게 지적했듯이 삭제가 허용되지 않는 두 번째 이유가 있습니다. 하나 이상의 POSIX 호환 운영 체제(HFS+가 포함된 Mac OS X)는 엄격한 제한 하에 기존 디렉터리에 대한 하드 링크 생성을 지원합니다. 이 경우 디렉터리 내부에서 어떤 하드 링크가 제거될 것으로 예상되는지 알 수 있는 명확한 방법이 없습니다.
답변2
현재 해당 디렉토리에 있고 이는 .
단지 자체 참조이므로 완전성을 위해 수행됩니다.
상위 항목으로 이동하거나 rmdir
해당 경로를 사용하여 호출해야 합니다. 다음을 수행할 수 있습니다.
rmdir `pwd`
자주 필요한 경우 별칭을 설정할 수 있습니다. 예를 들면 다음과 같습니다.
alias rmc='rmdir `pwd`'
.. rmc
현재 디렉토리를 삭제하기 위해 개별적으로 호출할 수 있습니다.