第六周作业

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

shell:

[root@centos7 bash_repo]#cat remoteaccess.sh
#!/bin/bash
PASSWORD="sa123"
sshpass -p "$PASSWORD" ssh [email protected]
[root@centos7 bash_repo]#bash remoteaccess.sh
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Sun Nov 28 19:20:00 2021 from 192.168.1.68
[root@centos8sec ~]#

except 

[root@centos8sec ~]#cat expectaccess.exp
#!/usr/bin/expect
spawn ssh 192.168.1.71
expect {
        "yes/no" { send "yes\n";exp_continue }
        "password" { send "sa123\n" }
}
interact
[root@centos8sec ~]#expect expectaccess.exp
spawn ssh 192.168.1.71
[email protected]'s password:
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Sun Nov 28 19:52:32 2021 from 192.168.1.71
[root@centos8sec ~]#

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

#!/bin/bash
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

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

第六周作业_第1张图片

 

[root@centos7 bash_repo]#cat bubblesort.sh
#!/bin/bash

arr=(6 5 3 1 8 7 2 4)

echo "Origigal order is "
echo ${arr[*]}

for ((i=0;i<8;i++))do
    for((j=0;j<8-i-1;j++))do
        if [ ${arr[j]} -gt ${arr[$((j+1))]} ]
        then
            #swap
            temp=${arr[j]}
            arr[$j]=${arr[$((j+1))]}
            arr[$((j+1))]=$temp

        fi
    done
done


echo "Array sorted in acending order"
echo ${arr[*]}

[root@centos7 bash_repo]#sh bubblesort.sh
Origigal order is
6 5 3 1 8 7 2 4
Array sorted in acending order
1 2 3 4 5 6 7 8
[root@centos7 bash_repo]#

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

系统负载:
free

[root@centos7 bash_repo]#free
              total        used        free      shared  buff/cache   available
Mem:        1863012      357568      504824        9896     1000620     1313300
Swap:       2097148           0     2097148

total 总物理内存大小
used  已使用
free 可用大小
shared 多个进程共享的内存总数
buffer 磁盘缓存大小

 vmstat

[root@centos7 bash_repo]#vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 503816   2108 998532    0    0     2     5   69   60  0  0 99  0  0

Procs(进程): 
r: 运行的和等待(CPU 时间片)运行的进程数,这个值也可以判断是否需要增加 CPU(长期大于 1) 
b: 等待 IO 的进程数量,处于不可中断状态的进程数,常见的情况是由 IO 引起的 
Memory(内存): 
swpd: 使用虚拟内存大小,切换到交换内存上的内存(默认以 KB 为单位) 
如果 swpd 的值不为 0,或者还比较大,比如超过 100M 了,但是 si, so 的值长期为 0,这种情况我
们可以不用担心,不会影响系统性能。 
free: 空闲的物理内存 
buff: 用作缓冲的内存大小 
cache: 用作缓存的内存大小,文件系统的 cache,如果 cache 的值大的时候,说明 cache 住的文件数
多,如果频繁访问到的文件都能被 cache 住,那么磁盘的读 IO bi 会非常小 
Swap: 
si: 每秒从交换区写到内存的大小,交换内存使用,由磁盘调入内存 
so: 每秒写入交换区的内存大小,交换内存使用,由内存调入磁盘 
内存够用的时候,这 2 个值都是 0,如果这 2 个值长期大于 0 时,系统性能会受到影响。磁盘 IO 和
CPU 资源都会被消
常有人看到空闲内存(free)很少或接近于 0 时,就认为内存不够用了,实际上不能光看这一点的,还
要结合 si,so,如果 free 很少,但是 si,so 也很少(大多时候是 0),那么不用担心,系统性能这时不会受
到影响的。 
IO:(现在的 Linux 版本块的大小为 1024bytes) 
bi: 每秒读取的块数,从块设备读入的数据总量(读磁盘) (KB/s) 
bo: 每秒写入的块数,写入到块设备的数据总理(写磁盘) (KB/s) 
随机磁盘读写的时候,这 2 个 值越大(如超出 1M),能看到 CPU 在 IO 等待的值也会越大 
system: 
in: 每秒中断数,包括时钟中断。 
cs: 每秒上下文切换数。 
上面这 2 个值越大,会看到由内核消耗的 CPU 时间会越多 
CPU(以百分比表示): 
us: 用户进程消耗的 CPU 时间百分比,us 的值比较高时,说明用户进程消耗的 CPU 时间多,但是如
果长期超过 50% 的使用,那么我们就该考虑优化程序算法或者进行加速了 
sy: 内核进程消耗的 CPU 时间百分比,sy 的值高时,说明系统内核消耗的 CPU 资源多,这并不是良
性的表现,我们应该检查原因。 
id: CPU 处在空闲状态时间百分比(包括 IO 等待时间) 
wa: IO 等待消耗的 CPU 时间百分比,wa 的值高时,说明 IO 等待比较严重,这可能是由于磁盘大量
作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)。

 iostat

