N63044-第六周

shell脚本进阶
1、ubuntu网络配置(61分钟)
2、shell脚本编程进价while循环和控制(46分钟)
3、shell脚本进阶shift和select(49分钟)
4、shell脚本进阶函数实现(57分钟)
5、shell脚本进阶函数递归和信号捕捉(61分钟)
6、shell脚本进阶常用工具(44分钟)
7、shell脚本进阶数组(50分钟)

进程和计划任务
1、shell脚本编程进阶字符串切片和高级变量(60分钟)
2、Linux进程和内存管理(57分钟)
3、进程状态和相关概念(41分钟)
4、进程管理工具(67分钟)
5、性能相关工具(50分钟)
6、进程的前后执行和并发执行(48分钟)
7、任务计划管理(69分钟)

1、编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。

[root@centos8 ~]# cat /data/scripts/expect.sh
#!/bin/bash
#********************************************************************
#Author:            linxiaodong
#QQ:                916794060
#Date:              2022-01-27
#FileName:         /data/scripts/expect.sh
#Description:      The test script
#Copyright (C):     2022 All rights reserved
#********************************************************************
ip=$1
user=$2
password=$3
expect <<EOF
set timeout 20
spawn ssh $user@$ip
expect {
        "yes/no" { send "yes\n";exp_continue }
        "password" { send "$password\n" }
}
expect eof
EOF

[root@centos8 ~]# bash /data/scripts/expect.sh 10.0.0.7 root 123456
spawn ssh root@10.0.0.7
root@10.0.0.7's password: 
Last login: Thu Jan 27 18:07:57 2022 from 10.0.0.8
[root@centos7 ~]# 

2、生成10个随机数保存于数组中,并找出其最大值和最小值

[root@centos8 ~]# cat max_min.sh
#!/bin/bash
#********************************************************************
#Author:            linxiaodong
#QQ:                916794060
#Date:              2022-01-27
#FileName:         max_min.sh
#Description:      The test script
#Copyright (C):     2022 All rights reserved
#********************************************************************
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 ~]# bash max_min.sh
All numbers are 28459 4665 25970 11635 30186 2211 17681 9013 14109 27165
Max is 30186
Min is 2211

3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序

