쉘스크립트 기본 참고 사이트 : shell script 기본

1. for 문 활용

1) 특정 디렉토리내의 파일들의 내용을 보기

– iscsi host* 들에 대한 ipaddress 를 모두 보여주는 것이다.

– 아래와 같이 표현해도 된다.

또는

 

 

2) NIC 링크 상태 간략하게 뽑아보기

 

3) rm 문자를 포함하는 TEXT 파일 검출

시스템에 있는 모든 TEXT 파일의 내용을 뒤져서 rm 명령어가 포함되어 있는지를 확인, 포함하고 있는 파일은 화면에 출력한다.

– rpm 파일은 rm 문자를 포함하는 검사에서 제외하고 진행한다.

 

4) 불필요한 LSB(Linux Standard Base) User에 대한 주석처리

프로젝트상 보안 스크립를 돌리면 아래 계정에 대한 보안 취약점이 존재한다고 할때가 있다.

이때 아래와 같은 스크립트를 적용하면 쉽게 해당 계정을 주석처리하여 workaround 할 수 있다.

* 위 코드의 주석 부분을 해제 후 보안 스크립트 내에 삽입하면 보안 스크립트를 돌릴때 바로 적용할 수 있다.

또한 아래와 같은 코드로 수행을 시켜도 적용 가능하다.

 

5) 메모리 사용량 보기

아래 스크립트를 아래처럼 watch와 조합하여 실행하면 실시간 메모리 사용량 체크가 가능하다.

# watch -d -n1 memusage.sh

 

 

2. while 문 활용

1) 특정 디렉토리 내의 파일 및 디렉토리 리스트 보기

– /tmp 디렉토리를 1초 단위로 reflesh 하면서 출력해 준다.

– 아래와 같이 표현해도 된다.

또는 watch를 이용해서 간단하게 실행할 수도 있다.

 

2) 10초간만 /tmp 디렉토리의 파일/디렉토리를 리스트업 하고 끝낸다.

 

3) 어떠한(여기서는 crsctl) 상태를 3초에 한번씩 date를 찍으며 계속 모니터링 하기.

– 아래와 같이 한줄로 표현할 수도 있다.

 

4) TCPBacklogDrop 값을 확인

* 만약 전체 내용을 확인 하고자 하면 맨 뒤의 grep TCPBacklogDrop을 제거한다.

 

5) 모든 프로세스의 RSS 값(메모리 사용량) 합산해서 보기

 

3. AWK, grep, sed, cut 활용

1) AWK를 활용하여 디스크들의 총합을 구하는 것이다.

– SUM+=$3 마치 while 문처럼 동작을 한다. $3 필드값을 모두 더한다.

– 총합이 332GB 이다.

 

2) grep 활용

– 파티션 정보 중 공백을 기준으로 네번째 필드만 출력

– 네번째 필드에서 맨앞 문자가 d 또는 s로 시작하는 값들만 출력

 

– grep과 정규표현식을 이용하여 8자리 단위로 쪼개서 배열에 넣고 출력하기. 

또는

 

3) messages 로그 파일 특정 시간 단위만 출력 하기

– messages 로그들 중 2월 22일, 24일 날짜의 15시 00분 00초 ~ 18시 20분 00초 사이의 로그만 출력

– messages 로그들 중 2월 2일 날짜만 제외하고 15시 00분 00초 ~ 18시 20분 00초 사이의 로그만 출력

 

4) 리눅스 유저 계정 생성일 확인하기

– gnome 이 설치되어 있는데 RunLevel 3로 운영한 시스템의 사용자 계정 생성일을 찾는 스크립트 임.

서버에 따라 이 방법으로 찾을 수 없을 수도 있다. 참고만 할 것.
계정 생성 후 도중에 계정 비번을 변경하는 등.. 세월이 많이 흐른 뒤 서버의 계정들의 최초 생성일을 정확히 알 방법이 딱히 없다. 혹시 아는분은 답글로 남겨주시길..

 

5) grub.conf의 UUID 수정

ASIS : RHEL 6.2 on HP DL380 G8 (G8 기종 EOS)
TOBE : RHEL 6.8 on HP DL380 G9
HP가 Certification을 하지 않기 때문에 G8의 6.2 OS HDD를 DL380 G9으로 옮긴 후 Upgrade를 하지 못하는 상황. 따라서 G9에 RHEL 6.8을 신규 설치 후 마이그레이션 진행함.
RHEL 6.2 -> RHEL 6.8 으로 마이그레이션 과정 중 기존 환경파일 grub.conf를 그대로 복사 후 root=UUID를 sed 변경하는.. RHEL 6.8에서 아래와 같이 수행한다.
LVM을 사용하지 않았을 경우에만 해당된다. 그리고 root 파티션 /dev/sda1 는 환경에 맞게 변경.

 

6) sed 대소문자 치환

 

7) fuser 결과값 파일로 저장

 

8) netstat 로컬 ip address 의 특정 포트 영역 사용 중 확인

12000 ~ 12900 범위의 현재 사용중인 포트 출력

 

9) 특정 라인 주석 제거 및 삽입

  • 주석 제거

-> sed의 -r 옵션을 통해 regular expression을 활성화하여 좀 더 디테일하게 문자를 다룬다.

 

  • 주석 삽입

 

  • 주석 삽입(이중 주석 방지)

하지만 주석이 이미 있는 경우 위와 같이 주석을 삽입하게 되면 주석이 또 삽입된다.

아래와 같이 주석이 없는 라인만을 대상으로 해당 필터된 라인에 대해 주석을 넣는 방식을 사용하면 이중 주석의 문제가 해결된다.

-> 라인의 첫번째 문자가 #으로 시작하지 않는 라인에 대해서만 해당 필터 문구에 대해서 주석을 넣겠다는 의미.

 

  • 각 기호에 대한 설명

 

shell script tip
태그:                                                         

shell script tip”에 대한 2개의 생각

  • 2018년 7월 13일 2:34 오후
    고유주소

    정규표현식 사용 by 상우

    응답
    • 2018년 9월 6일 1:41 오후
      고유주소

      상우 과장 잘 지내죠? ^^

      응답

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다