테스트 내용
아래와 같이 8월부터 9월까지의 ULOG 파일이 쌓여져있다.
ls -al
-rw-rw-r--. 1 tuxedo tuxedo 10992 8월 14 16:53 ULOG.081422
-rw-rw-r--. 1 tuxedo tuxedo 16916 8월 15 23:52 ULOG.081522
-rw-rw-r--. 1 tuxedo tuxedo 25698 8월 16 04:06 ULOG.081622
-rw-rw-r--. 1 tuxedo tuxedo 3246 8월 29 15:15 ULOG.082922
-rw-rw-r--. 1 tuxedo tuxedo 5587 8월 30 23:06 ULOG.083022
-rw-rw-r--. 1 tuxedo tuxedo 66126 8월 31 18:27 ULOG.083122
-rw-rw-r--. 1 tuxedo tuxedo 1141 9월 1 10:07 ULOG.090122
-rw-rw-r--. 1 tuxedo tuxedo 784 9월 15 22:30 ULOG.091522
-rw-rw-r--. 1 tuxedo tuxedo 231 9월 16 00:00 ULOG.091622
-rw-rw-r--. 1 tuxedo tuxedo 4177 9월 20 15:53 ULOG.092022
-rw-rw-r--. 1 tuxedo tuxedo 1476 9월 21 13:10 ULOG.092122
난 모든 ULOG 파일에서 최근 30일 동안 error 라는 메세지가 얼마나 출력되었는지 확인하고 싶었다.
다음은 mtime에 대한 정의다.
mtime (modification time, 수정 시간)
파일의 내용이 수정될 때 mtime 시간이 변한다
find -mtime -2 : 2일(48시간) 이내에 수정된 파일
find -mtime 2 : 3일(72시간) 에서 2일(48시간) 사이에 수정된 파일
find -mtime +2 : 3일(72시간) 보다 과거인 보다 이후에 수정된 파일
본격 테스트
find ./ -mtime -30 |xargs egrep -s "error" ULOG.*
find 명령어를 사용하고 현재 내가 있는 디렉토리에 mtime 옵션으로 30을 주었다. 30은 일수가 아니다. (n = n*24hr.)
그리고 파이프를 사용하여 xargs라는 명령어로 출력된 명령어값들을 파라미터로 받아 다음 명령어인 egrep에 넘겨주고
ULOG파일 내에 error 메세지를 출력하도록 했다.
-s 옵션을 사용한 이유는 존재하지않거나 읽을 수 없는 파일에 대한 오류 메시지를 표시하지 않도록 하는 옵션 이기 때문이다.
xargs 란?
기본적인 명령어 뒤에 파이프로 추가하여 사용
파이프 이전에 명령을 인자로 받아 명령어를 실행하는 구조
mtime으로 30일*24시간을 주었지만
-rw-rw-r--. 1 tuxedo tuxedo 3246 8월 29 15:15 ULOG.082922
-rw-rw-r--. 1 tuxedo tuxedo 5587 8월 30 23:06 ULOG.083022
-rw-rw-r--. 1 tuxedo tuxedo 66126 8월 31 18:27 ULOG.083122
위 해당 ULOG 파일들에는 error 메세지가 없기 때문에 출력되지 않은 것이다.
따라서 30일을 주더라도 해당되는 메세지를 가진 파일들만 출력되도록 했다.
find ./ -mtime -30 |xargs egrep -s "error" ULOG.*
ULOG.081422:124043.tuxedo!tmshutdown.24184.1810002368.-2: FATAL: internal error: CMDTUX_CAT:764: ERROR: can't attach to BB
ULOG.081522:194609.tuxedo!tmboot.6951.2460131776.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.081522:194706.tuxedo!tmboot.7020.3002724800.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.081622:001925.tuxedo!tmboot.24305.1717105088.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.081622:001937.tuxedo!tmboot.24317.840610240.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.081622:002020.tuxedo!tmboot.24398.3811217856.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.081622:002030.tuxedo!tmboot.24408.3820057024.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.090122:095959.tuxedo!tmshutdown.11478.604955072.-2: FATAL: internal error: CMDTUX_CAT:754: ERROR: error processing configuration file
ULOG.090122:095959.tuxedo!tmshutdown.11478.604955072.-2: FATAL: internal error: CMDTUX_CAT:1360: ERROR: configuration file not found
ULOG.092022:155023.tuxedo!tmboot.16859.524120576.-2: FATAL: internal error: CMDTUX_CAT:754: ERROR: error processing configuration file
ULOG.092022:155023.tuxedo!tmboot.16859.524120576.-2: FATAL: internal error: CMDTUX_CAT:1360: ERROR: configuration file not found
ULOG.092122:103405.tuxedo!tmboot.3070.3044831744.-2: FATAL: internal error: CMDTUX_CAT:754: ERROR: error processing configuration file
ULOG.092122:103405.tuxedo!tmboot.3070.3044831744.-2: FATAL: internal error: CMDTUX_CAT:1360: ERROR: configuration file not found
./test_nxa.pc: printf("\nDB connect error! : sqlcode = %d\n", sqlca.sqlcode);
#여기까지 인자로 받아서 넘겨주는 역할을 xargs가 한다.
#위의 ULOG파일 속에 error 메세지가 있다. 그러니 가져가라. 라는 의미로 해석
#아래는 30일치의 error 목록이 출력됐다.
./ULOG.090122:095959.tuxedo!tmshutdown.11478.604955072.-2: FATAL: internal error: CMDTUX_CAT:754: ERROR: error processing configuration file
./ULOG.090122:095959.tuxedo!tmshutdown.11478.604955072.-2: FATAL: internal error: CMDTUX_CAT:1360: ERROR: configuration file not found
./ULOG.092022:155023.tuxedo!tmboot.16859.524120576.-2: FATAL: internal error: CMDTUX_CAT:754: ERROR: error processing configuration file
./ULOG.092022:155023.tuxedo!tmboot.16859.524120576.-2: FATAL: internal error: CMDTUX_CAT:1360: ERROR: configuration file not found
./ULOG.092122:103405.tuxedo!tmboot.3070.3044831744.-2: FATAL: internal error: CMDTUX_CAT:754: ERROR: error processing configuration file
./ULOG.092122:103405.tuxedo!tmboot.3070.3044831744.-2: FATAL: internal error: CMDTUX_CAT:1360: ERROR: configuration file not found
mtime을 사용하지 않은 경우
일수 상관없이 error 메세지가 포함된 모든 ULOG 파일들을 출력한다.
find ./ |xargs egrep -s "error" ULOG.*
ULOG.081422:124043.tuxedo!tmshutdown.24184.1810002368.-2: FATAL: internal error: CMDTUX_CAT:764: ERROR: can't attach to BB
ULOG.081522:194609.tuxedo!tmboot.6951.2460131776.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.081522:194706.tuxedo!tmboot.7020.3002724800.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.081622:001925.tuxedo!tmboot.24305.1717105088.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.081622:001937.tuxedo!tmboot.24317.840610240.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.081622:002020.tuxedo!tmboot.24398.3811217856.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.081622:002030.tuxedo!tmboot.24408.3820057024.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.090122:095959.tuxedo!tmshutdown.11478.604955072.-2: FATAL: internal error: CMDTUX_CAT:754: ERROR: error processing configuration file
ULOG.090122:095959.tuxedo!tmshutdown.11478.604955072.-2: FATAL: internal error: CMDTUX_CAT:1360: ERROR: configuration file not found
ULOG.092022:155023.tuxedo!tmboot.16859.524120576.-2: FATAL: internal error: CMDTUX_CAT:754: ERROR: error processing configuration file
ULOG.092022:155023.tuxedo!tmboot.16859.524120576.-2: FATAL: internal error: CMDTUX_CAT:1360: ERROR: configuration file not found
ULOG.092122:103405.tuxedo!tmboot.3070.3044831744.-2: FATAL: internal error: CMDTUX_CAT:754: ERROR: error processing configuration file
ULOG.092122:103405.tuxedo!tmboot.3070.3044831744.-2: FATAL: internal error: CMDTUX_CAT:1360: ERROR: configuration file not found
./ULOG.081422:124043.tuxedo!tmshutdown.24184.1810002368.-2: FATAL: internal error: CMDTUX_CAT:764: ERROR: can't attach to BB
./ULOG.081522:194609.tuxedo!tmboot.6951.2460131776.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
./ULOG.081522:194706.tuxedo!tmboot.7020.3002724800.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
./ULOG.081622:001925.tuxedo!tmboot.24305.1717105088.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
./ULOG.081622:001937.tuxedo!tmboot.24317.840610240.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
./ULOG.081622:002020.tuxedo!tmboot.24398.3811217856.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
./ULOG.081622:002030.tuxedo!tmboot.24408.3820057024.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
./test_nxa.pc: printf("\nDB connect error! : sqlcode = %d\n", sqlca.sqlcode);
./ULOG.090122:095959.tuxedo!tmshutdown.11478.604955072.-2: FATAL: internal error: CMDTUX_CAT:754: ERROR: error processing configuration file
./ULOG.090122:095959.tuxedo!tmshutdown.11478.604955072.-2: FATAL: internal error: CMDTUX_CAT:1360: ERROR: configuration file not found
./ULOG.092022:155023.tuxedo!tmboot.16859.524120576.-2: FATAL: internal error: CMDTUX_CAT:754: ERROR: error processing configuration file
./ULOG.092022:155023.tuxedo!tmboot.16859.524120576.-2: FATAL: internal error: CMDTUX_CAT:1360: ERROR: configuration file not found
./ULOG.092122:103405.tuxedo!tmboot.3070.3044831744.-2: FATAL: internal error: CMDTUX_CAT:754: ERROR: error processing configuration file
./ULOG.092122:103405.tuxedo!tmboot.3070.3044831744.-2: FATAL: internal error: CMDTUX_CAT:1360: ERROR: configuration file not found
xargs 명령어를 사용하지 않았을 경우
mtime 명령어 여부와 상관없이 error가 포함된 파일목록들이 전부 나오게 되는 것으로 확인됐다.
find ./ -mtime -30 |egrep -s "error" ULOG.*
ULOG.081422:124043.tuxedo!tmshutdown.24184.1810002368.-2: FATAL: internal error: CMDTUX_CAT:764: ERROR: can't attach to BB
ULOG.081522:194609.tuxedo!tmboot.6951.2460131776.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.081522:194706.tuxedo!tmboot.7020.3002724800.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.081622:001925.tuxedo!tmboot.24305.1717105088.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.081622:001937.tuxedo!tmboot.24317.840610240.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.081622:002020.tuxedo!tmboot.24398.3811217856.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.081622:002030.tuxedo!tmboot.24408.3820057024.-2: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPESYSTEM - internal system error)
ULOG.090122:095959.tuxedo!tmshutdown.11478.604955072.-2: FATAL: internal error: CMDTUX_CAT:754: ERROR: error processing configuration file
ULOG.090122:095959.tuxedo!tmshutdown.11478.604955072.-2: FATAL: internal error: CMDTUX_CAT:1360: ERROR: configuration file not found
ULOG.092022:155023.tuxedo!tmboot.16859.524120576.-2: FATAL: internal error: CMDTUX_CAT:754: ERROR: error processing configuration file
ULOG.092022:155023.tuxedo!tmboot.16859.524120576.-2: FATAL: internal error: CMDTUX_CAT:1360: ERROR: configuration file not found
ULOG.092122:103405.tuxedo!tmboot.3070.3044831744.-2: FATAL: internal error: CMDTUX_CAT:754: ERROR: error processing configuration file
ULOG.092122:103405.tuxedo!tmboot.3070.3044831744.-2: FATAL: internal error: CMDTUX_CAT:1360: ERROR: configuration file not found
xargs 옵션 사용없이 원하는 내용만 출력하기
find ./ -type f -mtime -30 -exec egrep -s -i -H "error" {} \;
처음 테스트를 진행하였을 때는 xargs옵션을 사용하여 인자를 받아와서 출력하였기 때문에
중복된 코드가 출력이 됨으로써 가독성이 매우매우 좋지 않았다.
하지만 위 코드는 인자를 출력하지도 않고 간결하게 내가 원하는 내용만 출력할 수 있게 된다.
해석
현재 디렉토리에서 -type f 옵션으로 지정한 파일 유형을 -mtime 옵션으로 30일 기간동안 수정된 것을 출력하고
-exec 옵션 후에 egrep 옵션을 사용하여 찾아진 파일과 연계하여 그 결과들로 추가적인 작업을 진행할 것이고,
-s 에러메세지 없이, -i 대소문자 구분 없이, -H "찾고자하는 이름" 옵션을 추가하고
{} \; 옵션으로 find 명령어에 의해 검색된 파일에 대해 명령을 수행할 수 있게 한다.
참고내용
xargs: 명령어 출력을 다른명령어의 인자값으로 전달
무슨말이냐 하면 사용예로 find / -name *.mp3 | xargs rm
이라고 명령을 사용하면 루트에 있는 모든 *.mp3가 검색될것이다 그 값을 받아서 rm시켜버린다..
어떤 디렉토리 안에 엄청나게 많은 파일이 있을경우 rm 사용시 너무 긴 문자열이라는 에러메시지가 뜨지만 xargs를 이용할경우 에러없이 처리한다.
한마디로 전에 사용한 명령어에서(ex. find) 나온 값을 받아서 다음 사용할 명령어에(ex. rm) 사용할 값을(*.mp3) 전달해준다.
물론 명령어 특성상 단독 사용은 안된다.
출처: https://puham.tistory.com/4 [리눅스 SUPERUSER:티스토리]
'OS > Linux&Unix' 카테고리의 다른 글
Jenkins 설치 (0) | 2022.09.23 |
---|---|
[Linux/Unix] find 파일 찾기 (상세) (0) | 2022.09.22 |
[Linux/Unix] grep / egrep 차이점? (0) | 2022.09.21 |
[Unix/Linux] 리눅스 쉘 hostname에 bash-4.2 가 표시될 때 수정 (0) | 2022.09.21 |
[Unix/Linux] 리눅스 파이프 ( | )와 grep 명령어 (0) | 2022.09.20 |