우분투 실전 명령어 | find 파일 검색
리눅스 서버를 운영하다 보면 설정 파일 위치가 기억나지 않거나, 로그 파일이 어디에 쌓였는지 급하게 찾아야 할 때가 자주 있습니다. 이럴 때 find를 정확한 조건과 함께 쓰면 탐색 시간을 크게 줄일 수 있습니다.
언제 쓰는가
- 특정 확장자 파일만 빠르게 찾고 싶을 때
- 최근 변경된 파일이나 오래된 파일을 정리할 때
- 권한이 잘못된 파일을 점검할 때
- 대용량 파일을 찾아 디스크 사용량 문제를 좁혀갈 때
바로 쓰는 명령어
# 1) /etc 아래에서 .conf 파일 찾기
find /etc -type f -name "*.conf"
# 2) 최근 1일 내 수정된 로그 찾기
find /var/log -type f -name "*.log" -mtime -1
# 3) 500MB 이상 파일 찾기
find / -xdev -type f -size +500M 2>/dev/null
# 4) 소유자가 없는 파일 찾기
find / -xdev -nouser -o -nogroup 2>/dev/null
# 5) 권한 777 파일 찾기
find /var/www -type f -perm 0777
# 6) 찾은 파일 일괄 삭제 전에 먼저 확인
find /tmp -type f -name "tmp_*" -print
핵심 옵션/패턴
- -type f, -type d: 파일만 찾을지 디렉터리만 찾을지 먼저 좁히면 속도가 빨라집니다.
- -name, -iname: 대소문자 구분이 필요 없으면 -iname를 사용합니다.
- -mtime n: n일 기준으로 수정 시간을 조건에 넣을 수 있습니다. -mtime -1은 24시간 이내입니다.
- -size +500M: 특정 크기 이상 파일만 추릴 때 유용합니다.
- -xdev: 다른 파일시스템으로 넘어가지 않게 막아, 루트 전체 검색 시 부담을 줄입니다.
- -print0 | xargs -0: 공백이 포함된 파일명도 안전하게 처리할 수 있습니다.
# 공백 파일명 안전 처리 예시
find /data -type f -name "*.csv" -print0 | xargs -0 ls -lh
명령 출력 예시
$ find /var/log -type f -name "*.log" -mtime -1
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/auth.log
$ find /var/www -type f -perm 0777
/var/www/html/uploads/debug.txt
/var/www/html/cache/dev.log
자주 하는 실수
- 루트 전체를 아무 조건 없이 검색해서 서버 I/O를 과도하게 쓰는 경우
- 바로 -delete를 붙여서 검증 없이 파일을 지우는 경우
- -o 연산자를 쓸 때 괄호 없이 작성해 의도와 다른 결과가 나오는 경우
- 권한 오류 메시지를 숨기지 않아 결과 확인이 어려워지는 경우
검증 방법
# 결과 개수 먼저 확인
find /var/log -type f -name "*.log" | wc -l
# 삭제 전 샘플 20개만 눈으로 확인
find /tmp -type f -name "tmp_*" | head -n 20
# -o 사용 시 괄호 포함 여부 비교
find / -xdev \( -nouser -o -nogroup \) 2>/dev/null | head
운영 팁
대상 경로를 먼저 좁히고, 파일 타입과 날짜 조건을 함께 거는 습관이 중요합니다. 운영 서버에서는 항상 탐색 명령을 먼저 실행해 결과를 검토하고, 삭제나 권한 변경 명령은 두 번째 단계로 분리하면 사고를 크게 줄일 수 있습니다.
출처
- GNU Findutils Manual
- Ubuntu Manpages
- Debian Administrator's Handbook