Linux 자동화 운영 의 Shell 스 크 립 트 (로그 인)
확장 정규 (기본 최적화, 새 것 추가) {n, m} {n,} {n} 을 + 로 뜯 었 습 니까?
기본 정규: 호환성 이 강하 고 쓰기 번 거 로 움 확장 정규: 호환성 이 떨 어 집 니 다. 간단 한 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/passwd
: 41 : 2
[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 done3. 모니터링 스 크 립 트 (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전재 가 필요 하 시 면 원작 자 에 게 직접 연락 하 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZSH에서 물고기까지ZSH는 수년 동안 내 기본 셸이었습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다. 우리는 을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다. 내.zshrc 구성에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.