马哥教育N63013-第六周作业
1、编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。
[root@centos8-hkping ~]#yum install expect -y
[root@centos8-hkping ~]#rpm -qa expect
expect-5.45.4-5.el8.x86_64
#使用expect形式
[root@centos8-hkping data]#vim expect_login
#!/usr/bin/expect
set ip 10.0.0.161
set user root
set password 123456
set timeout 10
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
interact
[root@centos8-hkping data]#chmod +x expect_login
[root@centos8-hkping data]#./expect_login
spawn ssh root@10.0.0.161
root@10.0.0.161's password:
Last login: Tue Jan 25 22:20:59 2022 from 10.0.0.150
[root@centos7 ~]#
#使用shell形式
[root@centos8-hkping data]#vim shell_login.sh
#!/bin/bash
ip=10.0.0.161
user=root
password=123456
expect <
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
expect eof
EOF
[root@centos8-hkping data]#chmod +x shell_login.sh
[root@centos8-hkping data]#./shell_login.sh
spawn ssh root@10.0.0.161
root@10.0.0.161's password:
Last login: Tue Jan 25 22:32:48 2022 from 10.0.0.150
[root@centos7 ~]#
2、生成10个随机数保存于数组中,并找出其最大值和最小值
[root@centos8-hkping data]#vim min_max.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
[root@centos8-hkping data]#sh min_max.sh
All numbers are 18206 10323 31566 18073 289 11359 15395 10981 21730 30847
Max is 31566
Min is 289
3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
[root@centos7 hkping]# vim paixu.sh #!/bin/bash read -p "请输入正整数字,并已空格隔开:" num a=( $num ) for ((i=1;i<${#a[*]};i++)) do for ((j=0;j<${#a[*]}-i;j++)) do if [ ${a[$j]} -gt ${a[`expr $j + 1`]} ] then tmp=${a[`expr $j + 1`]} a[`expr $j + 1`]=${a[$j]} a[$j]=$tmp fi done done echo ${a[@]}
4、总结查看系统负载的几种命令,总结top命令的指标大概什么含义(不要求全部写出来)
w命令可以输出系统负载
第1行输出依次显示了当前的系统时间、系统从启动到现在已经运行的时间、登录到系统中的用户数和系统平均负载。平均负载是指在1min、5min、15min内系统的负载状况。·USER:表示登录系统的用户。·TTY:表示用户使用的TTY名称。·FROM:表示用户从哪里登录进来,一般显示远程登录主机的IP地址或主机名。·LOGIN@:用户登录的日期和时间。·IDLE:显示终端的空闲时间。·JCPU:表示该终端上的所有进程及子进程使用系统的总时间。·PCPU:当前活动进程使用的系统时间。·WHAT:当前用户执行的进程名称和选项。
[root@centos7 hkping]# w 22:23:46 up 1:09, 1 user, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 10.0.0.1 21:15 2.00s 0.11s 0.00s w
uptime命令可以输出当前系统时间、系统开机到现在的运行时间、目前有多少用户在线和系统平均负载等信息。
[root@centos7 hkping]# uptime 22:29:51 up 1:15, 1 user, load average: 0.00, 0.01, 0.05top命令用于实时地对系统处理器状态进行监控,它能够实时地显示系统中各个进程的资源占用状况。该命令可以按照CPU的使用、内存的使用和执行时间对系统任务进程进行排序显示,同时top命令还可以通过交互式命令进行设定显示。
top - 22:30:11 up 1:16, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 127 total, 2 running, 125 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 1.6 sy, 0.0 ni, 98.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 995776 total, 601376 free, 133484 used, 260916 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 716064 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2015 root 20 0 162140 2188 1544 R 6.7 0.2 0:00.01 top 1 root 20 0 125856 4384 2588 S 0.0 0.4 0:02.96 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 5 root 20 0 0 0 0 S 0.0 0.0 0:00.08 kworker/u25+ 6 root 20 0 0 0 0 S 0.0 0.0 0:00.17 ksoftirqd/0 7 root rt 0 0 0 0 S 0.0 0.0 0:09.76 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 R 0.0 0.0 0:03.16 rcu_sched 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-dra+ 11 root rt 0 0 0 0 S 0.0 0.0 0:00.16 watchdog/0 12 root rt 0 0 0 0 S 0.0 0.0 0:00.05 watchdog/1 13 root rt 0 0 0 0 S 0.0 0.0 0:09.65 migration/1 14 root 20 0 0 0 0 S 0.0 0.0 0:00.25 ksoftirqd/1 15 root 20 0 0 0 0 S 0.0 0.0 0:01.14 kworker/1:0 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H 17 root rt 0 0 0 0 S 0.0 0.0 0:00.02 watchdog/2
第一行,任务队列信息,同uptime命令的执行结果。·22:10:02 代表当前系统时间。·up 55min 代表系统已经运行了122分钟。·1 user 代表当前有1个用户登录系统。·load average:0.00,0.01,0.05 load average后面的三个数分别是1分钟、5分钟、15分钟的平均负载情况。
第二行,Tasks为任务(进程)。从上面的信息可以看出,系统现在共有128个进程,其中处于运行状态的有1个,127个在休眠(sleep),stoped状态0个,zombie状态(僵死)的有0个。
第三行,CPU状态信息。·0.0%us 用户空间占用CPU的百分比。·0.0%sy 内核空间占用CPU的百分比。·0.0%ni 改变过优先级的进程占用CPU的百分比。·100.0%id 空闲CPU百分比。·0.0%wa I/O等待占用CPU的百分比。·0.0%hi 硬中断(Hardware IRQ)占用CPU的百分比。·0.0%si 软中断(Software Interrupts)占用CPU的百分比。·0.0%st 虚拟机占用CPU的百分比。
第四行,内存状态。·total 物理内存总量。free 空闲内存总量。·used 使用中的内存总量。··buffers/cache 缓冲的内存量。
第五行,swap交换分区信息。·total 交换区总量。free 空闲交换区总量。·used 使用的交换区总量。··avail Mem 可利用内存总量。
第六行,空白行
第七行,给出的是各进程(任务)的状态监控。·PID 进程id。·USER 进程所有者。·PR 进程优先级。·NI nice值,负值表示高优先级,正值表示低优先级。·VIRT 进程使用的虚拟内存总量,单位为kb。·RES 进程使用的、未被换出的物理内存大小,单位为kb。·SHR 共享内存大小,单位为kb。S 进程状态。D=不可中断的睡眠状态R=运行S=睡眠T=跟踪/停止Z=僵尸进程。·%CPU 上次更新到现在的CPU时间占用百分比。·%MEM 进程使用的物理内存百分比。·TIME+ 进程使用的CPU时间总计,单位1/100秒。·COMMAND 进程名称(命令名/命令行)。
(1)按s键:默认3s刷新一次,按s键修改刷新时间。
(2)按Space键:立即刷新。
(3)按q键:退出。
(4)按P键:按CPU使用率降序排序。
(5)按M键:按内存排序。
(6)按T键:按时间排序。
(7)按p键:进程IP,查看某个进程状态。
(8)按数字1键:显示每个内核的CPU使用率。
(9)按u/U键:指定显示的用户。
(10)按h键:帮助。
5、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"
[root@centos7 hkping]# vim shell_ping.sh #!/bin/bash net=192.168.0 declare -i address=1 while [ $address -le 254 ];do { ping -c1 -w1 ${net}.${address} &>/dev/null if [ $? -eq 0 ];then echo $net.$address is success! else echo $net.$address is fail! fi }& let address++ done wait
6、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间
[root@centos7 hkping] vim /home/hkping/backup_etc.sh #!/bin/bash DAY=$(date +"%F-%H" -d "-1 days" ) if [ ! -d /backup ]; then rm -rf /backup mkdir -p /backup fi tar -zcvf /backup/etcbak-`date +"%F-%H" -d "-1 days"`.tar.xz /etc [root@centos7 hkping]# chmod +x backup_etc.sh [root@centos7 hkping]# crontab -e 30 1 * * 1-5 /home/hkping/backup_etc.sh &>/dev/null
[root@centos7 hkping]# vim shell_ping.sh