[root@centos7 bash_repo]#iostat -x
Linux 3.10.0-1127.el7.x86_64 (centos7)  2021年11月28日  _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.45    0.00    0.25    0.01    0.00   99.30

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.02    0.05    0.11     2.06     5.21    91.78     0.00    3.52    5.77    2.48   1.26   0.02
scd0              0.00     0.00    0.00    0.00     0.01     0.00   114.22     0.00   13.33   13.33    0.00  11.61   0.00
dm-0              0.00     0.00    0.04    0.12     1.88     5.18    87.33     0.00    4.31    7.18    3.39   1.22   0.02
dm-1              0.00     0.00    0.00    0.00     0.01     0.00    50.09     0.00    0.18    0.18    0.00   0.11   0.00
dm-2              0.00     0.00    0.00    0.00     0.01     0.01    43.32     0.00    1.99    2.23    1.73   1.55   0.00


rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s 
wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s 
r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s 
w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s 
rsec/s: 每秒读扇区数。即 delta(rsect)/s 

wsec/s: 每秒写扇区数。即 delta(wsect)/s 
rkB/s: 每秒读 K 字节数。是 rsect/s 的一半,因为每扇区大小为 512 字节。 
wkB/s: 每秒写 K 字节数。是 wsect/s 的一半。 
avgrq-sz: 平均每次设备 I/O 操作的数据大小 (扇区)。即 delta(rsect+wsect)/delta(rio+wio) 
avgqu-sz: 平均 I/O 队列长度。即 delta(aveq)/s/1000 (因为 aveq 的单位为毫秒)。 
await: 平均每次设备 I/O 操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio) 
svctm: 平均每次设备 I/O 操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio) 
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 
delta(use)/s/1000 (因为 use 的单位为毫秒) 
如果 %util 接近 100%,说明产生的 I/O 请求太多,I/O 系统已经满负荷,该磁盘可能存在瓶颈。 
比较重要的参数 
%util:      一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的 
svctm:   平均每次设备 I/O 操作的服务时间 
await:    平均每次设备 I/O 操作的等待时间 
avgqu-sz: 平均 I/O 队列长度 
如果%util 接近 100%,表明 i/o 请求太多,i/o 系统已经满负荷,磁盘可能存在瓶颈,一般%util 大于 70%,i/o 压
力就比较大,读取速度有较多的 wait.同时可以结合 vmstat 查看查看 b 参数(等待资源的进程数)和 wa 参数
(IO 等待所占用的 CPU 时间的百分比,高过 30%时 IO 压力高)。

uptime

[root@centos7 bash_repo]#uptime
 23:24:33 up 2 days,  6:11,  4 users,  load average: 0.05, 0.07, 0.06

 23:24:33  //系统当前时间
