리눅스 시스템 관리 명령어3
파이프라인
|
문자를 이용하여 명령의 결과를 뒤의 명령어에 넘길 수 있게 하는 것.
다중 조건 grep ( less 명령어는 스크롤할 수 있도록 출력하는 것을 의미)
grep "/api" api.log | grep "/data" | less
압축되어 있는 로그파일 읽기
zcat : .gz
와 .tgz
를 처리한다.
zcat api.log.gz | grep "/api" | less
xzcat : .xz
처리
xzcat api.log.xz | grep "/api" | less
내용이 추가될 때마다 그 부분을 실시간으로 출력하기
tail 명령어에 -F
옵션을 붙여 활용
tail -F api.log | grep "/api" | grep "/reservation" | less
자동화 스크립트(셸 스크립트)
셸 스크립트 : 명령어를 세로로 연결하여 작성자가 의도한 대로 한줄씩 실행하는 것.
셸 스크립트 생성하기
vim setup.sh
가장 첫줄에 셔뱅(shebang : 스크립트를 실행하는 프로그램)을 지정한다. 예로 perl용 셔뱅은 #!/usr/bin/perl
bash가 처리해야하는 것이라면 #!/bin/bash
#!/bin/bash
echo "create test folder "
mkdir test
cd test
:wq
로 저장 후 나가기.
권한 주기
chmod +x setup.sh
파일 실행시키기
./setup.sh
프로그램을 실행시키듯이 파일명을 입력하여 실행할 수 없다. 파일명을 쳐서 실행이 가능하게 되는 파일은 /bin/이나 /usr/bin/ 같은 특별한 장소에 있을 때 뿐이다.
이전 명령어가 이상이 생겼을 때 실행 중지하기
if [ $? != 0 ]; then exit; fi
셸 스크립트를 실행할 때는 명령어 입력에 사용하는 셸과는 별도로 프로세스가 생겨 그안에 스크립트가 실행되기 때문에 exit명령어를 호출하는 것이다.
변수 선언
변수명=값
log=/var/log/apache/access.log
사용시에는 ${변수명}
또는 $변수명
으로 쓴다.
변수에는 옵션또한 사용할 수 있다.
tar_compress="tar cfv"
eval "$tar_compress directory"
eval 명령어에 문자열 형식으로 넘기면 명령어열로 실행 가능하다.
환경 변수
환경 변수를 잘 이용한다면 여러 컴퓨터에서도 유연성있게 동작한다. 예로 환경 변수 중에는 ${HOME}이라는 환경 변수가 정의되어 있는데
mkdir ${HOME}/test
위와 같은 셸 스크립트를 각각 다른 컴퓨터와 사용자도 동일하게 작동한다.
mo
유저로 접속하여 실행하면 /home/mo/test
jong
유저로 접속하여 실행하면 /home/jong/test
로그 파일에서 필요한 줄만 뽑기
필요없는 줄을 제외시키기
/live라는 문자열을 포함하지 않는 줄만 출력
cat /var/log/apache2/access.log | grep -v "/live"
줄 안에 필요한 부분만 추출하기(cut)
cat /var/log/apache2/access.log | grep -v "/live" | cut -d " " -f 7
-d
옵션은 구분자, -f
옵션은 구분자로 나누었을 때 필요한 문자열 부분
정렬과 유니크
cat /var/log/apache2/access.log | grep -v "/live" | cut -d " " -f 7 | sort | uniq -c | less
유니크 명령어는 위 아래의 줄들을 비교해서 체크하기 때문에 정렬을 먼저 시킨 후 한다.
uniq 명령어에서 -c
,--count
를 통해서 uniq실행 결과에 각각 내용이 몇 번 등장했는지를 출력해준다.
각 내용이 몇 번 있는지 숫자를 출력했다면 이를 다시 sort 시킨다.
cat /var/log/apache2/access.log | grep -v "/live" | cut -d " " -f 7 | sort | uniq -c | sort -r | less
마치며
- 리눅스의 파이프라인은 정말 편하다!!!
- 셸 스크립트를 잘 작성해야한다.
- 로그를 분석하는 방법을 배워봤다.