%20%ED%8F%B4%EB%8D%94%EC%97%90%EC%84%9C%20%22man%22%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EB%A9%B4%20%EC%9D%B4%EC%83%81%ED%95%9C%20%EC%98%A4%EB%A5%98%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%95%A9%EB%8B%88%EB%8B%A4..png)
다음을 살펴보겠습니다.
radu@Radu:~$ mkdir test
radu@Radu:~$ cd test
radu@Radu:~/test$ rmdir ~/test
radu@Radu:~/test$ man ls
man: can't change directory to '': No such file or directory
일반적으로 터미널 이전의 마지막 라인 출력이 잘못되었다고 말합니다. 하지만 어떻게 이해할 수 있습니까? 그리고 왜 이런 일이 명령의 경우에만 발생합니까 man
(내가 아는 한, 문제가 pwd
없든 ls
없든)?
추가적으로 다음을 살펴보겠습니다:
radu@Radu:~/test$ man ls
man: can't change directory to '': No such file or directory
radu@Radu:~/test$ echo $?
0
무엇? 성공했습니까(출력 참조 man man |& grep -A 1 '^EXIT STATUS$'
)?
다른 버전의 남자
동일한 것의 다른 버전을 시도할 때 man
작동합니다 .
$ mkdir mantst
$ cd mantst/
$ man ls <--- works
$ rmdir ../mantst/
$ man ls <--- works
$ man --version
man 2.6.3
답변1
man
다른 명령의 차이점 ls
은 후자(존재하지 않는 디렉토리에 대해 불평하지 않는 명령)는 명시적으로 명령을 시도하지 않는다는 것입니다.변화거기 있지만 이미머무르다거기. 인류도 이런 일을 하지만, 거기에서는 명시적으로 변화를 시도하기도 합니다.
unlink(2)
UNIX 디렉토리(파일)를 호출하거나 액세스하면 즉시 삭제되지 않고 rmdir(2)
상위 디렉토리의 디렉토리 항목만 삭제됩니다. 디렉터리/파일은 이를 참조하는 프로세스가 있는 한 그대로 유지됩니다. 마지막 참조가 사라지면 커널은 파일/디렉토리에 속한 블록을 효과적으로 삭제합니다.
따라서 더 이상 존재하지 않는 디렉토리를 호출하면 쉘이 여전히 거기에 있고(해당 디렉토리를 현재 디렉토리로 참조함) 거기에서 이 속성을 상속하기 ls
때문에 오류가 발생하지 않습니다 . ls
하지만 man
명시적으로 거기에 도달하려고 시도했기 때문에 chdir(2)
디렉토리로 이동했습니다.입구더 이상 존재하지 않고 나옵니다.