IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux脚本练习和系统负载命令 -> 正文阅读

[系统运维]Linux脚本练习和系统负载命令

Linux脚本练习

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

# expect形式
[root@aiden ~]# vim login_expect.sh
#!/usr/bin/expect
set ip 192.168.1.192
set user root
set password 520123
set timeout 10
spawn ssh -o StrictHostKeyChecking=no $user@$ip
expect {
        "password" { send "$password\n" }
}
interact

# 运行测试
[root@aiden ~]# ./login_expect.sh 
spawn ssh -o StrictHostKeyChecking=no root@192.168.1.192
root@192.168.1.192's password: 
Last login: Sun Aug 15 09:43:29 2021 from 192.168.1.1
[root@localhost ~]# 



# shell脚本形式
[root@aiden ~]# vim login_shell.sh
#!/bin/bash
ip=192.168.1.192
user=root
password=520123
expect <<EOF
set timeout 20
spawn ssh -o StrictHostKeyChecking=no $user@$ip
expect {
        "password" { send "$password\n" }
}
expect eof
EOF

# 运行测试
[root@aiden ~]# ./login_shell.sh 
spawn ssh -o StrictHostKeyChecking=no root@192.168.1.192
root@192.168.1.192's password: 
Last login: Sun Aug 15 10:49:16 2021 from 192.168.1.191
[root@localhost ~]# 

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

[root@aiden ~]# vim array.sh 
#!/bin/bash

declare -a num_list
declare -a min_num
declare -a max_num

for i in {0..9};do
    num_list[$i]=$RANDOM
    # 第一次循环,将最大值和最小值均置为该值
    [ $i -eq 0 ] && min_num=${num_list[$i]} && max_num=${num_list[$i]} && continue
    # 比较随机数与最大最小值
    # 若大于最大值,则将最大值置为该随机数,最小于最小值,将最小置为该随机数
    if [ ${num_list[$i]} -lt $min_num ];then
        min_num=${num_list[$i]}
    elif [ ${num_list[$i]} -gt $max_num ];then
        max_num=${num_list[$i]}
    fi

done

# 打印数组和最大最小值
echo "num array   : ${num_list[@]}"
echo "minimal num : $min_num"
echo "maximal num : $max_num"


# 运行测试
[root@aiden ~]# ./array.sh 
num array   : 14806 9017 11187 13515 385 19961 19876 20713 29352 31393
minimal num : 385
maximal num : 31393

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

[root@aiden ~]# vim ./bubble_sort.sh
#!/bin/bash

# size保存参数个数,num_list保存数组
declare -i size=$#
declare -a num_list

# 校验输入的参数个数,若小于等于一个,则提示输入更多参数并退出脚本
[ $size -le 1 ] && echo "number size is $size , please input more number !"  && exit 10

