Week 6 Assignment

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

介绍:
# 主机1:centos8-0.node.com对应IP地址10.0.101.80/24
# 主机2:centos7-0.node.com对应IP地址10.0.101.70/24
# 主机1:实现远程自动登录主机2
一、使用expect脚本实现:
1)安装expect
[root@centos8-0 ~]# dnf -y install expect
2)编号expect
[root@centos8-0 ~]# vim remote_autologin_host
#!/usr/bin/expect

set IP 10.0.101.70
set USR root
set PASS centos
set timeout 10
spawn ssh $USR@$IP
expect { 
    "yes/no" { send "yes\n";exp_continue }
    "password" { send "$PASS\n" }
}
expect "]#" { send "hostname\n" }
expect "]#" { send "exit\n" }
expect eof

[root@centos8-0 ~]# chmod +x remote_autologin_host
[root@centos8-0 ~]# ./remote_autologin_host 
spawn ssh root@10.0.101.70
root@10.0.101.70's password: 
Last login: Tue Oct 12 20:17:16 2021 from 10.0.101.80
[root@centos7-0 ~]# hostname
centos7-0.node.com
[root@centos7-0 ~]# exit
logout
Connection to 10.0.101.70 closed.
[root@centos8-0 ~]# 

二、使用shell脚本形式实现:
[root@centos8-0 ~]# vim remote_autologin_host.sh
#!/bin/bash
#

IP=10.0.101.70
USR=root
PASS=centos

expect << EOF
set timeout 10
spawn ssh $USR@$IP
expect {
    "yes/no" { send "yes\n";exp_continue }
    "password" { send "$PASS\n" }
}
expect "]#" { send "hostname\n" }
expect "]#" { send "exit\n" }
expect eof
EOF

[root@centos8-0 ~]# bash remote_autologin_host.sh
spawn ssh root@10.0.101.70
root@10.0.101.70's password: 
Last login: Tue Oct 12 20:16:55 2021 from 10.0.101.80
[root@centos7-0 ~]# hostname
centos7-0.node.com
[root@centos7-0 ~]# exit
logout
Connection to 10.0.101.70 closed.

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

[root@centos8-0 ~]# vim array_random.sh
#!/bin/bash
#

declare -i min max
declare -a num
for ((i=0;i<10;i++));do
    num[$i]=$RANDOM
    if [ $i -eq 0 ];then
        max=${num[$i]}
        min=${num[$i]}
    elif [ ${num[$i]} -gt $max ];then
        max=${num[$i]}
    elif [ ${num[$i]} -lt $min ];then
        min=${num[$i]}
    fi
done
echo "all numbers are ${num[*]}"
echo "max=$max"
echo "min=$min"

[root@centos8-0 ~]# bash array_random.sh
all numbers are 31423 18714 20710 25778 4348 7012 23964 18898 5066 14794
max=31423
min=4348

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

[root@centos8-0 ~]# vim bubble_sort.sh
#!/bin/bash
#

