찾기의 -perm 플래그

Sep 05 2020

이 명령을 내 머리로 감싸려고합니다.

find /home/ -type d \( -perm -0002 -a ! -perm -1000 \) 2>/dev/null

나는 그것이 모든 디렉토리에 대한 'home'디렉토리를 찾고 모든 stderr 메시지를 파일로 리디렉션 할 것이라는 것을 이해하지만 (그들을 억제하기 위해), 특히 중간 부분에 혼란스러워합니다.

\( -perm -0002 -a ! -perm -1000 \)

슬래시는 무엇을 의미합니까? 나는 ! -perm -1000그러한 권한이없는 디렉토리를 찾는 것을 의미하고 그러한 권한이있는 디렉토리를 찾는 것을 의미 한다고 가정 -perm -0002하고 있지만, 나는 644 형식 (예를 들어)의 권한을 보는 데만 익숙하다. 왜 4 자리 숫자입니까? 또한 -a깃발은 무엇을합니까?

답변

4 netmonk Sep 05 2020 at 17:45

에서 설명서를 찾을 수 있습니다 :

Operators
              Operators join together the other items within the expression.
              They include for example -o (meaning logical OR) and -a
              (meaning logical AND).  Where an operator is missing, -a is
              assumed.

그래서 말 그대로 \( -perm -0002 -a ! -perm -1000 \)의미 : perm = 0002이고 perm = 1000이 아닙니다.

perm = 0002는 다른 사용자에 대해 쓰기 가능함을 의미합니다.
perm = 1000은 고정 비트가 설정되었음을 의미합니다.

따라서이 표현식은 기타에 대해 쓰기 가능하고 고정 비트 세트가없는 파일을 검색합니다.

디렉토리 찾기는 디렉토리를 -type d d의미하므로 디렉토리 유형의 객체를 찾으십시오.

찾기 매뉴얼에서 -perm몇 가지 형식이 있습니다.

  • -perm 0002 이 정확한 권한 설정을 가진 모든 파일과 일치합니다.
  • -perm -0002이 오른쪽 비트가 설정된 모든 파일과 일치합니다 (즉 0772, 1752파일이 다른 사용자가 쓸 수있는 경우 모든 조합 을 의미 합니다).
5 ilkkachu Sep 05 2020 at 22:23

에서는 -type d \( -perm -0002 -a ! -perm -1000 \)그들이 대신 쉘에 의해 특수 연산자로 해석되는, 인수로 전달 될 수 있도록, 첫째, 슬래시는 쉘의 괄호를 탈출. (예를 들어 >, 명백한 이유로 동일한 것이 필요합니다 .) '('또는 으로 쓸 수도 "("있지만 결국 find에는 ().

괄호 그룹 조건 및 -a 결합한다. 그것은 또한 여기에 사용 된 것과 -type d괄호 안의 표현식과 같이 연속적인 조건에 대한 암시 적 기본값이며 , -a그것들을 명시 적으로 연결 하지 않습니다 . 표현식은 -type d -perm -0002 ! -perm -1000. 괄호는 실제로 또는 접속사 에서만 필요합니다 -o.

-type d분명하고 있는 파일을 찾기 위해 수단 모든 권한 비트의 세트. 또는이 경우 다른 사용자를위한 쓰기 권한 ( )이 설정되고 고정 비트 ( )가 설정되지 않은 디렉터리 (부정으로 인해)입니다. 여기의 조합도 . 권한 문자열 앞의 대시가 없으면 의미가 다릅니다. 예를 들어 find 에 대한 Linux man 페이지를 참조하고 "(expr)"및 "-perm mode" 를 찾으십시오 .-perm -NNNNNNNN00021000-perm -o+w ! -perm -o+t

디렉토리에 대한 쓰기 액세스를 통해 그 안에있는 파일을 만들고 제거하고 이름을 바꿀 수 있으며 고정 비트는 다른 사용자가 소유 한 파일을 제거하고 이름을 바꾸는 것을 방지합니다. 전체 표현식은 누구나 파일을 제거하거나 이름을 바꿀 수있는 디렉토리를 찾습니다.

2 binarysta Sep 05 2020 at 17:47
  • -a: 논리 AND ( -oOR에 사용할 수 있음)
  • \(, \): 괄호는 쉘에서 특별한 의미를 갖기 때문에이를 이스케이프하는 데 사용되는 슬래시
  • 네 자리 권한 관련된 sticky bit, setuid,setgid