find
+ grep
명령어 조합 실전 정리find
: 파일/디렉토리 탐색 명령어find [경로] [조건] [동작]
옵션 | 설명 |
---|---|
-type f | 일반 파일만 검색 |
-type d | 디렉토리만 검색 |
-name "*.ext" | 확장자 일치 검색 (대소문자 구분) |
-iname "*.ext" | 대소문자 무시하고 파일명 검색 |
-mtime -n | 최근 n일 이내 수정된 파일 |
-size +100M | 100MB 초과 파일 |
-exec 명령 {} \; | 검색된 파일 각각에 명령 실행 |
-delete | 검색된 파일 삭제 (주의!) |
grep
: 문자열 검색 명령어grep [옵션] "패턴" [파일]
옵션 | 설명 |
---|---|
-i | 대소문자 구분 없이 검색 (ignore case ) |
-r | 하위 디렉토리 포함 검색 |
-n | 줄 번호 함께 출력 |
-v | 해당 문자열 없는 줄 출력 (not ) |
-H | 파일명 출력 |
-l | 일치하는 파일명만 출력 |
--color | 일치 부분 색상 표시 |
-i
(ignore case) 예시로 완벽 이해echo -e "Error\nERROR\nerror" | grep "error"
# → 결과: error
echo -e "Error\nERROR\nerror" | grep -i "error"
# → 결과: Error, ERROR, error (대소문자 무시)
find . -name "readme.txt"
# → 대소문자 구분해서 찾음
find . -iname "readme.txt"
# → README.txt, ReadMe.txt 등도 전부 탐색
find
+ grep
조합 예시.log
파일에서 "error" 검색find . -type f -name "*.log" -exec grep -i "error" {} \;
✔ 모든 .log
파일에서 "error" (대소문자 무시) 포함된 줄 출력
find . -name "*.sh" -exec grep -Ei "curl|wget|eval|base64" {} \;
✔ 쉘 스크립트에서 보안상 민감한 명령어 포함 여부 검사
find . -name "*.py" -exec grep -in "password" {} \;
✔ Python 코드에서 "password" 문자열 있는 줄과 줄 번호 출력
find /etc -name "*.conf" -exec grep -H "listen" {} \;
✔ 설정 파일에서 listen
이 포함된 줄 + 파일명 출력
find /var/log -type f -mtime -1 -exec grep "unauthorized" {} \;
✔ 최근 24시간 내 수정된 파일에서 "unauthorized" 발생 여부 점검
.txt
파일 현재 디렉토리로 복사find . -type f -name "*.txt" -exec cp {} . \;
✔ 하위 경로의 .txt
파일을 현재 디렉토리로 복사
※ 덮어쓰기 주의 → cp -n
사용 권장
xargs
를 활용한 고성능 검색find . -name "*.log" -print0 | xargs -0 grep "fail"
✔ 공백/특수문자 포함 파일명도 안전하게 grep 검색
find . -type f \( -name "*.sh" -o -name "*.py" \) -exec grep -i "token" {} \;
✔ .sh
또는 .py
파일 중에서 "token"
포함된 줄 출력
작업 목적 | 명령어 | |
---|---|---|
로그 에러 확인 | find . -name "*.log" -exec grep -i "error" {} \; | |
민감정보 포함 확인 | find . -name "*.env" -exec grep -i "secret" {} \; | |
스크립트 위험 명령 점검 | `find . -name "*.sh" -exec grep -Ei "curl | eval" {} ;` |
최근 변경 로그 분석 | find /var/log -mtime -1 -exec grep "unauthorized" {} \; | |
대용량 로그 검색 최적화 | `find . -name "*.log" -print0 | xargs -0 grep "fail"` |
여러 확장자 파일 조건 검색 | find . \( -name "*.sh" -o -name "*.py" \) -exec grep -i "token" {} \; |