이해할 수 없는 점 rm -rf /
: 커널이 제거된 후 제거가 완료될 때까지 런타임 스택을 유지하고 파일 시스템 및 하드웨어와 통신하는 /bin
방법은 무엇입니까 ? 명령이 시작될 때 필요한 모든 바이너리를 정적으로 연결하고 전체 파일 시스템 디렉터리 트리를 메모리에 로드하고 rm
있습니까 ?rm
답변1
이는 파일 이름과 파일 데이터가 별개이기 때문입니다. 파일을 삭제하면 데이터 자체가 아닌 데이터에 대한 명명된 참조(하드 링크)만 삭제됩니다. 파일 시스템의 모든 참조가 사라지면 커널은 계속해서 데이터를 해제합니다. 하지만 현재 실행 중인 프로세스에 파일이 열려 있지 않은 경우에만 해당됩니다. 그때까지는 파일이 실제로 삭제되는 것이 아니라 파일 이름으로는 더 이상 사용할 수 없을 뿐입니다.
답변2
커널 파일 삭제 여부에 관계없이 커널은 종료, 재부팅 또는 충돌이 발생할 때까지 계속 작동합니다.
실행 중인 프로세스에서도 비슷한 일이 발생합니다. 가장 일반적으로 ELF 실행 파일의 경우 모든 종속성(실행 중인 특정 해당 파일을 볼 수 있음 ldd $(which rm)
)이 파일 시스템에서 가상 메모리 시스템으로 로드됩니다. 적어도 모든 인스턴스가 나타날 때까지 메모리에서 해제되지 않습니다. 프로세스가 로드되었습니다. 완벽한. 이것이 대부분의 실행 파일과 라이브러리가 핫 교체될 수 있는 이유입니다.