이것이 작동할 수도 있다는 것을 알았지 sudo -u <user> test
만 내 시스템에 sudo 명령이 없습니다.
예를 들어
/a d......--x
/a/aa d......--x YES
/b d......---
/b/bb d......--x NO
루트 사용자를 사용할 때 test
명령을 사용하여 "other"의 권한을 확인할 수 없습니다. 내가 찾은 관련 질문:파일에 대한 사용자의 유효 사용 권한 테스트
답변1
수행 방법은 다음과 같습니다.
find ./ ! -perm -o=x -prune -o \( -type d ! -perm /o=rw -perm -o=x -print \)
! -perm -o=x -prune
- "다른" 실행 비트가 없는 디렉토리로 이동하지 마십시오.- 괄호는 실제로 필요하지 않으며 명확성을 위해 추가했습니다. 그것들이 없으면 명령은 동일하게 작동합니다.
-print
끝에 명시적인 내용이 없으면find
정리된 디렉터리도 인쇄됩니다(내림차순이 아닌 디렉터리, 즉 "기타" 실행 비트가 없는 디렉터리).-print
오른쪽(정리 후)에 있는 디렉터리만 인쇄되도록 명시적으로 보장합니다.
이제 이 명령이 가장 확실한 명령이 될 것입니다. 그러나 논리적 축소를 수행하여 더 짧게 만드는 방법이 있습니다.
우선 생각해 보면 두 번째 항목은 필요하지 않습니다 -perm -o=x
. 첫 번째 항목이 ! -perm -o=x
"True"(폴더에 실행 비트가 없음을 의미)로 평가되면 오른쪽에도 도달하지 않습니다 -o
( 논리적으로 첫 번째 조건을 확인한 후 전체 표현식이 "True"로 평가되기 때문입니다. 이는 파일의 다른 섹션에 실행 비트가 있는 경우에만 대괄호 안의 전체 섹션이 평가된다는 것을 의미합니다.
가장 중요한 점은 -perm -o=x
브래킷 내부의 부품이 중복되어 제거 가능하다는 것입니다.
find ./ ! -perm -o=x -prune -o \( -type d ! -perm /o=rw -print \)
-print
이제 제가 말했듯이 마지막이 필요한 이유는 -prune
작업이 "True"를 반환하고 정리된 디렉터리를 인쇄하고 싶지 않기 때문입니다. 그러나 !
앞에 ; 를 추가하면 "True"를 되돌릴 수 있습니다. -prune
폴더는 여전히 잘려지지만 결과는 "False"이므로 인쇄되지 않습니다.
find ./ ! -perm -o=x ! -prune -o \( -type d ! -perm /o=rw -print \)
-print
그러면 마지막 것은 더 이상 필요하지 않습니다 .
find ./ ! -perm -o=x ! -prune -o \( -type d ! -perm /o=rw \)
아까 말했듯이 브래킷을 제거할 수 있습니다. 결과는 다음과 같습니다.
최종 단축 명령:
find ./ ! -perm -o=x ! -prune -o -type d ! -perm /o=rw