find는 프로그래밍 언어이며 아무도 사용하지 않는다
I’m sorry, but I can’t retrieve the content from external links. If you paste the text you’d like translated here, I’ll be happy to translate it into Korean while keeping the source line unchanged.
find 사용의 90%가 이렇게 보입니다
find . -name "*.log"
그것은 Python을 사용해서 print("hello")만 하는 것과 같습니다.
Source:
아무도 사용하지 않는 연산자들
시간 기반 필터링
지난 30분 안에 수정된 파일 찾기:
find /var/log -mmin -30
지난 90일 동안 접근되지 않은 파일:
find /home -atime +90
참조 파일보다 최신인 파일:
find /etc -newer /etc/passwd
“/etc 안에서 마지막 비밀번호 업데이트 이후에 변경된 모든 것을 보여줘.”
사고 대응에 매우 유용합니다—침해 시점을 알면 그 타임스탬프 이후에 수정된 모든 파일을 찾을 수 있습니다.
권한 필터링
모든 SUID 바이너리 찾기 (클래식 보안 감사):
find / -perm -4000 -type f
다른 사용자에게 쓰기 가능한 파일:
find /var -perm -o+w -type f
소유자가 없는 파일(사용자 삭제 후 남은 파일):
find / -nouser -o -nogroup
크기 필터링
100 MB 초과 파일:
find / -size +100M -type f
빈 파일(종료된 프로세스가 남긴 경우가 많음):
find /tmp -empty
조건 결합
find는 AND(암시적), OR(-o), NOT(!)을 지원합니다. 그룹화를 위해 괄호를 사용합니다.
“10 MB 초과이며 일주일 동안 수정되지 않은 로그 파일”:
find /var/log -name "*.log" -size +10M -mtime +7
“전역 쓰기 가능 OR 소유자가 없는 설정 파일”:
find /etc \( -perm -o+w -o -nouser \) -type f
-exec는 언어가 되는 지점
-exec는 각 결과에 대해 명령을 실행합니다. {}는 파일 이름으로 대체되고, \;는 명령을 종료합니다.
오래된 임시 파일 삭제:
find /tmp -mtime +30 -type f -exec rm {} \;
고아 파일 소유권 변경:
find / -nouser -exec chown root {} \;
\; 대신 + 사용
+ 변형은 파일들을 하나의 명령 호출로 배치합니다(xargs와 유사):
find /var/log -name "*.log" -exec gzip {} +
수백 개의 인수를 가진 하나의 gzip 호출이며, 별도의 호출이 수백 개가 아닙니다. 로그 파일이 50 000개인 시스템에서는 차이가 분 vs 초가 됩니다.
-delete는 위험한 옵션입니다
-delete는 각 파일마다 서브프로세스를 포크하지 않기 때문에 -exec rm보다 빠른 내장 동작입니다.
find /tmp -name "*.cache" -mtime +7 -delete
Warning: -delete는 -depth를 암시합니다(디렉터리를 하위부터 처리). 다른 필터와 함께 위치를 잘못 잡으면 의도보다 더 많이 삭제될 수 있습니다. 먼저 -print로 테스트하세요.
실제 사고‑대응 예시
서버가 침해되었습니다. 공격자는 어제 14:00경에 침입한 것으로 파악됩니다. 그 시점 이후에 수정된 모든 파일을 찾아보세요:
touch -t 202604151400 /tmp/marker
find / -newer /tmp/marker -not -path "/proc/*" -not -path "/sys/*" -type f
알려진 침해 시간을 기준으로 레퍼런스 파일을 만들고, 가상 파일시스템을 제외한 최신 파일들을 찾습니다. 이를 통해 공격자가 건드린 모든 파일(백도어, 수정된 설정 파일, 심어놓은 스크립트 등)의 타임라인을 확인할 수 있습니다.
세부 정보를 얻으려면 파이프라인을 사용하세요:
find / -newer /tmp/marker -not -path "/proc/*" -type f -exec ls -la {} +
수정된 모든 파일에 대한 권한, 소유자 및 타임스탬프를 완전하게 표시합니다. 실행 시간은 10초 정도이며, 수동으로 검토하려면 몇 시간이 걸릴 수 있습니다.
Why this isn’t taught well
find는 방대한 매뉴얼 페이지를 가지고 있으며, 연산자들 간의 상호작용은 명확하지 않고, -exec {} \;와 -exec {} +의 차이는 POSIX 사양처럼 읽히는 단락에 숨어 있습니다.
대부분의 사람들은 find . -name "pattern"을 배우고 거기서 멈춥니다. 다음 단계가 위협적으로 느껴지기 때문이죠. “파일 이름으로 찾을 수 있다”와 “하나의 명령으로 전체 파일 시스템을 감사할 수 있다” 사이의 격차는 위에 언급된 연산자들을 연습하는 데 약 두 시간 정도 걸립니다.
Several of the Linux challenges on SudoRank use find as the primary tool—not because it’s the only way, but because it’s usually the fastest.