up 2 days,  //主机已运行时间,时间越大,说明你的机器越稳定
4 users,  //用户连接数,是总连接数而不是用户数
load average: 0.05, 0.07, 0.06  // 系统平均负载,统计最近 1,5,15 分钟的系统平均负载
如果每个 CPU 内核的当前活动进程数不大于 3 的话,那么系统的性能是良好的。如果每个 CPU 内核的任
务数大于 5,那么这台机器的性能有严重问题。如果你的 linux 主机是 1 个双核 CPU 的话,当 Load Average 
为 6 的时候说明机器已经被充分使用了。



uptime 命令用于查看服务器运行了多长时间以及有多少个用户登录,快速获知服务器的负荷情况。 
uptime 的输出包含一项内容是 load average,显示了最近 1,5,15 分钟的负荷情况。它的值代表等待
CPU 处理的进程数,如果 CPU 没有时间处理这些进程,load average 值会升高;反之则会降低。load average
的最佳值是 1,说明每个进程都可以马上处理并且没有 CPU cycles 被丢失。对于单 CPU 的机器,1 或者
2 是可以接受的值;对于多路 CPU 的机器,load average 值可能在 8 到 10 之间。也可以使用 uptime 命
令来判断网络性能。例如,某个网络应用性能很低,通过运行 uptime 查看服务器的负荷是否很高,如
果不是,那么问题应该是网络方面造成的

 

[root@centos7 bash_repo]#w
 23:27:55 up 2 days,  6:15,  4 users,  load average: 0.00, 0.04, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      22:11    1:16m  0.04s  0.04s -bash
root     pts/0    192.168.1.69     18:46    3.00s  0.19s  0.19s -bash
root     pts/1    192.168.1.69     22:07    1:19m  0.01s  0.01s -bash
root     pts/2    192.168.1.69     21:00    1:35m  0.04s  0.00s sshpass -p zzzzz ssh

第一列 user,代表登录的用户,第二列,tty 代表用户登录的终端号,因为在
linux 中并不是只有一个终端的,pts/2 代表是图形界面的第二个终端(这仅是个人意见,网上的对 pts
的看法可能有些争议)。第三列 FROM 代表登录的地方,如果是远程登录的,会显示 ip 地址,:0 表示的
是 display 0:0,意思就是主控制台的第一个虚拟终端。第四列 login@代表登录的时间,第五列的 IDLE
代表系统的闲置时间。最后一列 what 是代表正在运行的进程

TOP

top 命令用来显示系统当前的进程状况。 
格式:top [选项] 
主要选项如下。 
d:指定更新的间隔,以秒计算。 
q:没有任何延迟的更新。如果使用者有超级用户,则 top 命令将会以最高的优先序执行。 
c:显示进程完整的路径与名称。 
S:累积模式,会将已完成或消失的子进程的 CPU 时间累积起来。 

s:安全模式。 
i:不显示任何闲置(Idle)或无用(Zombie)的进程。 
n:显示更新的次数,完成后将会退出 top

第一行表示的项目依次为当前时间、系统启动时间、当前系统登录用户数目、平均负载。 
第二行显示的是 Tasks: 130total 进程总数、1 running 正在运行的进程数、129 sleeping 睡眠的进程数、
0 stopped 停止的进程数、0zombie 僵尸进程数 
第三行显示的是目前 CPU 的使用情况,Cpu(s): 1% us 用户空间占用 CPU 百分比、0.7% sy 内核空间
占用 CPU 百分比、0.0% ni 用户进程空间内改变过优先级的进程占用 CPU 百分比、98.3% id 空
闲 CPU 百分比、0.0% wa 等待输入输出的 CPU 时间百分比、0.0% hi、0.0% si 
第四行显示物理内存的使用情况,Mem:  total 物理内存总量、used 使用的物理内存
总量、 free 空闲内存总量、 buffers 用作内核缓存的内存量 
第五行显示交换分区使用情况,Swap  total 交换区总量、0k used 使用的交换区总量、
free 空闲交换区总量、 cached 缓冲的交换区总量、内存中的内容被换出到交换区,
而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的
交换区的大小。相应的内存再次被换出时可不必再对交换区写入。 
第六行显示的项目最多,下面列出了详细解释。 
PID(Process ID):进程标志号,是非零正整数。USER:进程所有者的用户名。PR:进程的优先级别。
NI:进程的优先级别数值。VIRT:进程占用的虚拟内存值。RES:进程占用的物理内存值。SHR:进程
使用的共享内存值。STAT:进程的状态,其中 S 表示休眠,R 表示正在运行,Z 表示僵死状态,N 表
示该进程优先值是负数。%CPU:该进程占用的 CPU 使用率。%MEM:该进程占用的物理内存和总内

