터미널이 열려 있고 그 터미널을 통해 cd
일부 디렉토리로 이동했습니다. 다른 터미널을 통해 해당 디렉토리를 삭제하고 동일한 백업에서 복원합니다. vim
동일한 디렉토리의 첫 번째 터미널에서 파일을 시도 할 때 오래된 파일 핸들에 대한 오류가 발생하는 이유는 무엇입니까? 무슨 뜻인가요? (참고로을 통해이 문제를 우회 할 수 있음을 발견했습니다 cd $(pwd)
.)
답변:
디렉토리가 삭제되면 해당 디렉토리의 inode (및 해당 내용의 inode)가 재활용됩니다. 쉘이 해당 디렉토리의 inode (및 그 내용의 inode)에 대한 포인터는 이제 더 이상 유효하지 않습니다. 디렉토리가 백업에서 복원 될 때 이전 inode는 (필수적으로) 재사용 되지 않습니다 . 디렉토리와 그 내용은 임의의 inode에 저장됩니다. 동일하게 유지되는 유일한 것은 부모 디렉토리가 복원 된 디렉토리에 대해 동일한 이름을 재사용 한다는 것입니다 (사용자가 지시 했으므로).
이제 원래 쉘이 여전히 가리키는 디렉토리의 내용에 액세스하려고 시도하면 해당 요청을 원래 inode에 대한 요청으로 파일 시스템에 전달합니다.이 요청은 이후 재활용되었습니다 (어떤 용도로 사용될 수도 있습니다. 지금은 완전히 다릅니다). 따라서 stale file handle
존재하지 않는 데이터를 요청했기 때문에 메시지 가 표시됩니다.
작업을 수행 할 때 cd
쉘은 사용자가 지정한 대상의 inode 위치를 재평가합니다. 이제 쉘이 디렉토리에 대한 새 inode (및 해당 내용에 대한 새 inode)를 알고 있으므로 해당 내용에 대한 향후 요청이 유효합니다.
touch
호스트 A 에서 명령 을 사용하면 정상으로 만들 수 있습니다.