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
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
选项:
-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