본문으로 바로가기

검색 관련 명령어

category Linux/Linux 기초 2017. 8. 22. 22:40
  • grep

파일 내에서 특정한 패턴을 검색하여 그 패턴을 포함하는 모든 줄을 화면에 출력하는 명령어. 파일 내에 특정한 패턴을 찾기 위해 많이 사용한다. 찾으려고 하는 패턴을 정규식(g/re/p, Globally/Regular Expression/Print)이라고 표현한다. grep 명령어의 약자에서 볼 수 있듯이 많은 패턴을 제공하고 있다.



[명령어 형식]

# grep OPTION PATTERN file1


[명령어 옵션]

-l    ( list file ) 패턴이 있는 파일이름만을 출력한다.

-n    ( number line ) 줄번호 함께 출력한다.

-v    ( inVerse, except ) 패턴을 포함하는 줄을 제외하고 출력한다.

-i    ( ignore case ) 대소문자를 구별하지 않는다.

-w    ( word ) 단어를 기준으로 찾는다. 

--color   


[패턴]

*        없거나 하나 이상 모든것

.        아무 한글자

^root    root로 시작되는 것

root$    root로 끝나는 것

[abc]    a or b or c 


< 응용 > 

*. 한글자 이상 

^$ 시작하자마 끝 -> 공백


[명령어 활용]

# CMD | grep root

# cat /etc/passwd | grep root

# rpm -qa | grep talk

# ps -ef | grep xinetd

# chkconfig --list | grep ssh

# netstat -an | grep :22 


-실습-

# cat /var/log/messages | grep -i jan        /* 특정 날짜 지정 log 확인 */


    • egrep (Extended grep ) CMD = grep -E

# cat /var/log/messages | egrep -i '(warn|error|alert|emerg)'

로그중에 위험을 알리는 단어들을 골라 출력한다. 

warn error alert emerg 그중 하나라도 맞다면 출력


    • fgrep ( Fixed grep ) CMD

# fgrep '^root' file1

^root 는 원래 root로 시작하는 것을 골라 출력하는 것인대 fgrep을 쓰면 ^root 자체를 찾아준다.

  • find

디렉토리안에서 원하는 파일을 찾고자 할 때 사용하는 명령어이다. find 명령 다음에 시작 디렉토리를 정해 주고 찾고자하는 파일 이름 앞에 옵션을 주면 된다.


[명령어 형식]

# find [검색시작 위치] [옵션1] [인자값1] [옵션2] [인자값2]........


[명령어 옵션]

-name                이름으로 검색

-type                  f : 파일  d : 디렉토리 l : 링크파일 ....

-user / -group      user 이름 group 이름으로 검색

-mtime               특정 기간 이상 수정되지 않는 파일을 기준으로 검색

-perm                퍼미션으로 검색

-exec                 이어지는 명령어 실행


(1) # find / -name core -type [f|d] (# find / -name "*oracle*" -type f)

(형식2) # find / -user user01 -group class1

(형식3) # find / -mtime [-7|7|+7]

(형식4) # find / -perm [-755|755]

(형식5) # find / -size [-300M|300M|+300M]

(형식6) # find / -name core -type f -exec rm {} \;


-mtime -7       현재부터 6일 전에 수정한 파일 검색

-mtime 7        현재에서 7일 전에 수정한 파일 검색

-mtime +7      7일 전에 수정한 파일부터 그 이후에 수정한 파일 검색


-perm -755      최소한 755 이상 퍼미션 모두 검색  ( 0755 / 0766 / 0777 ....) 

-perm 755       퍼미션이 755인것만 검색


-size -300M      용량 0 ~ 299M

-size 300M       용량 300M

-size +300M     용량 301M ~  



(형식6) # find / -name core -type f -exec rm {} \;

|                              A

     +-------------------------+


find 로 찾은 출력을 {}로 보냄 

하나씩 rm 명령어 실행


*** 오래된 로그 기록 삭제

한달(시스템 생성일 ~ 30)이 지난 로그파일은 그 의미를 상실하게 된다. 따라서 일정 시간이 지난 로그파일의 경우 find라는 명령어를 이용하여 파일을 주기적으로 삭제해 주도록 한다.    ( df +du + find CMD )


# find /Log_Dir1 -name "*.log" -type f -mtime +30 -exec rm -f {} \;    /* 30일 이후 수정된 파일 골라 삭제 */

# find /Log_dir2 -name "*.log" -type f -mtime +60 -exec rm -f {} \;    /* 60일 이후 수정된 파일 골라 삭제 */



*** 파일시스템이 갑자기 풀(Full) 나는 경우

어제까지 잘되던것이 오늘 출근사이에 풀이 난 경우 -> 어제 퇴근 후 ~ 오늘 출근 전에 생선된 파일 확인한다. ( -mtime -2 (현재 어제))


# find /var -mtime -2 -size +1G -type f        /* 용량이 큰것을 먼저 찾는다 (1G 이상되는 파일) 없다면 용량을 반으로 줄여 다시 검색한다.*/

# find /var -mtime -2 -size +512M -type f    /* 점점 용량을 낮춰가며 용량을 체우는 파일을 찾는다 */

/var/server/log/file.log


[참고] lsof(list open file) 어떤 프로세서가 이 로그를 생성하는지 확인

          # lsof | grep /var/server/log/file.log 




***에러메세지가 들어 있는 startup script 검색


에러메세지가 발생됬다는 것은 이러한 상황을 예측했을 가능성이 높기때문에 이런 메세지가 어떤 조건에서 실행되게 만들어졌는지 확인한다면 문제를 쉽게 해결할 수 있다.


# /was/bin/startup.sh        /* 에러 발생 */

..... Server Error .....

# find /was -type f -exec grep -l 'Server Error' {} \;  /* 에러 매세지를 가지고 있는 파일 검색 */

/was/conf/server.xml

# vi /was/conf/server.xml        /* 검색된 파일을 열어 에러메세지 검색후 조건 확인 */

/Server Error

......

if 조건 ; then

 

else

echo "Server Error"

fi



***부팅시에 에러메세지 제어


위와 같은 방법으로 해결한다. 


부팅 중간에 .... Server Error .....

 

 

# find /etc/rc?.d/* -type f -exec grep -l 'Server Error' {} \;    /* 부팅시 실행되는 디렉터리에서 에러메세지를 찾는다 */

/etc/rc5.d/init.d/S90network

# vi /etc/rc5.d/init.d/S90netwok        /* 검색된 파일을 열어 에러메세지 검색후 조건 확인 */

/Server Error

......

if 조건 ; then

 

else

    echo "Server Error"

fi



 





'Linux > Linux 기초' 카테고리의 다른 글

쉘(shell)의 특성  (0) 2017.08.23
압축과 아카이브  (0) 2017.08.22
관리자가 알아두면 유용한 명령어  (0) 2017.08.22
사용자 통신할 때 사용하는 명령어  (0) 2017.08.22
파일 속성 관리 명령어  (0) 2017.08.21