Linux 서버 운영하다 보면 find 만한 효자 명령어가 없습니다. 사실 저도 처음엔 ls -la | grep으로 다 때우려고 했는데요, 디스크가 가득 차서 새벽에 호출당하고, 30일 지난 로그 정리해야 하고, 권한이 잘못 들어간 파일을 찾아야 할 때 find 한 줄이면 끝나는 걸 보고 정착하게 됐습니다. 오늘은 매뉴얼 한 페이지를 다 외울 필요 없이, 실제로 자주 쓰는 10가지 패턴만 골라서 정리해볼게요.
개념 / 원리
find는 디렉토리 트리를 재귀적으로 훑으면서 조건에 맞는 파일을 찾는 명령어입니다. 기본 문법은 단순합니다.
find [경로] [조건] [동작]
- 경로: 어디서부터 찾을지. 보통
.또는/var/log같은 절대 경로. - 조건: 이름, 크기, 시간, 권한 등 필터.
- 동작: 찾은 파일에 뭘 할지. 기본은
-print.
핵심은 조건을 조합할 수 있다는 점입니다. -and(생략 가능), -or, -not으로 묶으면 SQL WHERE 절처럼 표현할 수 있어요.
실전 예제
1. 이름으로 찾기 (대소문자 구분/무시)
find /var/log -name "*.log"
find /var/log -iname "*.LOG"
-iname은 대소문자를 무시합니다.
2. 크기로 찾기
100MB가 넘는 파일만:
find / -type f -size +100M 2>/dev/null
+100M은 "100MB보다 큰", -100M은 "100MB보다 작은", 100M은 정확히 100MB.
3. 수정 시각으로 찾기
7일 이상 안 건드린 파일:
find /var/log -type f -mtime +7
-mtime: 수정 시각,-atime: 접근 시각,-ctime: inode 변경 시각.+7: 7일 초과,-7: 7일 이내,7: 정확히 7일째.
4. 권한으로 찾기
777 권한 파일 색출(보안 점검 단골):
find /home -type f -perm 0777
find /home -type f -perm -u+s
두 번째는 SUID 비트가 설정된 파일을 찾습니다.
5. 빈 파일/디렉토리 찾기
find /tmp -type f -empty
find /tmp -type d -empty
6. 특정 사용자 소유 파일
find /var -user nobody
find /var -group www-data
7. 찾아서 바로 삭제
30일 지난 로그 자동 정리:
find /var/log/myapp -type f -name "*.log" -mtime +30 -delete
-delete는 강력하니까 반드시 먼저 -print로 확인하고 실행하세요.
8. 찾아서 명령어 실행 (-exec)
찾은 파일들 권한 일괄 변경:
find /data -type f -name "*.sh" -exec chmod +x {} \;
{}는 찾은 파일 경로, \;은 명령어 종료. \; 대신 +를 쓰면 xargs처럼 한 번에 여러 파일을 묶어서 처리해 더 빠릅니다.
find /data -type f -name "*.tmp" -exec rm {} +
9. 깊이 제한
너무 깊이 들어가면 느려지니까:
find /etc -maxdepth 2 -name "*.conf"
find / -mindepth 3 -name "config.yml"
10. 여러 조건 조합
.log이면서 크기가 50MB 넘는 파일:
find /var/log -type f -name "*.log" -size +50M
.log 또는 .gz:
find /var/log -type f \( -name "*.log" -o -name "*.gz" \)
괄호는 쉘 해석을 막으려고 \(, \)로 이스케이프합니다.
자주 하는 실수
1. -name "log" vs -name "*log*"
-name은 글롭 패턴인데 와일드카드를 안 넣으면 정확히 그 이름인 파일만 찾습니다. myapp.log는 안 잡혀요.
2. -exec rm의 무서움
저도 한 번 와일드카드 잘못 적어서 운영 디렉토리 일부를 날린 적이 있습니다. 항상 -delete나 -exec rm 전에 같은 조건으로 -print 먼저 돌려서 목록을 확인하세요.
find /data -name "*.bak" -mtime +90 -print
find /data -name "*.bak" -mtime +90 -delete
3. 권한 없는 디렉토리에서 에러 폭주
루트 /부터 훑으면 권한 없는 디렉토리에서 stderr가 쏟아집니다.
find / -name "core.*" 2>/dev/null
2>/dev/null로 에러는 버리고 결과만 봅니다.
4. -mtime 단위 헷갈림
-mtime은 일(day) 단위, -mmin은 분(minute) 단위. 1분 안에 변경된 파일은 -mmin -1로 찾습니다.
마무리
정리하면 세 줄입니다.
- find는
경로 + 조건 + 동작3박자.-name,-type,-mtime,-size만 익혀도 80%는 커버. -delete나-exec rm은 반드시-print로 먼저 확인하는 습관.- 권한 에러는
2>/dev/null로 버리고, 여러 조건은\(...\)로 묶기.
'IT·리눅스 > 리눅스' 카테고리의 다른 글
| tmux 입문 - SSH 연결이 끊겨도 작업 살리는 법 (0) | 2026.06.19 |
|---|---|
| 프로세스 vs 스레드 - 리눅스의 PID, TID, PPID 한 번에 정리 (0) | 2026.06.18 |
| 디스크 I/O 모니터링 - iostat과 iotop으로 병목 잡기 (0) | 2026.06.16 |
| /proc 파일시스템 탐험 - 리눅스 내부 상태 들여다보기 (0) | 2026.06.12 |
| SSH 키 인증과 ssh-agent - 비밀번호 없이 안전하게 접속하기 (1) | 2026.06.10 |