# 使用shift将所有的输入参数加入数组
until [ $# -eq 0 ];do
    # 校验输入的参数是否为整数,若不是整数,则退出脚本
    if [[ ! $1 =~ ^[-]?[1-9][0-9]*$ ]]; then
        echo " $1 is not number; please input number !"
        exit 10
    fi
    num_list[size - $#]=$1
    shift
done

# 冒泡排序
# n个数的数组,最多需要冒泡n-1次,即循环n-1次
for (( i = 0; i < size-1; i++ )); do
    # 记录交换次数,若有一次循环中,相邻两个数的交换次数为零,则表示数组已经升序排列,可以提前退出
    trans_time=0
    # 循环判断相邻两个数大小,将大数往后排
    for (( j = 0; j < size - i -1; j++ )); do
        if [ ${num_list[$j]} -gt ${num_list[$j+1]} ]; then
            tmp=${num_list[$j]}
            num_list[j]=${num_list[$j+1]}
            num_list[j+1]=$tmp
            (( trans_time++ ))
        fi
    done
    # 交换次数为零,提前退出
    if [ $trans_time -eq 0 ]; then
        break;
    fi

done

# 打印排序后的数组
echo "num_list : ${num_list[@]}"


# 运行测试
[root@aiden ~]# ./bubble_sort.sh 101 20 -1 -10 10
num_list : -10 -1 10 20 101

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

# for实现
[root@aiden ~]# vim check_net1.sh
#/bin/bash

prefix="192.168.1"
for i in `seq 1 254`; do
    if ping -c 1 -W 1 -q ${prefix}.$i &> /dev/null ;then
        echo "ping ${prefix}.$i success!" 
    else
        echo "ping ${prefix}.$i fail!" 
    fi
done


# while实现
[root@aiden ~]# vim check_net2.sh 
#/bin/bash

prefix="192.168.1"
i=1
while (( i <= 254 ));do
    if ping -c 1 -W 1 -q ${prefix}.$i &> /dev/null ; then
        echo "ping ${prefix}.$i success!"
    else
        echo "ping ${prefix}.$i fail!"
    fi
    let i++
done

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

# 创建脚本
#!/bin/bash

DAY=$(date +"%F-%H" -d "-1 days" )

if [ ! -d /backup ]; then
    rm -rf /backup
    mkdir -p /backup
fi

tar -JcPf  /backup/etcbak-`date +"%F-%H" -d "-1 days"`.tar.xz /etc


# 加入crontab计划任务
[root@aiden ~]# crontab -l
30 1 * * 1-5 /root/backup_etc.sh > /dev/null

总结系统负载的命令,总结top命令的指标

top

top监控页面

top - 01:53:40 up 11:29,  5 users,  load average: 0.00, 0.03, 0.05
Tasks: 117 total,   1 running, 116 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   995676 total,   215232 free,   197372 used,   583072 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   631120 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                          
 94177 root      20   0  162080   2200   1540 R  0.7  0.2   0:00.05 top                              
   404 root      20   0       0      0      0 S  0.3  0.0   0:29.54 xfsaild/dm-0                     
     1 root      20   0  128184   6840   4184 S  0.0  0.7   0:02.58 systemd                          
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.02 kthreadd                         
     4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                     
     6 root      20   0       0      0      0 S  0.0  0.0   0:03.03 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                           
....

top系统整体的统计信息

第一行是任务队列信息,同 uptime 命令的执行结果

属性表示信息
01:53:40当前时间
up 11:29系统运行时间,格式为时:分
5 user当前登录用户数
load average: 0.00, 0.03, 0.05系统负载,即任务队列的平均长度。
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值

第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行

属性表示信息
117 total进程总数
1 running正在运行的进程数
116 sleeping睡眠的进程数
0 stopped停止的进程数
0 zombie僵尸进程数
属性表示信息
0.0 us用户空间占用CPU百分比
0.0 sy内核空间占用CPU百分比
0.0 ni用户进程空间内改变过优先级的进程占用CPU百分比
100.0 id空闲CPU百分比
0.0 wa等待I/O的CPU时间百分比
0.0 hiCPU硬中断时间百分比
0.0 siCPU软中断时间百分比
0.0 st虚拟机时间百分比

最后两行为内存和swap信息

Mem属性表示信息
995676 total物理内存总量
215232 free空闲内存总量
197372 used使用中的物理内存总量
583072 buff/cache用作缓存的内存总量
Swap属性表示信息
192772k total交换区总量
0k used使用的交换区总量
192772k free空闲交换区总量
123988k cached缓冲的交换区总量

top进程统计信息

序号列名含义
aPID进程id
bPPID父进程id
cRUSERReal user name
dUID进程所有者的用户id
eUSER进程所有者的用户名
fGROUP进程所有者的组名
gTTY启动进程的终端名。不是从终端启动的进程则显示为 ?
hPR优先级
iNInice值。负值表示高优先级,正值表示低优先级
jP最后使用的CPU,仅在多CPU环境下有意义
k%CPU上次更新到现在的CPU时间占用百分比
lTIME进程使用的CPU时间总计,单位秒
mTIME+进程使用的CPU时间总计,单位1/100秒
n%MEM进程使用的物理内存百分比
oVIRT进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
pSWAP进程使用的虚拟内存中,被换出的大小,单位kb。
qRES进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
rCODE可执行代码占用的物理内存大小,单位kb
sDATA可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
tSHR共享内存大小,单位kb
unFLT页面错误次数
vnDRT最后一次写入到现在,被修改过的页面数。
wS进程状态
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程
xCOMMAND命令名/命令行
yWCHAN若该进程在睡眠,则显示睡眠中的系统函数名
zFlags任务标志,参考 sched.h

uptime

[root@aiden ~]# uptime
 02:27:24 up 12:03,  5 users,  load average: 0.00, 0.01, 0.05

参考top命令的第一行解释

w

[root@aiden ~]# w
 02:30:17 up 12:06,  5 users,  load average: 0.05, 0.04, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      10Jul21 22days  0.47s  0.47s -bash
root     pts/0    192.168.1.1      25Jul21 22days  0.00s  0.00s -bash
root     pts/1    192.168.1.53     10Jul21 36days  0.12s  0.12s -bash
root     pts/2    192.168.1.1      22:15    1.00s  0.25s  0.00s w
root     pts/3    192.168.1.1      22:10    4:04m  0.04s  0.04s -bash

第一行参考top第一行解释

属性表示信息
USER登录的用户
TTY登录分配的终端号
FROM远程主机名,从哪里登录
LOGIN@何时登录
IDLE用户闲置时间
JCPU该终端(tty)连接的所有进程占用的时间
PCPU指当前进程(即在WHAT项中显示的进程)所占用的时间
WHAT当前正在运行进程的命令
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 12:07:58  更:2021-08-16 12:08:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 18:22:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计