‘.’를 제거하려고했습니다. 예배 규칙서. 부모 디렉토리로 가지 않고도 작업 디렉토리를 삭제할 수 있다고 생각했습니다.
내 질문의 요점은 리눅스 시스템이 파일을 삭제하는 방법에 대한 통찰력을 찾는 것입니다.
답변
현재 디렉토리를 제거해도 파일 시스템 무결성 또는 해당 논리 조직에는 영향을 미치지 않습니다. 매뉴얼 페이지 .
에있는 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
현재 디렉토리를 제거하기 위해 단독 으로 호출 될 수 있습니다 .