-검색의 perm 플래그

-검색의 perm 플래그

나는 이 명령을 이해하려고 노력하고 있습니다.

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

나는 그것이 "홈" 디렉토리의 모든 디렉토리를 조사하고 모든 stderr 메시지를 파일로 리디렉션한다는 것을 알고 있습니다(이를 억제하기 위해). 그러나 특히 중간 부분에 대해 혼란스럽습니다.

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

슬래시는 무엇을 의미합니까? 나는 ! -perm -1000이러한 권한이 없는 디렉터리 찾기가 이러한 권한이 있는 디렉터리 찾기를 의미한다고 가정합니다 -perm -0002. 그러나 저는 644 형식(예를 들어)의 권한만 보는 데 익숙합니다. 왜 숫자가 4개인가요? 또한 로고는 무엇에 사용됩니까 -a?

답변1

에서 -type d \( -perm -0002 -a ! -perm -1000 \)먼저 슬래시는 쉘의 괄호를 벗어나므로 쉘에서 특수 연산자로 해석되는 대신 인수로 전달될 수 있습니다. (분명한 이유로 동일한 예를 원합니다 .) 또는 >로 쓸 수도 있지만 결국 및 만 표시 됩니다 .'('"("find()

괄호는 조건을 그룹화 -a하고그리고접속사. 이는 -type d명시적으로 연결하지 않고 여기에서 사용된 with 및 괄호로 묶인 표현식과 마찬가지로 연속 조건에 대한 암시적 기본값이기도 합니다 -a. 이 표현식은 와 완전히 동일합니다 -type d -perm -0002 ! -perm -1000. 실제로는 괄호만 필요합니다.또는접속사 -o.

-type d분명히 파일을 찾는 것을 의미합니다.-perm -NNNN모두권한 비트를 설정합니다 NNNN. 또는 이 경우 디렉터리에 0002"다른 사람을 위해 쓰기" 권한 집합( )이 있고 고정 비트가 설정되지 않았습니다( 1000)(부정으로 인해). 여기의 조합은 다음과 같이 쓸 수도 있을 것 같습니다 -perm -o+w ! -perm -o+t. 권한 문자열 앞의 대시에 유의하십시오. 대시가 없으면 의미가 다릅니다. 예를 들어 참조하십시오.Linux 찾기 매뉴얼 페이지, "(expr)" 및 "-perm 모드"를 찾습니다.

디렉터리에 대한 쓰기 권한이 있으면 해당 디렉터리 내에서 파일을 생성, 삭제 및 이름을 바꿀 수 있으며 고정 비트를 사용하면 다른 사용자가 소유한 파일이 삭제되거나 이름이 바뀌는 것을 방지할 수 있습니다. 전체 표현식은 누구나 파일을 삭제하거나 이름을 바꿀 수 있는 디렉터리를 찾습니다.

답변2

내부에수동다음을 찾을 수 있습니다:

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 = 1000 대신 perm = 0002

perm = 0002는 다른 사람이 쓸 수 있음을 의미합니다.
perm = 1000은 고정 비트가 설정되었음을 의미합니다.

따라서 이 표현식은 쓰기 가능하고 고정 비트가 설정되지 않은 다른 파일을 검색합니다.

디렉터리 찾기는 -type d d디렉터리를 통해 수행되므로 조회 디렉터리 유형의 개체를 찾습니다.

찾기 매뉴얼에는 -perm여러 가지 형식이 있습니다.

  • -perm 0002이 정확한 권한 설정을 가진 모든 파일과 일치합니다.
  • -perm -0002올바른 비트가 설정된 모든 파일과 일치합니다. 즉 0772, 1752조합에 관계없이 다른 사람이 파일을 쓸 수 있는 경우를 의미합니다.

답변3

  • -a: 논리 AND입니다( -oOR에 사용할 수 있음).
  • \(, \): 대괄호는 셸에서 특별한 의미를 갖기 때문에 슬래시를 사용하여 이스케이프 처리하세요.
  • 네 자리 권한은 sticky bit, setuid, 와 관련이 있습니다.setgid

관련 정보