1粉楚、編寫腳本實(shí)現(xiàn)登陸遠(yuǎn)程主機(jī)。(使用expect和shell腳本兩種形式)
腳本形式:
#!/bin/bash
#****************************************************************************************#
#Author:
#QQ:
#Date: 2021-10-14
#FileName: ssh.sh
#URL:
#Description: non-interactive SSH script
#Copyright (C): 2021 All rights reserved
#*******************************定義顏色*************************************************#
RED="\e[1;31m"
GREEN="\e[1;32m"
SKYBLUE="\e[1;36m"
YELLOW="\e[1;43m"
BLUE="\e[1;44m"
END="\e[0m"
RandomColor="\e[1;34m"
#****************************************************************************************#
declare -A hosts
Move="echo -en \E[8G"
#如果位置參數(shù)是一個包含username:password:ip格式的文件,則將文件內(nèi)容存儲為數(shù)組
function arr_user {
#好像j的值是會變成最后一次循環(huán)后的值模软,沒具體確認(rèn)
j=1
for i in `grep -oE "^\w+" $1`;do
hosts[user$j]=$i
#echo $j is ${hosts[user$j]}
((j = ++j))
done
j=1
for l in `sed -nr 's/\w+\:(\w+)\:(.*)/\1/p' $1`;do
hosts[passwd$j]=$l
#echo $j is ${hosts[passwd$j]}
((j = ++j))
done
j=1
for k in `sed -nr 's/\w+\:(\w+)\:(.*)/\2/p' $1`;do
hosts[ip$j]=$k
#echo $j is ${hosts[ip$j]}
((j = ++j))
done
}
#ssh非交互式登錄函數(shù)
function expect_ssh {
expect <<haha
set timeout 20
spawn ssh $1@$3
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$2\n";exp_continue }
-re "#|Ubuntu" { send "exit\n" } -re "refused|No\\\sroute" { send "Connection failed!\n" }
}
expect eof
haha
}
#arr_user $1
#echo ${hosts[*]}
#for ((e=1;e<=3;e++));do
# echo ${hosts[user$e]}
# echo ${hosts[passwd$e]}
3 echo ${hosts[ip$e]}
#done
[ $# -eq 0 ] && { echo -n "Usage: " && $Move; echo "`basename $0` /PATH/TO/FILENAME";$Move; echo "`basename $0` USERNAME PASSWD IP";exit; }
if [ -f $1 ];then
arr_user $1
number=`cat $1 | wc -l`
for (( n=1;n<=$number;n++ ));do
expect_ssh ${hosts[user$n]} ${hosts[passwd$n]} ${hosts[ip$n]}
done
exit
else
expect_ssh $1 $2 $3
exit
fi
expect形式
#!/usr/bin/expect
set user [lindex $argv 0]
set passwd [lindex $argv 1]
set ip [lindex $argv 2]
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$passwd\n";exp_continue }
-re "#|Ubuntu" { send "exit\n" } -re "refused|No\\\sroute" { send "Connection failed!\n" }
}
expect eof
2伟骨、生成10個隨機(jī)數(shù)保存于數(shù)組中,并找出其最大值和最小值
#!/bin/bash
declare -A number
function Random_number {
for ((i=0;i<=9;i++));do
number[digit[$i]]=$RANDOM
done
echo "Random Number Range: ${number[*]}"
}
Random_number
max=0
min=0
for j in `seq 0 9`;do
[ ${number[digit[$j]]} -gt $max ] && max=${number[digit[$j]]}
#cmd1和cmd2任意一個執(zhí)行成功都執(zhí)行cmd3
[ $min -eq 0 ] || [ ${number[digit[$j]]} -lt $min ] && min=${number[digit[$j]]}
done
echo "Max number is: $max"
echo "Min number is: $min"
3燃异、輸入若干個數(shù)值存入數(shù)組中携狭,采用冒泡算法進(jìn)行升序或降序排序
#!/bin/bash
#****************************************************************************************#
#Author: Yb11
#QQ: 394960885
#Date: 2021-10-15
#FileName: bubble_sort.sh
#URL: https://github.com/yabao11
#Description: Bubble_sort
#Copyright (C): 2021 All rights reserved
#*******************************定義顏色*************************************************#
RED="\e[1;31m"
GREEN="\e[1;32m"
SKYBLUE="\e[1;36m"
YELLOW="\e[1;43m"
BLUE="\e[1;44m"
END="\e[0m"
RandomColor="\e[1;34m"
#****************************************************************************************#
function Random_number {
if [[ $1 =~ [[:digit:]]+ ]];then
for ((i=0;i<$1;i++));do
number[$i]=$RANDOM
done
echo "Random Number range: ${number[@]}"
echo
elif [[ $1 =~ \-h ]];then
echo "[help info]"
else
echo "Wrong Number!"
echo "[help info]"
fi
}
function bubble_sort {
for ((j=0;j<$1;j++));do
for ((k=0;k<$1;k++));do
l=$[$k + 1]
if [[ $2 =~ \-i ]];then
if [ $l -eq $1 ];then
break
elif [ ${number[$k]} -gt ${number[$l]} ];then
{ temp=${number[$l]};number[$l]=${number[$k]};number[$k]=$temp; }
else
continue
fi
elif [[ $2 =~ \-d ]];then
if [ $l -eq $1 ];then
break
elif [ ${number[$k]} -lt ${number[$l]} ];then
{ temp=${number[$l]};number[$l]=${number[$k]};number[$k]=$temp; }
else
continue
fi
else
echo "Wrong option!"
echo
fi
done
done
}
Random_number $1
if [[ $1 =~ [[:digit:]]+ ]];then
for ((j=0;j<$1;j++));do
bubble_sort $1 $2
done
else
echo "Usage: "
echo " `basename $0` NUMBER [-i|-d] "
echo " `basename $0` -h"
echo
echo "[options]"
echo "-i increasing"
echo "-d decreasing"
exit
fi
#echo ${number[*]} | sort -n
for m in `seq 0 $1`;do
echo ${number[$m]}
done
4、總結(jié)查看系統(tǒng)負(fù)載的幾種命令回俐,總結(jié)top命令的指標(biāo)大概什么含義(不要求全部寫出來)
uptime:查看系統(tǒng)平均負(fù)載
mpstat:百分比顯示CPU利用率的各項(xiàng)指標(biāo)
top和htop:查看進(jìn)程的實(shí)時狀態(tài)
free:查看內(nèi)存空間的使用狀態(tài)
pmap:查看進(jìn)程對應(yīng)的內(nèi)存映射逛腿,可以看到進(jìn)程依賴的子模塊占用的內(nèi)存數(shù)量,可以以此判斷OOM
vmstat:查看虛擬內(nèi)存的信息仅颇,可以以用戶定義的間隔不斷刷新狀態(tài)单默,能夠看到內(nèi)存與SWAP、磁盤之間的IO情況忘瓦;
iostat:能夠看到更豐富的IO性能狀態(tài)雕凹,可以自定義刷新間隔判斷哪塊硬盤的IO比較繁忙;-x參數(shù)可以看到磁盤基于扇區(qū)的IO政冻,隊(duì)列長度枚抵,處理時間等
iotop:以top方式監(jiān)控磁盤的I/O,實(shí)時監(jiān)控明场,而且可以只顯示正在執(zhí)行讀寫的進(jìn)程汽摹,提供很多非交互式參數(shù);
iftop:顯示網(wǎng)絡(luò)帶寬的使用情況苦锨,查看訪問當(dāng)前主機(jī)的流量的實(shí)時信息逼泣,實(shí)時連接等;
nload:只能以接口為單位查看實(shí)時吞吐量舟舒,看不到連接信息拉庶,只有速率信息;
top命令的指標(biāo)
top - 17:21:28 up 8:49, 2 users, load average: 0.00, 0.02, 0.07
Tasks: 148 total, 1 running, 145 sleeping, 2 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.2 hi, 0.2 si, 0.0 st
MiB Mem : 1790.4 total, 1274.4 free, 225.1 used, 290.9 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 1387.5 avail Mem
PID %MEM VIRT RES CODE DATA SHR nMaj nDRT %CPU COMMAND
879 2.2 229132 40800 288 1356 39140 10 0 0.0 sssd_nss
809 1.5 416616 28400 8 37804 15136 53 0 0.0 tuned
775 1.3 1628184 23316 104 54744 17040 75 0 0.0 polkitd
777 1.0 391668 18464 3344 26896 16056 60 0 0.0 NetworkManager
851 0.8 227520 15356 224 2132 12804 9 0 0.0 sssd_be
646 0.8 128924 14548 304 5972 8348 9 0 0.0 systemd-udevd
773 0.8 218960 14500 80 1640 12452 26 0 0.0 sssd
1 0.8 185928 14060 1288 20808 9252 75 0 0.0 systemd
897 0.7 217660 12404 664 22136 3508 10 0 0.0 rsyslogd
top - 17:21:28 up 8:49, 2 users, load average: 0.00, 0.02, 0.07
`當(dāng)前時間` `開機(jī)時間` `當(dāng)前登錄用戶數(shù)` `平均負(fù)載秃励,5分鐘氏仗、10分鐘、15分鐘`
Tasks: 148 total, 1 running, 145 sleeping, 2 stopped, 0 zombie
`總?cè)蝿?wù)數(shù)` `當(dāng)前正在運(yùn)行的任務(wù)數(shù)` `處于休眠的任務(wù)數(shù)` `停止?fàn)顟B(tài)的任務(wù)數(shù)` `僵尸態(tài)的進(jìn)程數(shù)`
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.2 hi, 0.2 si, 0.0 st
上一次刷新后間隔內(nèi)CPU狀態(tài)的百分比情況夺鲜;是多核CPU的平均值皆尔,可以按1切換顯示為獨(dú)立的CPU統(tǒng)計(jì);
us:用戶空間內(nèi)沒有nice調(diào)整過優(yōu)先級的進(jìn)程運(yùn)行的時間
sy:內(nèi)核空間進(jìn)程運(yùn)行的時間
ni:調(diào)整過nice的用戶空間進(jìn)程運(yùn)行時間
id:空閑時間
wa:等待IO的時間
hi币励,硬中斷時間
si慷蠕,軟中斷(模式切換)
st,虛擬機(jī)偷走的時間(虛擬機(jī)內(nèi)進(jìn)程執(zhí)行的時間)
MiB Mem : 1790.4 total, 1274.4 free, 225.1 used, 290.9 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 1387.5 avail Mem
內(nèi)存和交換分區(qū)的使用情況:
total:總大小
free:空閑大小食呻,加上buff/cache后是真正可以使用的總空閑空間
used:已使用的大小
buff/cache:數(shù)據(jù)緩存占用的大小
PID %MEM VIRT RES CODE DATA SHR nMaj nDRT %CPU COMMAND
PID:進(jìn)程ID
%MEM:內(nèi)存使用百分比
VIRT:使用的虛擬內(nèi)存大小流炕,包括已經(jīng)被映射但還未被使用的頁表
RES:使用的物理內(nèi)存大小
CODE:可用于執(zhí)行代碼的物理內(nèi)存數(shù)量
DATA:進(jìn)程保留的私有內(nèi)存空間澎现,可能還未被映射到物理內(nèi)存,但已經(jīng)被算到虛擬內(nèi)存空間中
SHR:共享內(nèi)存空間每辟,可以被其他進(jìn)程共享
PR:top命令顯示的優(yōu)先級0-39之間昔头,越小
NI:nice優(yōu)先級
%CPU:CPU利用率
TIME+:進(jìn)程啟動之后占用的CPU時間,是時間片的累計(jì)
COMMAND:進(jìn)程關(guān)聯(lián)程序的名稱影兽,或啟動進(jìn)程的命令
5揭斧、編寫腳本,使用for和while分別實(shí)現(xiàn)192.168.0.0/24網(wǎng)段內(nèi)峻堰,地址是否能夠ping通讹开,若ping通則輸出"success!",若ping不通則輸出"fail!"
for實(shí)現(xiàn)
#!/bin/bash
for ip in `seq 254`;do
echo -n "ping 192.168.0.$ip ...."
ping 192.168.0.$ip -c 1 -w 1 &> /dev/null
if [ $? == 0 ]; then
echo "success!"
else
echo "fail!"
fi
done
while實(shí)現(xiàn)
#!/bin/bash
ip=1
while ((ip<=254));do
echo -n "ping 192.168.0.$ip ...."
ping 192.168.0.$ip -c 1 -w 1 &> /dev/null
if [ $? == 0 ]; then
echo "success!"
else
echo "fail!"
fi
let ip++
done
6捐名、每周的工作日1:30旦万,將/etc備份至/backup目錄中,保存的文件名稱格式 為“etcbak-yyyy-mm-dd-HH.tar.xz”镶蹋,其中日期是前一天的時間
想不到這道題坑這么多
[root@centos8mini ~]# crontab -l
PATH=/root:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
30 1 * * * backup.sh
[root@centos8mini ~]# cat backup.sh
#!/bin/bash
[[ `date +%w` =~ [1-5] ]] && tar -cJPf /backup/etcbak-`date -d -1day +%F-%H`.tar.xz /etc || exit