Linux 자동화 운영 의 Shell 스 크 립 트 (로그 인)

기본 정규 표현 식 (일부 특수 기 호 를 사용 하여 표현) ^ 시작 $끝 [] 집합 중 임의의 단일 기호 [^] 집합 에 반대 합 니 다. 임의의 단일 기호
  • 앞의 문자 와 일치 하면 임의의 번 (0 번 또는 여러 번) 이 나타 납 니 다. * 일치 하기 때문에 {n, m} 앞의 문자 와 일치 하면 n ~ m 번 {n 이 나타 납 니 다.} 앞의 문자 와 일치 하면 n 번 또는 n 번 이상 {n} 이 나타 납 니 다.
    확장 정규 (기본 최적화, 새 것 추가) {n, m} {n,} {n} 을 + 로 뜯 었 습 니까?
  • 한 번 또는 여러 번 일치 합 니까?일치 0 또는 1 회 () 전체 | 또는\b 일치 단어 경계\B 일치 비 단어 경계\\< 일치 지정 단어 시작\> 일치 지정 단어 끝 [root@room1pc32정규 표현 식]\# grep "test"test. txt  this is a test file testisgood goodtest haha [root@room1pc32정규 표현 식]\# grep "\btest\b"test. txt  this is a test file [root@room1pc32정규 표현 식]\# grep "\btest"test. txt  this is a test file testisgood [root@room1pc32정규 표현 식]\# grep "test\b"test. txt  this is a test file goodtest haha

  • 기본 정규: 호환성 이 강하 고 쓰기 번 거 로 움 확장 정규: 호환성 이 떨 어 집 니 다. 간단 한 egrep 를 쓰 면 확장 정규 표현 식 grep - E 를 사용 할 수 있 습 니 다. 확장 정규 표현 식 extended register 확장 레지스터 grep [a] {1, 4} 은 grep - E [a] {1, 4} 과 같 습 니 다.- c 일치 하 는 줄 수 를 되 돌려 줍 니 다. - o 한 줄 에 지정 한 패턴 과 일치 하 는 부분 grep - ec 조건 을 표시 합 니 다.\# 일치 하 는 줄 수 grep - eo 조건 을 표시 합 니 다. | wc - l\# 일치 하 는 실제 수 를 표시 합 니 다.
    sed 비 대화 형 텍스트 컴 파일 러 (스 트림 프로세서) sed [옵션] '조건 명령' 파일 옵션: - n 차폐 sed 기본 출력 - r 확장 정규 - i 원본 파일 조건 수정: 1. 줄 번호
        [root@A ~]# sed -n '1p' /etc/passwd     #     
        root:x:0:0:root:/root:/bin/bash 
        [root@A ~]# sed -n '1,3p' /etc/passwd   #   1,2,3  
        root:x:0:0:root:/root:/bin/bash
        bin:x:1:1:bin:/bin:/sbin/nologin
        daemon:x:2:2:daemon:/sbin:/sbin/nologin

    2. 정규 표현 식
    [root@A ~]# sed -nr '/^test:/p' /etc/passwd  #/../       p    
    test:x:3468:3468::/home/test:/bin/bash

    명령: (첨삭 검사) p 인쇄 d 삭제 s 교체 s/구/신/s\# 새\# 구\# # 가 변 주의사항: 교체 기 호 는 임의의 다른 기호 a append 추가 후 한 줄 i insert 삽입 전에 한 줄 c 대체 줄 change r 가 져 오기 w 다른 이름 으로 저장 할 수 있 습 니 다.  H/h 복사 G/g 붙 여 넣 기
    () 보류, 복사\붙 여 넣 기 예:
    [root@A ~]# sed 'd' /etc/passwd
    [root@A ~]# sed '/bash$/d' /etc/passwd  #      
    
    [root@A ~]# sed  's/2012/666/' a.txt    #          
    666 2011 2012
    2018 666
    2013
    666 2012 2012
    [root@A ~]# sed  's/2012/666/g' a.txt   #    
    666 2011 666
    2018 666
    2013
    666 666 666
    [root@A ~]# sed  's/2012/666/2' a.txt   #     
    2012 2011 666
    2018 2012
    2013
    2012 666 2012
    [root@A ~]# cat 1.txt 
    98969 9899 9869 98969
    [root@A ~]# sed 's9\98\9\99\96\99' 1.txt
    98969 969 9869 98969
    
    [root@A ~]# vim test.txt
    [root@A ~]# cat test.txt
    ni hao nb
    welcome to beijing
    1.               
    [root@A ~]# sed -r 's/^(.)(.*)(.)$/\3\2\1/' test.txt
    bi hao nn
    gelcome to beijinw
    2.                
    ^(.)(.)(.*)(.)(.)$  \1\4\3\2\5
    
    [root@A ~]# sed 'a666 1' test.txt 
    12
    666 1
    [root@A ~]# sed 'i666 1' test.txt 
    666 1
    12
    [root@A ~]# sed 'c666 1' test.txt 
    666 1
    
    [root@A ~]# sed 'r /etc/hosts' a.txt 
        a.txt       /etc/hosts    
    [root@A ~]# sed '2r /etc/hosts' a.txt 
        a.txt       /etc/hosts    
    [root@A ~]# sed  -i 'w /b.txt' a.txt        #     
    [root@A ~]# sed  -i '3w /c.txt' a.txt   #       
    [root@A ~]# cat /b.txt 
    2012 2011 2012
    2018 2012
    2013
    2012 2012 2012
    [root@A ~]# cat /c.txt
    2013
    [root@A ~]# sed '2H;3G' a.txt 
    2012 2011 2012
    2018 2012
    2013                #G       
    
    2018 2012
    2012 2012 2012

    연습: 1)/etc/paswd/로그 인 할 수 있 는 사용 자 를 찾 습 니 다\#!/bin/bash sed -n '/bash$/p'/etc/passwd > tmp.txt for i in  cat tmp.txt do echo ${i%%:*} done
    #!/bin/bash
    sed -n '/bash$/s/:.*//p' /etc/passwd

    2)/etc/shadow 의 암 호 를 표시 합 니 다.
    #!/bin/bash
    A=`sed -n '/bash$/s/:.*//p' /etc/passwd` &> /dev/null
    for i in $A 
    do
        p1=`grep "$i" /etc/shadow`
        p2=${p1#*:}
        p3=${p2%%:*}
        echo "$i:$p3"
    done

    awk 데이터 필터, 통계 (줄, 열) 한 줄 한 줄 프로세서 awk [옵션] '조건 {명령}' 파일 명령 | awk [옵션] '조건 {명령}'
    [root@A ~]# free | awk '/Mem/{print $4}'    #    
    [root@A ~]# ifconfig eth0 | awk '/RX p/{print $5}' #      
    [root@A ~]# tailf /var/log/secure   #            

    옵션: - F 구분자 지정\# 기본 구분자 공백 과 (TAB) [root@A ~]# awk -F: '{print $1}'/etc/passwd
    awk 내장 변수 $1 $2 $3.\# 어떤 NF\# 현재 줄 에 NR 열 이 몇 개 있 습 니까?\# 현재 줄 번호
    [root@A ~]# awk -F: '{print NR}' /etc/passwd
    [root@A ~]# awk -F: '{print NF}' /etc/passwd
    [root@A ~]# awk -F: '{print $NF}' /etc/passwd   #      
    [root@A ~]# awk '{print "nh","nb","nm"}' /etc/passwd  #    (      )
    [root@A ~]# awk -F: '{print "    :",$1}'  /etc/passwd
        : root
        : bin
    ...

    awk [옵션] 'BEGIN {} 조건 {} END {}' 파일 원칙: 모든 명령 은 {} BEGIN {} 에 두 어야 합 니 다. 명령 은 파일 내용 을 읽 기 전에 1 회 조건 을 실행 합 니 다 {}: 명령 은 파일 을 읽 은 후에 n 회 END {} 을 실행 합 니 다. 명령 은 파일 을 읽 은 후에 1 회 실행 합 니 다.
    [root@A ~]# awk 'BEGIN{print "nihao"}' a.txt
    nihao
    [root@A ~]# awk '{print "nihao"}' a.txt 
    nihao
    nihao
    nihao
    nihao
    [root@A ~]# awk 'END{print "nihao"}' a.txt 
    nihao

    awk 조건: 1. 정규 (모호)
           root  
    [root@A ~]# grep 'root' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    #      root  (    )
    [root@A ~]# awk -F: '/root/{print $3}' /etc/passwd
    0
    11
    [root@A ~]# awk -F: '/^root/{print $3}' /etc/passwd
    0
    #       root  (    ) $1     
    [root@A ~]# awk -F: '$1~/root/{print $3}' /etc/passwd
    0
    #$6     
    [root@A ~]# awk -F: '$6~/root/{print $3}' /etc/passwd
    0
    11

    2. 숫자 와 문자 비교 = =! = > = < =\#UID 1000 이상 의 사용자 이름 인쇄 (일반 사용자 시스템 사용자 의 UID 인쇄 (1 - 1000) 이내) [root@A~]\# awk - F: '$3 > 1000 {print $1}'/etc/passwd\# 사용자 이름 이 루트 인 정 보 를 인쇄 합 니 다.  [root@A ~]# awk -F: '$1=="root"'/etc/passwd root:x:0:0:root:/root:/bin/bash
    3. 논리 & |
    #UID  10     20     
        [root@A ~]# awk -F: '$3>10&&$3<20' /etc/passwd
        operator:x:11:0:operator:/root:/sbin/nologin
        games:x:12:100:games:/usr/games:/sbin/nologin
        ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

    4. 연산
    [root@A ~]# awk 'BEGIN{x=3;y=4;print x+y}'
    7
    [root@A ~]# awk 'BEGIN{x=3;y=4;print x*y}'
    12
    [root@A ~]# awk 'BEGIN{print 3.5*2.2}'
    7.7
    [root@A ~]# awk 'BEGIN{x=3;print x*y}'  #y       0
    0
      100  7       7  
    [root@A ~]# seq 100 | awk '$1%7==0||$1~/7/'

    if 명령 if () {} if () {} else {} if () {} else if () {}...
             ,       
    [root@B ~]# awk -F: '{if($3<1000){x++}else{y++}}END{print "    :",x,"\t    :",y}' /etc/passwd412
    [root@B ~]# awk -F: '$3>=1000' /etc/passwd
    nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
    usetr:x:1000:1000:usetr:/home/usetr:/bin/bash

    while 명령 while () {}
    [root@B ~]# cat a.txt 
    root hehe root
    xixi root
    ni hao ma root
    [root@B ~]# awk '{i=1;while(i<=NF){if($i=="root"){x++};i++}}END{print x}' a.txt
    4

    실험: awk 통계 http 서비스 접근 횟수 가상 컴퓨터 (http 서버)
    [root@A ~]# systemctl restart  httpd.service 
    [root@A ~]# ll -h /var/log/httpd/access_log 
    -rw-r--r--. 1 root root 2.7K 11  28 03:11 /var/log/httpd/access_log
    [root@A ~]# firewall-cmd --set-default-zone=trusted 
    success
    [root@A ~]# setenforce 0

    사용자 방문 1000 회 실제 기기 모방 (클 라 이언 트)
    [root@room1pc32   ]# yum -y install httpd-tools
    [root@room1pc32   ]# ab -c 100 -n 1000 http://172.25.0.100/

    http 사용자 액세스 로그 가상 컴퓨터 보기 (http 서버)
    [root@A ~]# ll -h /var/log/httpd/access_log 
    -rw-r--r--. 1 root root 95K 12   3 20:14 /var/log/httpd/access_log

    사용자 가 10000 번 실제 컴퓨터 에 접근 하 는 것 을 모방 합 니 다 (클 라 이언 트)
    [root@room1pc32   ]# ab -c 100 -n 10000 http://172.25.0.100/

    http 사용자 액세스 로그 가상 컴퓨터 보기 (http 서버)
    [root@A ~]# ll -h /var/log/httpd/access_log 
    -rw-r--r--. 1 root root 1013K 12   3 20:16 /var/log/httpd/access_log

    통계 httpdaccess 모든 사람의 통계 횟수
    [root@A ~]# awk '{ip[$1]++} END{for (i in ip){print i, ip[i] }}' /var/log/httpd/access_log
    ::1 20
    172.25.0.250 11000

    연습 스 크 립 트 1. nginx 소스 패키지 원 키 배치, 번 거 로 움]\#!/bin/bash\# 이것 은 제 가 쓴 yum 판단 bash/root/yum. sh echo - n '이 nginx 를 풀 고 있 습 니 다.' tar - xf nginx - 1.8.0. tar. gz & >/dev/null  "\\\[32; 1m [OK]\\\\\\[0m"echo - n "이 의존 패 키 지 를 설치 하고 있 습 니 다................................................./configure & >/dev/////null echo - e"\\\\[32; 1m [OK]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\""""make - n 'make 컴 파일............ make &///$$$$$$$$$$$$$$$$$$$$$echo - e "\\\e [32; 1m [OK]\\e [0m"echo - n 'make install install...' make install & >/dev/null echo - e "\\e [32; 1m [OK]\\e [0m"
    a=`ls /usr/local/nginx/ | wc -l`
    if [ $a -eq 0 ];then
        echo -n '    '
        echo -e "\e[31;1m[Failed]\e[0m"
    else    
        echo -n '    '
        echo -e "\e[32;1m[OK]\e[0m"
    fi

    서 비 스 를 시작 하 는 스 크 립 트\#!/bin/bash cash cash $1 in start)/usr/local/nginx/sbin/nginx;; stop)/usr/local/nginx/nginx/sbinx/nginx - sbinx - stop;;;/usr/local/nginx/ngx/sbinx/nginx/sbinx - sbinx/ngx - stop;; reststatstatstat - ntulp | grep nginx & >/dev/null if/////null if 0 $? - eq0]; thetheecho - e "활성: active\033 [32m (running)\033\033 [[033]\033 m ([[[운영 운영"else echo - e"Active: inactive\033[31m(dead)\033[0m"fi;; *) echo Error;; esac
    4. 검사/var/log/secure 암 호 를 풀 려 는 사람 이 있 는 지 확인 합 니 다\#!/bin/bash while: do rm - rf ip. txt\# 여기 서 제 가 사용 한 것 은 방문 실패 12 번 만 에 awk '/Failed/{print $11}'/var/log/secure | awk '{ip [$1]++} END {for (i in ip) {if (ip [i] > = 12) {print i}}} >> ip. txt for i in  cat ip.txt do\# 여기에 표 시 된 ip 을 block 구역 에 잠시 넣 습 니 다 firewall - cmd -- zone = block -- add - source = $i & >/dev/null done sleep 10 done
    3. 모니터링 스 크 립 트 (awk 필터):\#!/bin/bash CPU = uptime | awk '{print$10}' echo "현재 CPU 부하: ${CPU}"\# 여기 RX 1 과 RX 2 는 같은 RX 1 입 니 다. RX 2 는 사용자 가 보기 편 하도록 RX 1 = ifconfig eth0 | awk '/RX p/{print $5}' RX 2 = ifconfig eth0 | awk -F\( '/RX p/{print $2}' | sed 's/[)]//' echo "현재 네트워크 카드 가 받 은 데이터 흐름: $RX2"\# 여기 TX1 과 TX2 는 같은 RX1 은 계산 을 편리 하 게 하기 위해 서 입 니 다. RX2 는 사용자 가 편리 하 게 TX1 = ifconfig eth0 | awk '/TX p/{print $5}' TX2 = ifconfig eth0 | awk -F\( '/TX p/{print $2}' | sed 's/[)]//' echo"현재 네트워크 카드 에서 받 은 데이터 트 래 픽: $TX2 "FREE = free | awk '/Mem/{print $4}' echo"현재 메모리 남 은: $FREE "ROOTFREE = df | awk '/\/$/{print $4}' echo"현재 루트 구역 의 남 은 용량: $ROOTFREE "USERS = cat /etc/passwd | wc -l echo"현재 컴퓨터 의 계 정 수량: $USER"USERNOW = who | awk 'END{print NR}' echo "현재 로그 인 한 사람: $USERNOW"NUM = ps aux | wc -l echo "현재 열 린 프로 세 스 수량: $NUM"SNUM = rpm -qa | wc -l echo "몇 개의 소프트웨어 가 설치 되 어 있 습 니까: $SNUM"
    본 고 는 Xuenqlve 51CTO 블 로그, 원문 링크 에서 전 환 됩 니 다.http://blog.51cto.com/13558754/2057165전재 가 필요 하 시 면 원작 자 에 게 직접 연락 하 세 요.

    좋은 웹페이지 즐겨찾기