1苔咪、
Expect腳本
#!/usr/bin/expect
spawn ssh root@192.168.31.158
expect {
"*(yes/no*" { send "yes\r";exp_continue? }
"*password:*" { send "root123\r";exp_continue? }
"*]#" { send "hostname -I\r" }
}
expect eof
SHELL腳本
#!/bin/bash
ip=$1
user=$2
password=$3
expect <<EOF
set timeout 10
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
expect eof
EOF
2、
#!/bin/bash
#
declare -i min max
declare -a nums
for ((i=0;i<10;i++));do
? ? nums[$i]=$RANDOM
? ? [ $i -eq 0 ] && min=${nums[0]} && max=${nums[0]} && continue
? ? [ ${nums[$i]} -gt $max ] && max=${nums[$i]}
? ? [ ${nums[$i]} -lt $min ] && min=${nums[$i]}
done
echo "ALL numbers are ${nums[*]}"
echo Max is $max
echo Min is $min
3休涤、
#!/bin/bash
declare -a number
for (( i=0; i<20; i++ ));do
? number[$i]=$RANDOM
done
echo "before sort:"
echo ${number[@]}
declare -i n=20
for (( i=0; i<n-1; i++ ));do
? for (( j=0; j<n-1-i; j++ ));do
? ? let next=$j+1
? ? if (( ${number[$j]} < ${number[$next]} ));then
? ? ? tmp=${number[$next]}
? ? ? number[$next]=${number[$j]}
? ? ? number[$j]=$tmp
? ? fi
? done
done
4缩功、
linux下查看負(fù)載的主要命令有下面一些:
top盒刚, uptime掀淘,w砚亭,vmstat
第一行解釋:
top - 01:18:39 up 2 days, 18:54, 1 user, load average: 0.04, 0.03, 0.05
01:18:39:系統(tǒng)當(dāng)前時(shí)間
up 2 days, 18:54 :系統(tǒng)開(kāi)機(jī)到現(xiàn)在經(jīng)過(guò)了2天
1 users:當(dāng)前1用戶在線
load average:0.04, 0.03, 0.05:系統(tǒng)1分鐘扣猫、5分鐘菜循、15分鐘的CPU負(fù)載信息.
備注:load average后面三個(gè)數(shù)值的含義是最近1分鐘、最近5分鐘申尤、最近15分鐘系統(tǒng)的負(fù)載值债朵。這個(gè)值的意義是,單位時(shí)間段內(nèi)CPU活動(dòng)進(jìn)程數(shù)瀑凝。如果你的機(jī)器為單核,那么只要這幾個(gè)值均<1臭杰,代表系統(tǒng)就沒(méi)有負(fù)載壓力粤咪,如果你的機(jī)器為N核,那么必須是這幾個(gè)值均<N才可認(rèn)為系統(tǒng)沒(méi)有負(fù)載壓力渴杆。
第二行解釋:
Tasks: 108 total, 1 running, 107 sleeping, 0 stopped, 0 zombie
108 total:當(dāng)前有108個(gè)任務(wù)
1 running:1個(gè)任務(wù)正在運(yùn)行
107 sleeping:107個(gè)進(jìn)程處于睡眠狀態(tài)
0 stopped:停止的進(jìn)程數(shù)
0 zombie:僵死的進(jìn)程數(shù)
第三行解釋:
%Cpu(s): 0.1 us, 0.2 sy, 0.2 ni, 99.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
0.1%us:用戶態(tài)進(jìn)程占用CPU時(shí)間百分比
0.2%sy:內(nèi)核占用CPU時(shí)間百分比
0.2%ni:renice值為負(fù)的任務(wù)的用戶態(tài)進(jìn)程的CPU時(shí)間百分比寥枝。nice是優(yōu)先級(jí)的意思
99.4%id:空閑CPU時(shí)間百分比
0.0%wa:等待I/O的CPU時(shí)間百分比
0.0%hi:CPU硬中斷時(shí)間百分比
0.0%si:CPU軟中斷時(shí)間百分比
第四行解釋:
KiB Mem : 3882172 total, 1079980 free, 1684652 used, 1117540 buff/cache
3882172 k total:物理內(nèi)存總數(shù)
1684652k used: 使用的物理內(nèi)存
1079980k free:空閑的物理內(nèi)存
1117540k cached:用作緩存的內(nèi)存
第五行解釋:
KiB Swap: 0 total, 0 free, 0 used. 1871412 avail Mem
0k total:交換空間的總量
0k used: 使用的交換空間
0k free:空閑的交換空間
1871412k cached:緩存的交換空間
最后一行:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID:進(jìn)程ID
USER:進(jìn)程的所有者
PR:進(jìn)程的優(yōu)先級(jí)
NI:nice值
VIRT:占用的虛擬內(nèi)存
RES:占用的物理內(nèi)存
SHR:使用的共享內(nèi)存
S:進(jìn)行狀態(tài) S:休眠 R運(yùn)行 Z僵尸進(jìn)程 N nice值為負(fù)
%CPU:占用的CPU
%MEM:占用內(nèi)存
TIME+: 占用CPU的時(shí)間的累加值
COMMAND:?jiǎn)?dòng)命令
[root@elk-node01 logstash]# uptime
01:34:02up2days,19:09,1user,? load average:0.06,0.06,0.06
參考top命令的第一行解釋
[root@elk-node01 logstash]# w
01:34:58up2days,19:10,1user,? load average:0.07,0.06,0.06
USERTTYFROMLOGIN@? IDLE? JCPU? PCPU WHAT
centos? pts/4192.168.60.107Tue072.00s0.09s0.14s sshd: centos [priv]
第一行參考top命名的第一行解釋
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT解釋如下:
USER —登錄的用戶名
TTY —登錄后系統(tǒng)分配的終端號(hào)
FROM—遠(yuǎn)程主機(jī)名囊拜,即從哪兒登錄來(lái)的
LOGIN@—何時(shí)登錄
IDLE—空閑了多長(zhǎng)時(shí)間,表示用戶閑置的時(shí)間比搭。這是一個(gè)計(jì)時(shí)器冠跷,一旦用戶執(zhí)行任何操作,該計(jì)時(shí)器便會(huì)被重置
JCPU—和該終端(tty)連接的所有進(jìn)程占用的時(shí)間身诺,這個(gè)時(shí)間里并不包括過(guò)去的后臺(tái)作業(yè)時(shí)間蜜托,但卻包括當(dāng)前正在運(yùn)行的后臺(tái)作業(yè)所占用的時(shí)間
PCPU—指當(dāng)前進(jìn)程(即在WHAT項(xiàng)中顯示的進(jìn)程)所占用的時(shí)間
WHAT—當(dāng)前正在運(yùn)行進(jìn)程的命令行
[root@elk-node01 logstash]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r? b? swpd? free? buff? cache? si? so? ? bi? ? bo? in? cs us sy id wa st
1001080064888111671200023149109900
r 表示運(yùn)行隊(duì)列(就是說(shuō)多少個(gè)進(jìn)程真的分配到CPU)霉赡,當(dāng)這個(gè)值超過(guò)了CPU數(shù)目橄务,就會(huì)出現(xiàn)CPU瓶頸。這個(gè)也和top的負(fù)載有關(guān)系穴亏,一般負(fù)載超過(guò)了3就比較高蜂挪,超過(guò)了5就高重挑,超過(guò)了10就不正常了,服務(wù)器的狀態(tài)很危險(xiǎn)棠涮。top的負(fù)載類似每秒的運(yùn)行隊(duì)列谬哀。如果運(yùn)行隊(duì)列過(guò)大,表示你的CPU很繁忙故爵,一般會(huì)造成CPU使用率很高玻粪。
b 表示阻塞的進(jìn)程,這個(gè)不多說(shuō),進(jìn)程阻塞诬垂,大家懂的劲室。
swpd 虛擬內(nèi)存已使用的大小,如果大于0结窘,表示你的機(jī)器物理內(nèi)存不足了很洋,如果不是程序內(nèi)存泄露的原因,那么你該升級(jí)內(nèi)存了或者把耗內(nèi)存的任務(wù)遷移到其他機(jī)器隧枫。
free 空閑的物理內(nèi)存的大小喉磁,我的機(jī)器內(nèi)存總共8G,剩余3415M官脓。
buff Linux/Unix系統(tǒng)是用來(lái)存儲(chǔ)协怒,目錄里面有什么內(nèi)容,權(quán)限等的緩存卑笨,我本機(jī)大概占用300多M
cache cache直接用來(lái)記憶我們打開(kāi)的文件,給文件做緩沖孕暇,(這里是Linux/Unix的聰明之處,把空閑的物理內(nèi)存的一部分拿來(lái)做文件和目錄的緩存赤兴,是為了提高 程序執(zhí)行的性能妖滔,當(dāng)程序使用內(nèi)存時(shí),buffer/cached會(huì)很快地被使用桶良。)
si 每秒從磁盤讀入虛擬內(nèi)存的大小座舍,如果這個(gè)值大于0,表示物理內(nèi)存不夠用或者內(nèi)存泄露了陨帆,要查找耗內(nèi)存進(jìn)程解決掉曲秉。我的機(jī)器內(nèi)存充裕,一切正常歧譬。
so 每秒虛擬內(nèi)存寫(xiě)入磁盤的大小岸浑,如果這個(gè)值大于0,同上瑰步。
bi 塊設(shè)備每秒接收的塊數(shù)量矢洲,這里的塊設(shè)備是指系統(tǒng)上所有的磁盤和其他塊設(shè)備,默認(rèn)塊大小是1024byte缩焦。
bo 塊設(shè)備每秒發(fā)送的塊數(shù)量读虏,例如我們讀取文件责静,bo就要大于0。bi和bo一般都要接近0盖桥,不然就是IO過(guò)于頻繁灾螃,需要調(diào)整。
in 每秒CPU的中斷次數(shù)揩徊,包括時(shí)間中斷
cs 每秒上下文切換次數(shù)腰鬼,例如我們調(diào)用系統(tǒng)函數(shù),就要進(jìn)行上下文切換塑荒,線程的切換熄赡,也要進(jìn)程上下文切換,這個(gè)值要越小越好齿税,太大了彼硫,要考慮調(diào)低線程或者進(jìn)程的數(shù)目,例如在apache和nginx這種web服務(wù)器中,我們一般做性能測(cè)試時(shí)會(huì)進(jìn)行幾千并發(fā)甚至幾萬(wàn)并發(fā)的測(cè)試凌箕,選擇web服務(wù)器的進(jìn)程可以由進(jìn)程或者線程的峰值一直下調(diào)拧篮,壓測(cè),直到cs到一個(gè)比較小的值牵舱,這個(gè)進(jìn)程和線程數(shù)就是比較合適的值了串绩。系統(tǒng)調(diào)用也是,每次調(diào)用系統(tǒng)函數(shù)芜壁,我們的代碼就會(huì)進(jìn)入內(nèi)核空間赏参,導(dǎo)致上下文切換,這個(gè)是很耗資源沿盅,也要盡量避免頻繁調(diào)用系統(tǒng)函數(shù)。上下文切換次數(shù)過(guò)多表示你的CPU大部分浪費(fèi)在上下文切換纫溃,導(dǎo)致CPU干正經(jīng)事的時(shí)間少了腰涧,CPU沒(méi)有充分利用,是不可取的紊浩。
us 用戶CPU時(shí)間窖铡,我曾經(jīng)在一個(gè)做加密解密很頻繁的服務(wù)器上,可以看到us接近100,r運(yùn)行隊(duì)列達(dá)到80(機(jī)器在做壓力測(cè)試坊谁,性能表現(xiàn)不佳)费彼。
sy 系統(tǒng)CPU時(shí)間,如果太高口芍,表示系統(tǒng)調(diào)用時(shí)間長(zhǎng)箍铲,例如是IO操作頻繁。
id 空閑 CPU時(shí)間鬓椭,一般來(lái)說(shuō)颠猴,id + us + sy = 100,一般認(rèn)為id是空閑CPU使用率关划,us是用戶CPU使用率,sy是系統(tǒng)CPU使用率翘瓮。
wt 等待IO CPU時(shí)間贮折。
cat /proc/cpuinfo :即可查看CPU信息资盅,幾個(gè)processor即為幾個(gè)CPU调榄;
sar:可以監(jiān)控系統(tǒng)所有資源狀態(tài),sar -n DEV查網(wǎng)卡流量歷史呵扛、sar -q 查看歷史負(fù)載每庆,最有用的就是查網(wǎng)卡流量,流量過(guò)大:rxpck/s大于4000,或者rxKB/s大于5000择份,則很有可能被攻擊了扣孟,需要抓包分析;
free:查看當(dāng)前系統(tǒng)的總內(nèi)存大小以及使用內(nèi)存的情況荣赶;查看內(nèi)存使用還可以使用cat /proc/meminfo
ps:查看進(jìn)程凤价,ps aux 或者 ps -elf,常和管道符一起使用拔创,查看某個(gè)進(jìn)程或者它的數(shù)量利诺;
netstat:查看端口,netstat -lnp用于打印當(dāng)前系統(tǒng)啟動(dòng)了哪些端口剩燥,netstat -an用于打印網(wǎng)絡(luò)連接狀況慢逾;
tcpdump:抓包工具分析數(shù)據(jù)包,知道有哪些IP在攻擊灭红;可以將內(nèi)容寫(xiě)入指定文件1.cap中侣滩,顯示包的內(nèi)容,不加-w屏幕上顯示數(shù)據(jù)流向变擒;
wireshark:抓包工具君珠,可以臨時(shí)用該命令查看當(dāng)前服務(wù)器上的web請(qǐng)求
5、
#!/bin/bash
#
#******************************************************
#Author: haha
#QQ: 906195954
#Date: 2021-07-01
#FileName: /data/scripts/ip_scan_for.sh
#URL: https://www.csdn.net
#Description: The test script
#Copyright (C): 2021 All rights reserved
#******************************************
NET=10.0.0
for ID in {1..254};do
{
ping -c1 -w1 $NET.$ID &> /dev/null && echo $NET.$ID is success! || echo $NET.$ID is faild!
}&
done
wait
&?
#并發(fā)執(zhí)行娇斑,&符號(hào):加上&之后策添,命令被放入后臺(tái),這時(shí)候for循環(huán)不會(huì)再等這個(gè)子進(jìn)程毫缆,而是直接進(jìn)入下一個(gè)循環(huán)
6唯竹、
#!/bin/bash
#
#******************************************************
#Author: haha
#QQ: 906195954
#Date: 2021-07-01
#FileName: etc_backup.sh
#URL: https://www.csdn.net
#Description: The test script
#Copyright (C): 2021 All rights reserved
#******************************************
#將/etc備份至/backup目錄中,保存的文件名稱格式 為"etcbak-yyyy-mm-dd-HH.tar.xz",其中日期是前一天的時(shí)間
[ -d/backup ] || mkdir /backup
tar cJvfP /backup/etcbak-`date -d "-1day" +%F_%T`.tar.xz? /etc