grep 명령어는 주로 실무에서 로그 분석 예로 apache 로그, nginx 로그 , tomcat 로그등을 분석할때 자주 사용하며 특히 침해사고 로그 분석시 필수적으로 익혀야 하는 명령어.
grep 외에 egrep fgrep 등이 있으며 잘 조합하여 사용하면 된다. 이외에도 awk 명령어나 sed 명령어도 자주 사용된다.
grep 명령어 사용 예 옵션
파일에서 문자열 검색
grep “KEYWORD” 파일명
현재 디렉토리 모든 파일에서 문자열 검색
grep “KEYWORD” *
특정 확장자를 가진 모든 파일에서 문자열 검색
grep “KEYWORD” *.log
대소문자 구분하지 않고 문자열 검색
grep -i “KEYWORD” 파일명
매칭되는 PATTERN이 존재하지 않는 라인 선택
grep -v “KEYWORD” 파일명
단어(Word) 단위로 문자열 검색
grep -w “KEYWORD” 파일명
검색된 문자열이 포함된 라인 번호 출력
grep -n “KEYWORD” 파일명
하위 디렉토리를 포함한 모든 파일에서 문자열 검색
grep -r “KEYWORD” *
최대 검색 결과 갯수 제한
grep -m 100 “KEYWORD” FILE
검색 결과 앞에 파일 이름 표시
grep -H “KEYWORD” *
문자열 aa로 시작하여 문자열 bb로 끝나는 패턴 찾기
grep “aa.*bb” *
0-9 사이 숫자만 변경되는 패턴 찾기
grep “KEYWORD[0-9]” *
문자열 패턴 전체를 정규 표현식 메타 문자가 아닌 일반 문자로 검색하기
grep -F “*[]?…” 파일명
정규 표현식 메타 문자를 일반 문자로 검색하기
grep “\*” 파일명
문자열 라인 처음 시작 패턴 검색하기
grep “^KEYWORD” 파일명
문자열 라인 마지막 종료 패턴 검색하기
grep “$KEYWORD” 파일명
grep 정규 표현식(정규식) 예제
대상 파일에서 linux 나 unix 문자열 검색
egrep -i ‘^(linux|unix)’ 파일명
대상 파일에서 keyword11, keyword 35, keyword 77 등과 일치하는것 출력
grep ‘keyword[0-9][0-9]’ 파일명
숫자가 아닌 최소한 하나의 문자와 일치하는 패턴 출력
grep ‘[A-Za-z]’ 파일명
. “w” 또는 “n” 문자가 포함된 모든 행 표시
grep [wn] 파일명
대상 파일에서 linux 나 unix로 시작하는 문자열 검색
egrep -i ‘^(linux|unix)’ filename
“abc” 및 “abcd” 단어와 모두 일치하는 패턴 출력
egrep ‘ab{1,2}l’ 파일명
다음 예제는 최소 3개의 문자 ‘c’가 있는 행 출력
egrep ‘c{3,}’ 파일명
grep 정규표현식 연산자 예시
. | 모든 단일 문자와 일치합니다. | grep ‘.’ file grep ‘foo.’ input |
? | 앞의 항목은 선택 사항이며 최대 한 번만 일치합니다. | grep ‘keyword?’ /etc/passwd |
* | 이전 항목은 0번 이상 일치합니다. | grep ‘keyword*’ /etc/passwd |
+ | 이전 항목은 한 번 이상 일치합니다. | ls /var/log/ | grep -E “^[a-z]+\.log.” |
{N} | 앞의 항목은 정확히 N번 일치합니다. | egrep ‘[0-9]{2} input |
{N,} | 이전 항목이 N번 이상 일치합니다. | egrep ‘[0-9]{2,} input |
{N,M} | 선행 항목은 N번 이상 일치하지만 M번 이하 일치합니다. | egrep ‘[0-9]{2,4} input |
– | 목록에서 처음 또는 마지막이 아닌 경우 또는 목록에서 범위의 끝점이 아닌 경우 범위를 나타냅니다. | grep ‘:/bin/[a-z]*’ /etc/passwd |
^ | 줄의 시작 부분에 있는 빈 문자열과 일치합니다. 또한 목록의 범위에 없는 문자를 나타냅니다. | grep ‘^keyword’ /etc/passwd grep ‘[^0-9]*’ /etc/passwd |
$ | 줄 끝에 있는 빈 문자열과 일치합니다. | grep ‘^$’ /etc/passwd |
\b | 단어의 가장자리에 있는 빈 문자열과 일치합니다. | vivek ‘\bkeyword’ /etc/passwd |
\B | 단어의 가장자리에 있지 않은 경우 빈 문자열과 일치합니다. | grep ‘\B/bin/bash /etc/passwd |
\< | 단어의 시작 부분에 있는 빈 문자열을 찾습니다. | grep ‘\ |
\> | 단어 끝에 있는 빈 문자열을 찾습니다. | grep ‘bash\>’ /etc/passwd grep ‘\’ /etc/passwd |
ngrep 사용법
ngrep 명령어
tcpdump 와같이 네트워크 상의 패킷을 수집하고 분석하는데 사용하는 리눅스 명령어
ngrep 명령어 사용예
ngrep -qd eth0 port 80
ngrep -q -W byline “^(GET|POST) .*”
ngrep -q -W byline “search” host min.story.com and port 80
SSL 즉 https 암호화 통신을 지원 하지 않은 웹사이트는 ngrep을 사용하여 패킷을 보면
민감 정보 노출이나 해킹등에 매우 취약하다.