서버에서 "그 파일 어디 있더라", "이 에러가 어느 로그에 찍혔지"는 매일 나오는 질문입니다. find는 파일 자체를 조건으로 찾고, grep은 파일 안의 내용을 찾습니다. 이 둘만 손에 익으면 추측 없이 곧장 좁혀갈 수 있습니다.
find — 파일을 조건으로 찾기
기본형은 find <경로> <조건>입니다. 이름, 시간, 크기로 거릅니다.
로컬 터미널
find /var/log -name "*.log" # 이름 패턴
find /etc -name "*.conf" -type f # 일반 파일만
find /app -mtime -1 # 최근 1일 내 수정
find /var/log -size +100M # 100MB 초과
-name은 대소문자를 구분합니다. 무시하려면 -iname을 씁니다. 와일드카드(*)는 셸이 먼저 해석하지 않도록 따옴표로 감쌉니다.
grep — 내용 안에서 패턴 찾기
로컬 터미널
grep "ERROR" /var/log/app.log # 한 파일에서
grep -r "timeout" /var/log/ # 디렉터리 재귀 검색
grep -rn "NullPointer" /app/logs # 줄 번호까지(-n)
grep -i "failed" app.log # 대소문자 무시(-i)
로그를 추적할 때 자주 쓰는 조합은 매칭 줄의 앞뒤 맥락을 같이 보는 것입니다.
로컬 터미널
grep -B2 -A5 "Exception" app.log # 앞 2줄, 뒤 5줄
grep -c "ERROR" app.log # 매칭 건수만
자주 쓰는 옵션 정리
| 명령 | 옵션 | 의미 |
|---|---|---|
| find | -name / -iname | 이름(대소문자 구분/무시) |
| find | -mtime -1 | 최근 1일 내 수정 |
| find | -size +100M | 100MB 초과 |
| grep | -r / -n | 재귀 / 줄 번호 |
| grep | -i / -c | 대소문자 무시 / 건수 |
| grep | -B / -A | 앞/뒤 맥락 줄 |
find와 grep 조합
find로 대상 파일을 추린 뒤 그 안에서 grep으로 내용을 찾으면 강력합니다. -exec 또는 xargs로 넘깁니다.
로컬 터미널
# 최근 1일 내 로그에서만 ERROR 찾기
find /var/log -name "*.log" -mtime -1 -exec grep -l "ERROR" {} +
# 파일명에 공백이 있어도 안전하게
find /app -name "*.log" -print0 | xargs -0 grep "timeout"
grep -l은 매칭된 파일 이름만 출력합니다. "어느 파일에 있나"를 먼저 가린 뒤 그 파일을 자세히 보는 흐름이 빠릅니다.
체크리스트
로컬 터미널
find <경로> -name "패턴" # 이름으로 파일 찾기
find <경로> -mtime -1 -size +100M # 시간·크기 조건
grep -rn "패턴" <경로> # 재귀+줄번호로 내용 찾기
grep -B2 -A5 "에러" <파일> # 매칭 앞뒤 맥락
find ... -exec grep -l "패턴" {} + # 둘을 조합
find·grep을 직접 쳐보며 파일·로그를 추적하는 실습은 리눅스 트랙에서 회원가입 없이 무료로 익힐 수 있습니다.