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

1.1 使用expect单机远程登录
[root@centos-8 ~]#ip a show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:9b:e3:27 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.150/24 brd 10.0.0.255 scope global dynamic noprefixroute eth0
       valid_lft 1555sec preferred_lft 1555sec
    inet6 fe80::1e45:697a:f83e:7ec0/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

[root@centos-8 ~]#vim test.exp
#!/usr/bin/expect
set ip 10.0.0.132                                                                                                                     
set user root
set password 1
set timeout 5

spawn ssh $user@$ip
expect {
        "yes/no" { send "yes\n";exp_continue }
        "password" { send "$password\n" }
}
interact

[root@centos-8 ~]#expect test.exp 
spawn ssh 10.0.0.132
root@10.0.0.132's password: 
Last login: Thu Aug 12 19:08:15 2021 from 10.0.0.150

[root@localhost ~]#ip a show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:44:4b:e3 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.132/24 brd 10.0.0.255 scope global dynamic noprefixroute eth0
       valid_lft 1467sec preferred_lft 1467sec
    inet6 fe80::47d2:7fa7:18c9:1fde/64 scope link noprefixroute 
       valid_lft forever preferred_lft foreve

1.2 使用shell脚本登录

[root@centos-8 ~]#vim 1.sh
#!/bin/bash
# 
#********************************************************************
#Author:                jiangshen
#QQ:                    1461918614
#Date:                  2021-08-12
#FileName:             1.sh
#Description:          The test script
#Copyright (C):         2021 All rights reserved
#********************************************************************
ip=$1
user=$2
password=$3
expect <<EOF
set timeout 5
spawn ssh $user@$ip                                                                                                                   
expect {
        "yes/no" { send "yes\n";exp_continue }
        "password" { send "$password\n" }
}
expect "]#" { send "useradd hehe\n" }
expect "]#" { send "echo magedu|passwd --stdin hehe\n" }
expect "]#" { send "exit\n" }
expect eof
EOF

[root@centos-8 ~]#bash 1.sh 10.0.0.132 root 1
spawn ssh root@10.0.0.132
root@10.0.0.132's password: 
Last login: Thu Aug 12 21:13:33 2021 from 10.0.0.150
[root@localhost ~]#useradd hehe
useradd: user 'hehe' already exists
[root@localhost ~]#echo magedu|passwd --stdin hehe
Changing password for user hehe.
passwd: all authentication tokens updated successfully.
[root@localhost ~]#exit
logout
Connection to 10.0.0.132 closed.

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

[root@centos-8 ~]#vim array.sh 
#!/bin/bash
# 
#********************************************************************
#Author:                jiangshen
#QQ:                    1461918614
#Date:                  2021-08-12
#FileName:             array.sh
#Description:          The test script
#Copyright (C):         2021 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 ${num[*]}"
echo Max is $max
echo Min is $min

[root@centos-8 ~]#bash array.sh 
All numbers are 
Max is 30496
Min is 1251

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

冒泡排序算法是数据结构各类算法的最简单的一种算法,升序其原理就是从左往右相邻元素两两比较,假如两个数比较左边的比右边的大,就把两个数互换,反之不动 引用一张图展示冒泡排序升序法: 2020062712431452.gif

