/home/user/ 디렉터리의 다음 간단한 파일 구조를 상상해 보세요.
/home/user
|--dir0
|--dir1
|--file1
내 현재 디렉터리는 "dir1"이며 다음을 사용하여 내부적으로 삭제합니다.
rm -r ../dir1
이후에도(터미널에서 오류가 발생하지 않음) 작업 디렉터리는 여전히 동일하며 명령을 사용할 때비밀번호출력은 다음과 같습니다
user@ubuntu:~/dir0/dir1$ pwd
/home/user/dir0/dir1
user@ubuntu:~/dir0/dir1$
작업 디렉터리가 파일 시스템에서 제거된 경우 운영 체제가 작업 디렉터리를 "dir1"로 반환하는 이유는 무엇입니까?
답변1
pwd
내장 bash 쉘을 실행하고 있다고 생각합니다 . 파일 시스템을 검색하지 않고 메모리에 있는 경로만 인쇄합니다.
$ type pwd
pwd is a shell builtin
$ /bin/pwd
/bin/pwd: couldn't find directory entry in '..' with matching i-node
답변2
영화가 삭제된 후에도 영화를 계속 볼 수 있는 이유는 무엇입니까?
파일 설명자는 사라질 수 있지만 inode는 여전히 존재하기 때문입니다! inode가 삭제될 때만 파일은 영원히 사라집니다!
따라서 귀하의 경우 해당 트리의 모든 파일을 cd
닫으면 /
inode가 재활용되고 디렉토리는 영원히 사라집니다.
기억하세요: 이것은 Windows가 아닙니다.전문적인 운영 체제!
;-)
재활용하기 전에 삭제를 취소하지 않는 한.
답변3
운영 체제는 작업 디렉터리를 "dir1"로 반환하지 않지만 쉘은 반환합니다. 쉘은 현재 작업 디렉토리를 추적하고 실행 중인 "pwd" 명령은 쉘에 내장된 명령입니다. 쉘은 "rm" 명령이 디렉토리를 삭제했다는 사실을 모릅니다.
$ type pwd
pwd is a shell builtin
대신 /bin/pwd를 실행해 보세요:
$ /bin/pwd
/bin/pwd: couldn't find directory in .. with matching i-node
답변4
파일(디렉토리)이 열려 있습니다. 이렇게 하면 rm
운영 체제는 실제로 삭제하지 않고 삭제된 것으로 표시합니다. 다른 쉘 인스턴스에서 이 디렉토리에 들어가려고 하면 cd
권한이 거부됩니다. cd
디렉터리를 종료하면 디렉터리가 실제로 삭제됩니다.