存的百分比。TIME:该进程启动后占用的总的 CPU 时间。COMMAND:进程启动的启动命令名称,如
果这一行显示不下,进程会有一个完整的命令行。 
top 命令使用过程中,还可以使用一些交互的命令来完成其他参数的功能。这些命令是通过快捷键启
动的。 
<空格>:立刻刷新。 
A 分类显示系统不同资源的使用大户。有助于快速识别系统中资源消耗多的任务。  
f 添加删除所要显示栏位.  
o 调整所要显示栏位的顺序.  
r 调整一个正在运行的进程 Nice 值.  
k 结束一个正在运行的进程.  
z 彩色/黑白显示开关 
P:根据 CPU 使用大小进行排序。 
T:根据时间、累计时间排序。 
q:退出 top 命令。 
m:切换显示内存信息。 
t:切换显示进程和 CPU 状态信息。 
c:切换显示命令名称和完整命令行。 
M:根据使用内存大小进行排序。 
W:将当前设置写入~/.toprc 文件中。这是写 top 配置文件的推荐方法。 
可以看到,top 命令是一个功能十分强大的监控系统的工具,对于系统管理员而言尤其重要。但是,
它的缺点是会消耗很多系统资源

[root@centos7 bash_repo]#top
top - 23:30:21 up 2 days,  6:17,  4 users,  load average: 0.34, 0.15, 0.09
Tasks: 130 total,   1 running, 129 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.0 us,  0.7 sy,  0.0 ni, 98.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1863012 total,   366768 free,   362248 used,  1133996 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1306652 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 10045 root      20   0  889404  73156  18448 S  1.0  3.9   1:00.43 node
   664 root      20   0  305500   6572   5164 S  0.3  0.4   1:57.61 vmtoolsd
     1 root      20   0  125520   4036   2616 S  0.0  0.2   0:15.77 systemd
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kthreadd
     4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
     5 root      20   0       0      0      0 S  0.0  0.0   0:02.04 kworker/u256:0
     6 root      20   0       0      0      0 S  0.0  0.0   0:02.90 ksoftirqd/0
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
     8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
     9 root      20   0       0      0      0 S  0.0  0.0   0:17.86 rcu_sched
    10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain

 

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

for:

#!/bin/bash
NET=192.168.1
for ID in {1..254};do
    {
        ping -c1 -W1 $NET.$ID &> /dev/null && echo $NET.$ID success! || echo $NET.$ID fail!
            }&
            done
            wait

while:  执行比for循环慢很多

#!/bin/bash
NET=192.168.1
i=0
while [ $i -le 255 ]
do
    let i++
    ping -c1 -W1 $NET.$i &> /dev/null && echo $NET.$i success! || echo $NET.$i fail!
done

 

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

[root@centos7 bash_repo]#crontab -e
no crontab for root - using an empty one
crontab: installing new crontab


[root@centos7 bash_repo]#crontab  -l
30 1 * * 1-5 /root/bash_repo/backupetc.sh


[root@centos7 bash_repo]#cat /root/bash_repo/backupetc.sh
#!/bin/bash
YES_DAT=$(date --date='1 days ago' '+%Y%m%d%H')
cp /etc/yum.conf /backup/etcback-$YES_DAT.tar.xz

你可能感兴趣的:(作业,linux,运维,服务器)