나는 이 명령을 이해하려고 노력하고 있습니다.
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입니다(-o
OR에 사용할 수 있음).\(
,\)
: 대괄호는 셸에서 특별한 의미를 갖기 때문에 슬래시를 사용하여 이스케이프 처리하세요.- 네 자리 권한은
sticky bit
,setuid
, 와 관련이 있습니다.setgid