디렉터리에 "실행" 비트가 설정되어 있지 않으면 해당 디렉터리를 프로세스의 작업 디렉터리로 설정할 수 없다는 내용을 읽었습니다.
하지만 왜 이런 일이 발생하는지 이해할 수 없습니다. 프로세스의 작업 디렉터리를 설정할 때 프로세스 메모리의 문자열만 변경하면 된다는 의미입니다. 그렇다면 프로세스의 작업 디렉터리 설정과 디렉터리의 "실행" 비트 사이에는 어떤 관계가 있습니까? !
답변1
UNIX 커널의 관점에서 작업 디렉토리를 변경하려면 chdir()
시스템 호출을 호출해야 합니다.
이 시스템 호출은 커널에서 권한 검사를 수행하여 프로세스에 해당 경로에 대한 실행 권한이 있는지 확인합니다. 이것은 단지 UNIX 정의/사양일 뿐입니다.
권한이 없으면 시스템 호출이 오류를 반환합니다. 그렇다면 프로세스의 현재 작업 디렉터리가 변경됩니다.
상태는 실제로 단순한 문자열이 아닌 디렉터리 inode에 대한 포인터로 표시됩니다. 이것이 바로 프로세스가 차지하는 디렉토리의 이름을 바꿀 수 있는 이유입니다.
참고: 실제로 디렉터리를 읽지 않고도 이 작업을 수행할 수 있습니다. 읽기를 사용하면 디렉터리 목록을 읽을 수 있습니다. 디렉토리 이름을 아는 경우에만 cd
디렉토리로 실행하고 파일을 열 수 있습니다.
답변2
작업 디렉터리를 변경하는 것은 프로세스 메모리에서 문자열을 변경하는 것보다 약간 더 복잡합니다. 실제로 문자열은 커널에 보관되며 시스템 호출에 의해 변경됩니다. 따라서 작업 디렉터리가 변경되면 커널은 액세스 제어 검사를 수행합니다. 또한 x
디렉터리에 비트가 설정되어 있지 않으면 작업 디렉터리가 무엇이든 관계없이 해당 디렉터리 내의 모든 파일에 액세스할 수 없습니다.
"실행" 디렉터리의 개념은 실행 가능한 프로그램의 개념만큼 실제로 존재하지 않으므로 이를 디렉터리의 "실행" 비트라고 부르는 것은 약간 오해의 소지가 있습니다. 하지만 흔히 다른 이름으로 불리기도 하는데,POSIX 사양"실행/검색" 권한이라고 부르는데, "액세스" 권한이라고 본 적도 있습니다. GNU 매뉴얼 페이지에서는 이를 "검색"이라고도 합니다.chdir(2)
오류 정보:
EACCES
경로 구성 요소 중 하나에 대한 검색 권한이 거부되었습니다.
마찬가지로 디렉터리를 "실행"할 수도 없고 일반 파일을 "검색"하거나 "액세스"할 수도 없으므로 과거에 동일한 비트가 재사용되었다는 것은 이해할 수 있습니다.