-perm -o=x를 모두 찾아보세요! -perm /o=rw 폴더 및 폴더의 모든 상위 경로에는 "기타"에 대한 x 권한이 필요합니까?

-perm -o=x를 모두 찾아보세요! -perm /o=rw 폴더 및 폴더의 모든 상위 경로에는 "기타"에 대한 x 권한이 필요합니까?

이것이 작동할 수도 있다는 것을 알았지 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

관련 정보