IT·리눅스/리눅스

find 명령어 실전 활용 - 운영에서 진짜 쓰는 10가지 패턴

jmineekim 2026. 6. 17. 10:00

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로 버리고, 여러 조건은 \(...\)로 묶기.
반응형