编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)
expect形式
[root@centos8 data]# vim telnet1.sh
#!/usr/bin/expect
spawn ssh 10.0.0.123
expect {
"yes/no" { send "yes\n" }
"password" { send "123456\n" }
}
expect eof
[root@centos8 data]# chmod +x telnet1.sh
[root@centos8 data]# ./telnet1.sh
shell形式
[root@centos8 data]# vim telnet2.sh
#!/bin/bash
ip=10.0.0.123
expect <<EOF
spawn ssh $ip
expect {
"yes/no" { send "yes\n" }
"password" { send "123456\n" }
}
expect eof
EOF
[root@centos8 data]# chmod +x telnet2.sh
[root@centos8 data]# ./telnet2.sh
生成10个随机数保存于数组中,并找出其最大值和最小值
[root@centos8 data]# vim array.sh
#!/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]] && continue
[ ${nums[$i]} -lt $min ] && min=$[nums[$i]]
done
echo "All numbers are ${nums[*]}"
echo Max is $max
echo Min is $min
输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
#!/bin/bash
read -p "请输入数值个数:" COUNT
declare -a nums
for ((i=0;i<$COUNT;i++));do
num[$i]=$RANDOM
done
echo "The initial array:"
echo ${num[@]}
declare -i n=$COUNT
for (( i=0; i<n-1; i++ ));do
for (( j=0; j<n-1-i; j++ ));do
let x=$j+1
if (( ${num[$j]} < ${num[$x]} ));then
tmp=${num[$x]}
num[$x]=${num[$j]}
num[$j]=$tmp
fi
done
done
echo "After sort:"
echo ${num[*]}
echo "the max integer is $num,the min integer is ${num[$((n-1))]}"
总结查看系统负载的几种命令,总结top命令的指标大概什么含义
uptime
#假设linux主机是1个双核CPU,load average值不超过3代表系统性能良好,如果超过6则主机有严重的性能问题,需要尽快解决
[root@centos8 data]# uptime
16:24:47 up 1:02, 2 users, load average: 0.00, 0.00, 0.00
mpstat
#mpstat命令来自于sysstat包
#查看系统负载百分比
[root@centos8 data]# mpstat
Linux 4.18.0-348.el8.x86_64 (centos8) 01/27/2022 _x86_64_ (4 CPU)
04:39:05 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
04:39:05 PM all 0.05 0.02 0.25 0.03 0.44 0.16 0.00 0.00 0.00 99.04
ps aux
#查看进程使用系统资源情况
[root@centos8 data]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.5 237804 10380 ? Ss 15:22 0:03 /usr/lib/systemd/systemd --switched-ro
root 2 0.0 0.0 0 0 ? S 15:22 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 15:22 0:00 [rcu_gp]
top
#实时状态观察
h:帮助
q:退出
M:按照内存使用百分比排序
P:按照CPU使用率排序
T:按照占用CPU时常排序
1:详细查看每颗cpu使用情况
l:关闭或显示uptime时间
t:关闭或显示tasks和cpu信息
#top命令栏位置信息
Tasks:
total:进程个数
running:运行个数
sleeping:休眠状态
stopped:停止的个数
zombie:僵尸态个数
cpu:
us:用户空间
sy:内核空间
ni:调整nice时间
id:空闲
wa:等待io时间
hi:硬中断
si:软中断
st:虚拟机偷走的时间
top命令性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器
free
#查看内存空间
[root@centos8 data]# free -h
total used free shared buff/cache available
Mem: 1.9Gi 215Mi 1.5Gi 8.0Mi 236Mi 1.5Gi
Swap: 2.0Gi 0B 2.0Gi
#选项
-b 以字节为单位
-m 以MB为单位
-g 以GB为单位
-h 易读格式
vmstat
#虚拟内存使用情况
[root@centos8 data]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 1533628 5212 237000 0 0 5 3 31 36 0 1 99 0 0
iostat
#iostat命令来自sysstat包
#详细显示磁盘IO使用情况
[root@centos8 data]# iostat
Linux 4.18.0-348.el8.x86_64 (centos8) 01/27/2022 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.05 0.01 0.85 0.03 0.00 99.06
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
nvme0n1 0.96 20.13 10.03 166518 82935
scd0 0.01 0.13 0.00 1077 0
iotop
#实时显示进程io情况
iftop
#显示网络带宽使用情况,查看访问当前主机的流量信息
编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"
#for循环
#!/bin/bash
ip=192.168.0.
for i in {1..254};do
{
if ping -c1 -w1 ${ip}${i} &>/dev/null;then
echo $ip$i success!
else echo $ip$i fail!
fi
}&
done
wait
#while循环
#!/bin/bash
ip=192.168.0.
i=1
while (( i<=254 ));do
{
ping -c1 -w1 ${ip}${i} &>/dev/null
if [ $? -eq 0 ];then
echo $ip$i success!
else echo $ip$i fail!
fi
}&
let i++
done
wait
每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间
#创建脚本
[root@centos8 data]# vim backup.sh
#!/bin/bash
dir=etcbak-`date -d '-1 day' +%Y-%m-%d-%H`
tar Jcfv /data/backup/${dir}.tar.xz /etc
[root@centos8 data]# bash backup.sh
[root@centos8 data]# ll backup
total 3300
-rw-r--r-- 1 root root 3376192 Jan 28 00:08 etcbak-2022-01-27-00.tar.xz
#创建任务
[root@centos8 data]# crontab -e
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
30 1 * * 1-5 bash backup.sh