나는 보통 전체 디렉토리를 한 번에 삭제하기 위해 rm -rf
. 방금 디렉터리가 클수록 시간이 더 오래 걸린다는 사실을 확인했습니다(재귀 계산).
Unix 계열 시스템은 일정한 시간에 실행되는 디렉터리를 삭제하는 대체 방법을 제공합니까? 현재 액세스할 수 없는 콘텐츠를 전혀 건드리지 않고 디렉터리를 "직접" 삭제하는 것이 가능할 것 같습니다.
디렉터리 자체를 삭제하기 위해 디렉터리의 내용을 재귀적으로 탐색하도록 하는 파일 시스템의 일부 특성이 있습니까?
답변1
디렉터리를 삭제할 때 해당 내용을 반복적으로 삭제해야 합니다. 왜 그럴까요?
간단히 말해서 "디렉토리"는 쌍 목록을 포함하는 파일이라고 말할 수 있습니다. "드라이브의 디렉터리 블록을 해제"하면 어떻게 되나요?
일반 파일을 삭제하는 것을 고려해 보겠습니다. 프로그램(예: rm
)은 unlink()
시스템 호출을 호출합니다. 운영 체제(구체적으로는 파일 시스템 드라이버)는 하드 링크( filename
이전 단락의 디렉터리에 있음) 수를 확인합니다. 0이고 파일이 열려 있지 않으면 물리적으로 삭제할 수 있습니다. 이런 식으로 우리는 파일을 삭제하는 방법을 알고 있습니다.
이제 디렉토리 삭제를 다시 살펴보겠습니다. 블록을 해제하기만 하면 그 안에 파일이 추가되지 않으며 unlink
디렉터리에 있는 모든 파일에 대한 하드 링크 카운터가 감소하지 않습니다. 하위 디렉터리, 하위 디렉터리 등에 있는 파일에 대한 결론은 무엇입니까? 정확하게 말하자면, unlink
삭제할 수 없는 파일 시스템에 정크 파일을 가져오고 싶지 않기 때문에 삭제된 디렉터리의 모든 파일에 대해 이 작업을 수행해야 합니다.
따라서 @SYN의 솔루션( rm
백그라운드에서 실행)을 사용할 수 있지만 일정한 시간에 디렉터리를 삭제할 수는 없습니다.
답변2
디렉토리가 자체 파일 시스템에 마운트된 경우 마운트 해제하고 를 사용하여 다시 만든 newfs
다음 다시 마운트할 수 있습니다. 디렉터리 크기에 관계없이 동일한 시간이 소요됩니다.
답변3
Unix 계열 시스템은 일정한 시간에 실행되는 디렉터리를 삭제하는 대체 방법을 제공합니까? 현재 액세스할 수 없는 콘텐츠를 전혀 건드리지 않고 디렉터리를 "직접" 삭제하는 것이 가능할 것 같습니다.
이는 파일 시스템 구현 문제입니다. 요즘 파일 시스템 작업을 하는 대부분의 사람들 rm -rf
은 모두가 최적화하려고 하는 파일 서버 및 데이터베이스 워크로드에서는 성능이 나타나지 않기 때문에 성능 에 대해 크게 걱정하지 않습니다 .
일정한 시간에 하위 트리를 삭제하는 것은 지원되지만 미리 사용해야 btrfs
합니다 .subvolume
답변4
사용:
rm -fr /path/to/directory &
이렇게 하면 명령이 상황에 맞게 조정됩니다.
백그라운드 작업을 나열할 수 있습니다.jobs
작업 ID가 나열됩니다. 이를 사용하여 프로세스에 다시 연결할 수 있습니다.
$ sleep 60 &
[1] 22316
$ jobs
[1]+ Running sleep 60 &
$ fg %1
sleep 60
rm
명령을 시작한 후 Ctrl
+를 탭 Z
하면 명령이 일시 중지되고 bg
백그라운드에서 입력하여 일시 중지를 해제할 수도 있습니다.
이러한 명령을 사용하여 제어할 수 있는 작업 목록은 셸에 바인딩되어 있으며 현재 셸에서만 다시 시작할 수 있습니다.