"." 디렉터리를 삭제할 수 없는 이유는 무엇입니까?

"." 디렉터리를 삭제할 수 없는 이유는 무엇입니까?

"." 디렉토리를 삭제해 보았습니다. 상위 디렉터리로 이동하지 않고도 작업 디렉터리를 삭제할 수 있다고 생각했습니다.

내 질문의 초점은 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현재 디렉토리를 삭제하기 위해 개별적으로 호출할 수 있습니다.

관련 정보