읽기 액세스 권한이 없는 디렉토리에서 "which"가 명령을 어떻게 찾나요?

읽기 액세스 권한이 없는 디렉토리에서 "which"가 명령을 어떻게 찾나요?

내 작업 컴퓨터에서 which 명령이 읽기 권한이 없는 디렉터리에서 실행 파일을 찾을 수 있는 것으로 나타났습니다.

$ export PATH=/usr/sbin:$PATH

$ ls /usr/sbin
ls: cannot open directory '/usr/sbin': Permission denied

$ which logrotate
/usr/sbin/logrotate

어떻게 작동하나요? 순진하게, 나는 logrotate그것이 변수의 디렉토리에 대해 나열된 파일 중 하나인지 확인함으로써 이를 수행 할 것입니다 $PATH. 그러면 실패할 것입니다.

답변1

/usr/sbin/logrotatewhich 명령은 존재 여부와 사용자에게 실행 권한이 있는지 만 확인하면 되기 때문에 작동합니다 .

chmod -r /usr/sbin읽기 권한( ) 이 부족하면 /usr/sbin디렉터리 목록이 표시되지 않아 탭 완성이나 와일드카드 확장이 방지되지만, 특정 이름이 존재하는지 확인하려면 실행 비트( chmod +x /usr/sbin)만 필요합니다. 이는 알려진 이름의 파일 메타데이터에 대한 액세스를 허용합니다.

반면, 디렉토리에 대한 실행 권한을 비활성화하면 which사용자가 파일에 대한 실행 권한을 가지고 있어도 명령을 찾을 수 없고 실행할 수 없게 됩니다. 우리는 더 이상 그것에 접근할 수 없습니다.

$ sudo chmod -x /usr/sbin/
$ which logrotate # finds nothing
$ logrotate

Command 'logrotate' not found, but can be installed with:

sudo apt install logrotate

바라보다https://unix.stackexchange.com/a/62476/120312더 많은 토론을 해보세요.

관련 정보