[root@centos8 scripts]# cat maopao.sh 
#!/bin/bash
#********************************************************************
#Author:            linxiaodong
#QQ:                916794060
#Date:              2022-01-28
#FileName:         maopao.sh
#Description:      The test script
#Copyright (C):     2022 All rights reserved
#********************************************************************
arr=( 11 3 91 47 36 58 98 2 88 76 9 )
len=${#arr[*]}
echo "原始数组是:" ${arr[*]}
for ((j=0;j<$len;j++));do
for ((i=0;i<$len-1;i++));do
        if [ ${arr[$i]} -gt ${arr[$i+1]} ];then
                x=${arr[$i]}
                arr[$i]=${arr[$i+1]}
                arr[$i+1]=$x              
        fi
done
done
echo "整理后的数组是:" ${arr[*]}

[root@centos8 scripts]# bash maopao.sh 
原始数组是: 11 3 91 47 36 58 98 2 88 76 9
整理后的数组是: 2 3 9 11 36 47 58 76 88 91 98

4、总结查看系统负载的几种命令,总结top命令的指标大概什么含义(不要求全部写出来)

4.1 负载查询 uptime

/proc/uptime 包括两个值,单位 s

  • 系统启动时长
  • 空闲进程的总时长(按总的CPU核数计算)

uptime 和 w 显示以下内容

  • 当前时间
  • 系统已启动的时间
  • 当前上线人数
  • 系统平均负载(1、5、15分钟的平均负载,一般不会超过1,超过5时建议警报)

系统平均负载: 指在特定时间间隔内运行队列中的平均进程数,通常每个CPU内核的当前活动进程数不大
于3,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么此主机的性能有严重问题

如:linux主机是1个双核CPU,当Load Average 为6的时候说明机器已经被充分使用

范例:

[root@centos8 ~]# uptime
 21:19:15 up 1 day, 30 min,  1 user,  load average: 0.03, 0.03, 0.00

[root@centos8 ~]# w
 21:19:45 up 1 day, 31 min,  1 user,  load average: 0.01, 0.02, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.0.1         18:21    0.00s  0.21s  0.00s w

4.2 显示CPU相关统计 mpstat

#安装sysstat软件包
[root@centos8 ~]# yum install -y sysstat

[root@centos8 ~]# mpstat
Linux 4.18.0-240.el8.x86_64 (centos8.magedu.org) 	01/27/2022 	_x86_64_	(2 CPU)

09:24:24 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:24:24 PM  all    0.05    0.01    0.18    0.00    0.13    0.11    0.00    0.00    0.00   99.53

#查看3秒内负载
[root@centos8 ~]# mpstat 1 3
Linux 4.18.0-240.el8.x86_64 (centos8.magedu.org) 	01/27/2022 	_x86_64_	(2 CPU)

09:29:44 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:29:45 PM  all    0.00    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   99.50
09:29:46 PM  all    0.00    0.00    0.00    0.00    0.50    0.00    0.00    0.00    0.00   99.50
09:29:47 PM  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.17    0.00    0.17    0.00    0.00    0.00    0.00   99.67

4.3 查看进程实时状态 top 和 htop

4.3.1 top

N63044-第六周

top 提供动态的实时进程状态

有许多内置命令

帮助:h 或 ? ,按 q 或esc 退出帮助
排序:
P:以占据的CPU百分比,%CPU
M:占据内存百分比,%MEM
T:累积占据CPU时长,TIME+

首部信息显示:
uptime信息:l命令
tasks及cpu信息:t命令
cpu分别显示:1 (数字)
memory信息:m命令

退出命令:q
修改刷新时间间隔:s
终止指定进程:k
保存文件:W

top命令栏位信息简介

us:用户空间
sy:内核空间
ni:调整nice时间
id:空闲
wa:等待IO时间
hi:硬中断
si:软中断(模式切换)
st:虚拟机偷走的时间

top选项:

-d # 	指定刷新时间间隔,默认为3秒
-b 		全部显示所有进程
-n # 	刷新多少次后退出
-H  	线程模式

4.3.2 htop

htop 命令是增强版的TOP命令,来自EPEL源,比top功能更强

#提前安装epel源与htop软件包
[root@centos8 ~]# yum install -y epel-release
[root@centos8 ~]# yum install -y htop

N63044-第六周
选项:

-d #: 指定延迟时间;
-u UserName: 仅显示指定用户的进程
-s COLUME: 以指定字段进行排序

子命令:

s:跟踪选定进程的系统调用
l:显示选定进程打开的文件列表
a:将选定的进程绑定至某指定CPU核心
t:显示进程树

5、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"

[root@centos8 ~]# cat /data/scripts/for_scan_host.sh
#!/bin/bash
#********************************************************************
#Author:            linxiaodong
#QQ:                916794060
#Date:              2022-01-27
#FileName:         /data/scripts/for_scan_host.sh
#Description:      The test script
#Copyright (C):     2022 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 "fail!"
    }&
done
wait
[root@centos8 ~]# bash /data/scripts/for_scan_host.sh
10.0.0.1 is success!
10.0.0.6 is success!
10.0.0.2 is success!
10.0.0.8 is success!
10.0.0.7 is success!
10.0.0.100 is success!
10.0.0.175 is success!
10.0.0.3 is fail!
10.0.0.20 is fail!
10.0.0.21 is fail!

.

6、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间

#创建定时任务
[root@centos8 ~]# crontab -e
30 1 * * 1-5 /bin/cp -a /etc /data/backup/etcbak-`date -d "-1 day" +\%F-\%T.tar.xz`

#显示定时任务
[root@centos8 ~]# crontab -l
30 1 * * 1-5 /bin/cp -a /etc /data/backup/etcbak-`date -d "-1 day" +\%F-\%T.tar.xz` 

#查看备份文件夹
[root@centos8 backup]# ll -d /data/backup/etcbak-2022-01-27-15:35:01.tar.xz
drwxr-xr-x. 80 root root 8192 Jan 28 14:37 /data/backup/etcbak-2022-01-27-15:35:01.tar.xz
上一篇:Oracle 11g 卸载


下一篇:端口发现查看