[root@centos-8 ~]#vim maopao_shengxu.sh
#!/bin/bash
# 
#********************************************************************
#Author:                liuhao
#QQ:                    1921160095
#Date:                  2021-08-12
#FileName:             max.sh
#Description:          The test script
#Copyright (C):         2021 All rights reserved
#********************************************************************
array=( 123 3123 123 2137 319 82 28 1238 213 3 )
length=${#array[*]}
echo "输入十位数:" ${array[*]}
for ((j=0;j<$length;j++));do
        for ((i=0;i<$length-1;i++));do
                if [ ${array[$i]} -gt ${array[$i+1]} ];then                                                                           
                        x=${array[$i]}
                        array[$i]=${array[$i+1]}
                        array[$i+1]=$x
                fi
        done
done
echo "排序后:" ${array[*]}

[root@centos-8 ~]#bash maopao_shengxu.sh 
输入十位数: 123 3123 123 2137 319 82 28 1238 213 3
排序后: 3 28 82 123 123 213 319 1238 2137 3123

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

4.1 查看负载的命令

uptime和w

  • 当前时间
  • 系统已启动时间
  • 当前上线人数
  • 系统平均负载(1、5、15分钟的平均负载,一般不会超过1,超过5时建议警报) \
  • 系统平均负载: 指在特定时间间隔内运行队列中的平均进程数,通常每个CPU内核的当前活动进程数不大于3,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么此主机的性能有严重问题
  • 比如:linux主机是1个双核CPU,当Load Average 为6的时候说明机器已经被充分使用
[root@centos-8 ~]#uptime
 23:21:01 up  4:32,  2 users,  load average: 0.05, 0.05, 0.01

[root@centos-8 ~]#w
 23:22:36 up  4:33,  2 users,  load average: 0.01, 0.03, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.0.1         18:49    0.00s  0.78s  0.00s w
root     pts/1    10.0.0.1         22:48   27:32   0.05s  0.05s -bash

4.2 top命令总结

image.png

内置命令

帮助: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命令栏位信息简介

Tasks:当前总进程数
running:正在运行的进程数
sleeping:睡眠的进程数
stopped:停止的进程数
zombie:僵尸进程数

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

top命令动态栏位信息

PID:进程PID号
USER:启动进程的用户
PR:进程优先级
NI:nice值,负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES:进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR:共享内存大小,单位kb
S:进程状态。D为不可中断的睡眠状态,R为运行,S为睡眠,T为跟踪/停止,Z为僵尸进程
%CPU:上次更新到现在的CPU时间占用比
%MEM:进程使用的物理内存百分比
TIME+:进程使用的CPU时间总计,单位1/100秒
COMMAND:进程名称(命令名/命令行)

top选项

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

范例:

top -H -p `pidof mysqld`

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

5.1 for循环实现IP探测
#!/bin/bash
# 
#********************************************************************
#Author:                jiangshen
#QQ:                    1461918614
#Date:                  2021-08-12
#FileName:             ping_for.sh
#Description:          The test script
#Copyright (C):         2021 All rights reserved
#********************************************************************
for ((i=0;i<255;i++));do                                                                                                              
        {
        ping -c1 -w1 192.168.0.$i &>/dev/null && echo "192.168.0.$i is success!" ||echo "192.168.0.$i is fail!"
        }
done

[root@centos-8 ~]#bash ping_for.sh
5.2 while循环探测IP
[root@centos-8 ~]#vim ping_while.sh
#!/bin/bash
# 
#********************************************************************
#Author:                jiangshen
#QQ:                    1461918614
#Date:                  2021-08-12
#FileName:             ping_while.sh
#Description:          The test script
#Copyright (C):         2021 All rights reserved
#********************************************************************
NET=192.168.0
i=1
while [ $i -lt 255 ];do
        {
        if ping -c1 -w1 $NET.$i &> /dev/null;then
                echo "$NET.$i is success!"
        else
                echo "$NET.$i is fail!"
        fi
        }
        let i++                                                                                                                       
done

[root@centos-8 ~]#bash ping_while.sh

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

这题需要用定时任务

[root@centos-8 ~]#vim backup.sh
#!/bin/bash
# 
#********************************************************************
#Author:                jiangshen
#QQ:                    1461918614
#Date:                  2021-08-12
#FileName:             backup.sh
#Description:          The test script
#Copyright (C):         2021 All rights reserved
#********************************************************************
tar Jcvf /backup/etcbak-$(date -d yesterday +%F-%H).tar.xz /etc/ 

[root@centos-8 ~]#chmod +x backup.sh
[root@centos-8 ~]#crontab -e
30 1 * * 1-5 /bin/bash /root/backup.sh