내 작업 컴퓨터에서 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/logrotate
which 명령은 존재 여부와 사용자에게 실행 권한이 있는지 만 확인하면 되기 때문에 작동합니다 .
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더 많은 토론을 해보세요.