就业第六周作业
1、编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)
~~~bash
+ expect形式 +
[root@centos7 shell]# cat login_expect.sh
#!/usr/bin/expect
spawn ssh root@192.168.119.129
expect {
"yes/no" {send "yes\n";exp_continue}
"password" { send "wuhaolam\n" }
}
interact
+ shell形式 +
[root@centos7 shell]# cat login.sh
#!/bin/bash
expect <<EOF
spawn ssh root@192.168.119.129
expect {
"yes/no" {send "yes\n";exp_continue}
"password" {send "wuhaolam\n"}
}
expect "]#" { send "echo 'success'\n" }
expect eof
EOF
[root@centos7 shell]# bash login.sh
spawn ssh root@192.168.119.129
root@192.168.119.129's password:
Last login: Fri Apr 15 06:44:15 2022 from 192.168.119.131
[root@Rocky8-mini3 ~]# echo 'success'
success
2、生成10个随机数保存于数组中,并找出其最大值和最小值
[root@centos7 shell]# cat max_min.sh
#!/bin/bash
declare -a nums
for ((i=0;i<10;i++));do
nums[$i]=$RANDOM
[ $i -eq 0 ] && max=${nums[0]} && min=${nums[0]} && continue
[ ${nums[$i]} -gt $max ] && max=${nums[$i]} && continue
[ ${nums[$i]} -lt $min ] && min=${nums[$i]}
done
echo "ALL numbers: ${nums[*]}"
echo Max is $max
echo Min is $min
[root@centos7 shell]# bash max_min.sh
ALL numbers: 21484 13748 22820 1655 6415 21191 2587 11283 21159 14245
Max is 22820
Min is 1655
3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
[root@centos7 shell]# cat bubble_seq.sh
#!/bin/bash
echo "Please input your needed sequence numbers: "
read -a nums
let var=${#nums[*]}-1
for ((i=0;i<$var;i++));do
for ((j=$i+1;j<$var+1;j++));do
if [ ${nums[i]} -gt ${nums[j]} ];then
temp=${nums[j]}
nums[j]=${nums[i]}
nums[i]=$temp
fi
done
done
echo "从小到大的顺序为:${nums[*]}"
for ((i=0;i<$var;i++));do
for ((j=$i+1;j<$var+1;j++));do
if [ ${nums[i]} -lt ${nums[j]} ];then
temp=${nums[j]}
nums[j]=${nums[i]}
nums[i]=$temp
fi
done
done
echo "从大到小的顺序为:${nums[*]}"
[root@centos7 shell]# bash bubble_seq.sh
Please input your needed sequence numbers:
9 7 123 89 13 4 2 76 10
从小到大的顺序为:2 4 7 9 10 13 76 89 123
从大到小的顺序为:123 89 76 13 10 9 7 4 2
4、总结查看系统负载的几种命令,总结top命令的指标大概什么含义(不要求全部写出来)
(1)uptime 和 w
[root@Rocky8-mini ~]# uptime
05:18:04 up 53 min, 1 user, load average: 0.00, 0.00, 0.00
[root@Rocky8-mini ~]# w
05:18:05 up 53 min, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.119.1 04:34 2.00s 0.04s 0.00s w
(2)mpstat
[root@Rocky8-mini ~]# mpstat 1 3
Linux 4.18.0-348.el8.0.2.x86_64 (Rocky8-mini) 04/13/2022 _x86_64_ (2 CPU)
05:20:21 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
05:20:22 AM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
05:20:23 AM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
05:20:24 AM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Average: all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
(3)top和htop(htop比top功能更强大,界面更美观)
[root@Rocky8-mini ~]# top
top - 05:23:08 up 58 min, 1 user, load average: 0.00, 0.00, 0.00
第一个逗号之前的信息说明top命令的启动时间和时长;1 users表示系统中共有1个用户在登录;最后是系统负载均衡的平均值,分别是1分钟、5分钟和15分钟的系统平均负载值。
Tasks: 157 total, 1 running, 156 sleeping, 0 stopped, 0 zombie
结果显示系统中共有157个进程,目前只有1个进程正在运行,有156个进程处于睡眠状态,没有进程被终止也没有僵死
%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st
运行在用户模式和内核模式的进程(ni)所占的CPU百分比,以及在系统空闲(id)时所占的CPU空闲时间百分比;wa(iowait)表示没有进程在CPU上运行时处理器等待I/O完成的时间百分比;hi和si表示硬件与软件中断所花费的CPU时间的百分比;st是虚拟机偷走的时间
MiB Mem : 1790.3 total, 1292.7 free, 213.8 used, 283.8 buff/cache
系统的总内存、空闲的内存、已使用的内存和缓冲区使用的内存
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 1419.1 avail Mem
交换分区的总量、空闲、使用量和用于内核缓存的内存量
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1719 root 20 0 0 0 0 I 0.3 0.0 0:00.07 kworker/1:2-events
1 root 20 0 172360 10336 7904 S 0.0 0.6 0:01.55 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-events_highpri
9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
10 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0
11 root 20 0 0 0 0 I 0.0 0.0 0:01.31 rcu_sched
12 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
13 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
PID 进程号
USER 用户
PR 优先级
NI NICE值
VIRT 虚拟内存集
RES 常驻内存集
SHR 共享内存大小
S 状态
%CPU CPU的占据百分比
%MEM 内存的占用百分比
TIME+ 累计运行时长
COMMAND 启动此进程的命令
(4)free 与内存有关的相关信息
[root@Rocky8-mini ~]# free -h
total used free shared buff/cache available
Mem: 1.7Gi 213Mi 1.3Gi 8.0Mi 284Mi 1.4Gi
Swap: 2.0Gi 0B 2.0Gi
(5)vmstat 虚拟内存信息
[root@Rocky8-mini ~]# 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 1323424 3364 288192 0 0 28 4 45 81 0 0 100 0 0
[root@Rocky8-mini ~]# vmstat -s
1833232 K total memory
218312 K used memory
87024 K active memory
218668 K inactive memory
1323364 K free memory
3364 K buffer memory
288192 K swap cache
2097148 K total swap
0 K used swap
2097148 K free swap
362 non-nice user cpu ticks
53 nice user cpu ticks
1766 system cpu ticks
941506 idle cpu ticks
33 IO-wait cpu ticks
963 IRQ cpu ticks
818 softirq cpu ticks
0 stolen cpu ticks
262841 pages paged in
40424 pages paged out
0 pages swapped in
0 pages swapped out
426119 interrupts
763963 CPU context switches
1649838283 boot time
1895 forks
(6)iostat CPU和设备IO信息
[root@Rocky8-mini ~]# iostat
Linux 4.18.0-348.el8.0.2.x86_64 (Rocky8-mini) 04/13/2022 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.04 0.01 0.37 0.00 0.00 99.58
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdb 0.06 1.84 0.00 8850 8
sda 1.47 51.97 8.41 249959 40430
sdc 0.02 0.62 0.00 2992 0
scd0 0.01 0.22 0.00 1041 0
dm-0 1.24 40.11 7.98 192898 38370
dm-1 0.02 0.46 0.00 2220 0
dm-2 0.02 0.46 0.00 2189 12
(7)iotop
(8)iftop
(9)nload
(10)iptraf-ng 网络监视工具
(11)dstat 统计系统的资源信息
[root@Rocky8-mini ~]# dstat
You did not select any stats, using -cdngy by default.
----total-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read writ| recv send| in out | int csw
0 0 100 0 0| 0 0 | 60B 676B| 0 0 | 83 140
0 0 99 0 0| 0 0 | 60B 342B| 0 0 | 88 142
0 0 99 0 0| 0 0 | 60B 359B| 0 0 | 96 143
0 1 100 0 0| 0 0 | 60B 356B| 0 0 | 82 123
0 0 100 0 0| 0 0 | 60B 358B| 0 0 | 93 144
0 0 99 0 0| 0 0 | 60B 359B| 0 0 | 92 134
0 0 99 0 0| 0 0 | 60B 357B| 0 0 | 100 145
0 0 100 0 0| 0 0 | 60B 359B| 0 0 | 89 139
0 0 99 0 0| 0 0 | 60B 358B| 0 0 | 67 120
0 0 100 0 0| 0 0 | 60B 357B| 0 0 | 69 123
1 1 99 0 0| 0 0 | 60B 358B| 0 0 | 80 132
0 0 99 0 0| 0 0 | 60B 358B| 0 0 | 134 189
0 0 99 0 0| 0 0 | 120B 418B| 0 0 | 82 143
0 0 100 0 0| 0 0 | 60B 359B| 0 0 | 72 118
0 0 99 0 0| 0 0 | 60B 358B| 0 0 | 85 142
0 0 100 0 0| 0 0 | 60B 358B| 0 0 | 94 134
0 1 99 0 0| 0 53k| 60B 358B| 0 0 | 94 158
0 0 99 0 0| 0 0 | 120B 358B| 0 0 | 115 176
1 0 99 0 0| 0 0 | 120B 358B| 0 0 | 95 166 ^C
(12)glances 综合监控系统信息(可监控其他主机资源信息)
(13)cockpit(图形化显示)
+ 安装相关软件包 +
[root@Rocky8-mini ~]# dnf -y install cockpit
[root@Rocky8-mini ~]# systemctl enable --now cockpit.socket
+ 浏览器进入 +
https://主机的IP地址:9090/
5、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"
[root@Rocky8-mini3 shell]# cat Ip_connect_for.sh
#!/bin/bash
for IP in `echo 192.168.0.{1..254}`;do
ping -c2 -w2 $IP &> /dev/null
[ $? -eq 0 ] && echo "$IP success" || echo "$IP fail"
done
[root@Rocky8-mini3 shell]# cat Ip_connect_while.sh
#!/bin/bash
Net=192.168.0
i=1
while ((i<=254));do
IP=$Net.$i
i=$[ $i+1 ]
ping -c2 -w2 $IP &> /dev/null
[ $? -eq 0 ] && echo "$IP success" || echo "$IP fail"
done
6、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间
[root@Rocky8-mini3 backup]# cat /data/shell/bk_file.sh
#!/bin/bash
[ ! -d /backup ] && mkdir /backup
tar -cJvf /backup/etcbak-`date -d '-1 day' +%F-%H`.tar.xz /etc > /dev/null
echo "\$? 的结果是 $?"
[root@Rocky8-mini3 backup]# bash /data/shell/bk_file.sh
tar: Removing leading `/' from member names
$? 的结果是 0
[root@Rocky8-mini3 backup]# ls
etcbak-2022-04-12-05.tar.xz
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」