‘.’을 제거 할 수없는 이유는 무엇입니까? 예배 규칙서? 부모 디렉토리로 가지 않고도

‘.’를 제거하려고했습니다. 예배 규칙서. 부모 디렉토리로 가지 않고도 작업 디렉토리를 삭제할 수 있다고 생각했습니다.

내 질문의 요점은 리눅스 시스템이 파일을 삭제하는 방법에 대한 통찰력을 찾는 것입니다.



답변

현재 디렉토리를 제거해도 파일 시스템 무결성 또는 해당 논리 조직에는 영향을 미치지 않습니다. 매뉴얼 페이지 .에있는 POSIX 표준에 따라 제거를 방지 rmdir(2)합니다.

path 인수가 최종 구성 요소가 dot 또는 dot-dot 인 경로를 참조하면 rmdir ()이 실패합니다.

rm매뉴얼 페이지 에서 한 가지 근거를 찾을 수 있습니다 .

rm 유틸리티는 실수로 다음과 같은 작업을 수행 한 결과를 피하기 위해 이름 점과 점을 제거하는 것이 금지됩니다.

rm -r. *

다른 한편으로, 현재 디렉토리를 명시 적으로 제거하는 것 (즉, 전체 또는 상대 경로를 명시하여)은 적어도 SVR3 이후 SVR2부터 SVR2까지 금지 된 SVR3 이후로 유닉스에서 허용되는 작업입니다. 이것은 활발하게 읽거나 쓰는 파일을 제거 할 때 발생하는 것과 매우 유사합니다. 삭제 파일에 액세스하는 프로세스는 아무 일도없는 것처럼 읽기 및 쓰기 작업을 계속합니다. 프로세스 현재 디렉토리를 제거한 후,이 디렉토리는 경로를 통해 더 이상 액세스 할 수 없지만 프로세스가 종료되거나 자체 디렉토리를 변경할 때까지 파일 시스템에 존재합니다.

현재 디렉토리에 cd ..더 이상 ..항목 이 없기 때문에 프로세스는 현재 디렉토리에 상대적인 경로를 사용하여 cwd (예 :)를 변경할 수 없습니다 .

누군가 유형이 때 rmdir ., 그들은 가능성이 현재 디렉토리 항목이 제거 될 것으로 예상하지만, 디렉토리가 제거 될 때 (그 경로를 사용하여), 세 개의 디렉토리 항목이 실제로 제거 ., ..및 디렉토리 자체를.

.이 디렉토리의 디렉토리 항목 만 제거하면 비준수 디렉토리가 생성되지만 이미 언급 한 바와 같이 표준에서는 금지되어 있습니다.

@ Emmanuel이 올바르게 지적했듯이 제거 .가 허용되지 않는 두 번째 이유 가 있습니다. 강력한 제한으로 기존 디렉토리에 대한 하드 링크 생성을 지원하는 POSIX 호환 OS (HFS +가 포함 된 Mac OS X)가 하나 이상 있습니다. 이 경우 디렉토리 내부에서 어떤 하드 링크가 제거 될 것인지 알 수있는 명확한 방법이 없습니다.


답변

현재 디렉토리 안에 .있고 자체 참조 일 뿐이 므로 무결성을 위해 이와 같이 수행됩니다 .

부모로 가거나 rmdir경로를 사용하여 전화 해야합니다.

rmdir `pwd`

자주 필요한 경우 다음과 같이 별칭을 설정할 수 있습니다.

alias rmc='rmdir `pwd`'

.. rmc현재 디렉토리를 제거하기 위해 단독 으로 호출 될 수 있습니다 .


답변