안녕하세요, 픽가이드예요.
리눅스에서 설정 파일이 어디 있는지 모르거나, 특정 폴더의 로그만 찾고 싶을 때는 find 명령어를 사용할 수 있어요. 파일 이름뿐 아니라 종류·크기·수정 시간을 조건으로 삼아 하위 디렉터리까지 검색해요.
처음에는 검색 시작 경로 → 파일 종류 → 검색 조건 순서로 생각하면 쉬워요. 이 글의 예시는 조회용이며, Ubuntu·Rocky Linux 등에서 사용하는 GNU find 기준이에요. BusyBox나 macOS의 find는 옵션 지원이 다를 수 있으니 find --version과 man find로 환경을 먼저 확인하세요. GNU 공식 설명
1. 기본 형태부터 읽어 봐요
find 검색시작 경로 검색조건
예를 들어 현재 폴더 아래에서 server.xml이라는 일반 파일을 찾는 명령은 다음과 같아요. 파일 내용에서 단어를 찾는 명령이 아니라, 조건에 맞는 파일 경로를 찾는 명령이에요.
find . -type f -name 'server.xml'
| 부분 | 뜻 |
|---|---|
find |
디렉터리 트리를 검색하는 명령이에요. |
. |
현재 작업 폴더부터 검색해요. 현재 위치는 pwd로 확인해요. |
-type f |
일반 파일만 골라요. |
-name 'server.xml' |
파일 이름이 일치하는 항목을 찾아요. |
현재 폴더가 아닌 곳을 찾으려면 점 대신 경로를 넣으세요. 아래의 /opt는 검색 범위 예시예요. 실제 프로그램이 그곳에 설치돼 있다는 뜻은 아니며, 서버의 실제 설치 위치에 맞춰 바꿔야 해요.
find /opt -type f -name 'server.xml'
2. 확장자·이름 일부로 찾기
find . -type f -name '*.log'
find . -type f -iname '*.log'
find . -type f -name '*backup*'
첫 줄은 이름이 .log로 끝나는 일반 파일을 찾아요. 두 번째의 -iname은 대소문자를 구분하지 않으므로 APP.LOG도 대상이에요. 세 번째는 이름에 backup이 포함된 파일을 찾아요.
별표가 들어간 패턴에는 따옴표를 붙이세요. 따옴표가 없으면 셸이 먼저 현재 폴더의 파일 이름으로 별표를 풀어 버려 검색 조건이 달라지거나 오류가 날 수 있어요. -name은 상위 경로를 뺀 이름을 비교하므로 경로 전체를 조건으로 삼을 때 쓰는 -path와도 달라요. GNU: 이름 패턴 · 전체 경로 패턴
3. 파일과 폴더를 구분하고 깊이를 줄여요
find . -type d -name 'logs'
find . -maxdepth 1 -type f -name '*.log'
-type d는 디렉터리만 찾아요. 이름이 logs인 폴더를 찾는 상황이라면 -type f가 아니라 -type d를 써야 해요. GNU: 파일 종류 조건
-maxdepth 1은 시작 위치와 그 바로 아래 항목까지만 검사해요. 위 명령은 현재 폴더에 있는 일반 로그 파일만 찾고, 하위 폴더 안의 로그는 제외해요. 더 깊게 찾아야 한다면 숫자를 늘리거나 옵션을 빼세요. GNU: 검색 깊이
4. 큰 로그 파일을 용량으로 찾아요
find /var/log -type f -name '*.log' -size +100M
이 명령은 /var/log 아래에서 이름이 .log로 끝나고 논리적 파일 크기가 100MiB를 초과하는 일반 파일을 찾아요. M은 1,048,576바이트 단위예요. 조건을 나란히 쓰면 기본적으로 모두 만족해야 해요.
크기 조건은 파일이 디스크에서 실제 차지하는 공간과 다를 수 있어요. 또한 .log로 끝나지 않는 catalina.out 같은 파일은 위 명령에 잡히지 않아요. 확장자와 무관하게 큰 파일을 보고 싶다면 -name '*.log' 조건을 빼세요. GNU: 크기 조건과 단위
5. 수정 시간으로 찾을 때 +7의 뜻을 주의해요
find . -type f -mtime -7
find . -type f -mtime +7
find . -type f -mmin -60
| 조건 | 해석 |
|---|---|
-mtime -7 |
수정 후 경과 시간이 7×24시간 미만인 파일 |
-mtime 7 |
수정 후 7×24시간 이상, 8×24시간 미만인 파일 |
-mtime +7 |
수정 후 8×24시간 이상 지난 파일 |
-mmin -60 |
수정 후 경과 시간이 60분 미만인 파일 |
-mtime은 경과 시간을 24시간 단위로 계산하고 소수 부분을 버린 뒤 비교해요. 그래서 +7을 단순히 ‘정확히 7일 전보다 오래된 파일’로 해석하면 경계가 어긋나요. 기본적으로 실행 시점 기준이며 달력 날짜의 자정을 기준으로 삼는 것도 아니에요. 생성 시간이 아니라 마지막 데이터 수정 시간이라는 점도 구분하세요. GNU: 시간 조건
6. XML 또는 CONF를 찾으려면 괄호로 묶어요
find . -type f \( -name '*.xml' -o -name '*.conf' \)
-o는 ‘또는’이에요. 위 명령은 일반 파일 중에서 .xml 또는 .conf로 끝나는 항목을 골라요. 괄호 앞의 역슬래시는 셸이 괄호를 자체 문법으로 처리하지 않고 find에 전달하도록 해요. 괄호 없이 조건을 나열하면 연산 우선순위 때문에 -type f가 의도한 전체 조건에 적용되지 않을 수 있어요. Ubuntu의 GNU find 매뉴얼
아무것도 안 나오거나 Permission denied가 뜬다면
- 현재 위치:
pwd로 확인하고 검색 시작 경로가 맞는지 보세요. - 이름 조건: 대문자·소문자, 확장자, 따옴표와
-type이 맞는지 확인하세요. - 검색 깊이:
-maxdepth를 너무 작게 잡지 않았는지 확인하세요. - 권한 오류: 접근하지 못한 경로가 있으므로 결과가 전체 검색 결과라고 단정하면 안 돼요. 오류 경로와 계정의 접근 권한을 확인하세요.
- 느린 검색: 처음부터
/전체를 훑기보다 설치 폴더나 로그 폴더처럼 범위를 좁혀 보세요.
권한 오류를 없애려고 바로 권한을 바꾸거나 모든 명령에 sudo를 붙일 필요는 없어요. 운영 서버에서는 허용된 계정과 범위부터 확인하세요. 2>/dev/null은 오류를 숨길 뿐 접근 권한을 해결하지 않으므로, 처음 점검할 때는 오류를 그대로 보는 편이 원인을 찾기 좋아요.
또한 이름이 출력됐다는 것은 조건에 맞는 항목을 찾았다는 뜻이지, 불필요한 파일이라는 뜻은 아니에요. 로그나 설정 파일은 검색 결과를 확인하는 단계와 삭제·변경하는 단계를 나눠 판단하세요.
처음이라면 이 한 줄부터 기억하세요
find . -type f -name '*.log'
현재 위치에서 시작해 일반 파일을 고르고, 이름 조건을 붙이는 형태예요. 여기에 필요한 경우에만 깊이·크기·시간 조건을 하나씩 더하면 돼요. 결과가 예상과 다를 때는 실행한 명령 전체, pwd 결과, 오류 문구, find --version 정보를 함께 남기면 확인하기 쉬워요.