echo -n "请输入数字列表,\"格式:n1 n2 ...\": "
read -a num
for ((i=0;i<${#num[*]};i++));do
    for ((j=0;j<${#num[*]}-1;j++));do
        if [[ ${num[$j]} -lt ${num[$j+1]} ]];then
            tmp=${num[$j]}
            num[$j]=${num[$j+1]}
            num[$j+1]=$tmp
        fi
    done
done

echo ${num[*]}

[root@centos8-0 ~]# bash bubble_sort.sh
请输入数字列表,"格式:n1 n2 ...": 110 119 120 112 
120 119 112 110

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

1)uptime命令:查看系统负载
[root@centos8-0 ~]# uptime
 00:45:00 up 12 min,  1 user,  load average: 0.04, 0.04, 0.03
解析:
00:45:00表示当前系统时间
up 12min表示系统开机至现在运行多久
1 user表示在线用户数
load average:0.04,0.04,0.03表示系统1分钟、5分钟、15分钟CPU的平均负载

2)w命令:显示谁在登录及他们正在做什么(第一行和uptime命令内容一致)
[root@centos8-0 ~]# w
 00:48:37 up 15 min,  1 user,  load average: 0.00, 0.01, 0.01
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.101.1       00:32    0.00s  0.07s  0.00s w

3)top命令:显示进程实时状态
内置命令:
d:指定更新间隔,秒为单位
k:终止一个进程,后接PID
q:退出
c:显示进程名称全路径
排序:
P:以占据的CPU百分比排序
M:以占据的MEM百分比排序
T:累积占据的CPU时长,TIME+排序
首部信息显示:
l:uptime信息
t:tasks及CPU信息
1:cpu分别显示
m:memory信息
选项:
-d N	指定刷新时间间隔,默认为3秒
-n N	刷新多少次后退出
-b		全部显示所有进程
-H		线程模式
-o		按第六行内容中某列进行排序,如按CPU时间占用百分比排序:top -o %CPU
-p		显示某个进程信息

top显示内容说明:
第一行:系统时间及负载相关
top - 19:08:11 up 2 min,  1 user,  load average: 0.07, 0.09, 0.04

19:08:11:当前系统时间
up 2 min:表示系统开机至现在运行多久
1 user:当前在线用户数
load average: 0.07, 0.09, 0.04:系统1分钟、5分钟、15分钟CPU的平均负载

第二行:进程相关
Tasks: 154 total,   1 running, 153 sleeping,   0 stopped,   0 zombie

154 total:当前总进程数   
1 running:运行中的进程数
153 sleeping:睡眠的进程数  
0 stopped:停止的进程数
0 zombie:僵尸进程数

第三行:CPU相关
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st

0.0 us:用户空间占用CPU的百分比
0.1 sy:内核空间占用CPU的百分比
0.0 ni:改变过优先级的进程占用CPU的百分比
99.8 id:空闲的CPU百分比 
0.0 wa:等待I/O占用CPU的百分比
0.0 hi:硬中断占用CPU的百分比
0.1 si:软中断占用CPU的百分比
0.0 st:在虚拟化环境中,每个虚拟机(VM)都有一部分CPU资源。当操作系统有工作要做时,会检测到,但由于其他虚拟机的CPU繁忙,无法执行。以这种方式损失的时间就是“偷”的时间。

第四行:内存相关
MiB Mem :   1949.4 total,   1571.9 free,    206.6 used,    170.9 buff/cache

1949.4 total:总物理内存大小
1571.9 free:可用物理内存大小   
206.6 used:已用物理内存大小   
170.9 buff/cache:缓冲/缓存的内存量

第五行:交换空间相关
MiB Swap:   4096.0 total,   4096.0 free,      0.0 used.   1587.6 avail Mem

4096.0 total:交换空间大小  
4096.0 free:可用交换空间大小     
0.0 used:已用交换空间大小  
1587.6 avail Mem:可用交换区总量

第六行:
PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND       
  1 root      20   0  176952  10924   8416 S   0.0   0.5   0:01.34 systemd
      
PID:表示进程ID
USER:进程所有者
PR:进程优先级
NI:nice值,负值表示高优先级,正值表示低优先级
VIRT:虚拟内存总量,单位kb
RES:常驻内存总量,单位kb
SHR:共享内存
S:进程状态
	R:运行
	S:睡眠
	D:不可中断的睡眠状态
	T:跟踪/停止
	Z:僵尸进程
%CPU:上次更新到现在的CPU的时间占用百分比
%MEM:进程使用的物理内存占用百分比
TIME+:进程使用的CPU时间总计,单位1/100秒
COMMAND:进程名称

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

[root@centos8-0 ~]# cd /data
[root@centos8-0 data]# vim for_scan_host.sh
#!/bin/bash
# 

NET=192.168.0                                                                                   
for ID in {1..254};do
    { ping -c1 -W1 ${NET}.${ID} &>/dev/null && echo "${NET}.$ID is sussess." || echo "${NET}.${ID} is fail."; }&
done
wait
-------------------------------------------------------------------------------------------------------

[root@centos8-0 data]# vim while_scan_host.sh
#!/bin/bash
#

NET=192.168.0
ID=1
while true
do
    if [ $ID -le 254 ];then
    { 
    ping -c1 -W1 ${NET}.${ID} &>/dev/null && echo "${NET}.${ID} is success." || echo "${NET}.${ID} is fail."
    }&
    else
        exit
    fi
    let ID++
done
wait

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值