【linux】shell之小小实战

shell实战

1. 注意事项
- 开头加解释器
    ```
        #!/bin/bash
        # 以及相关注释说明
    ```
- 变量名大写、局部变量小写,函数名小写
- 遇到执行非0时退出脚本的命令:
    ```
        set -e
    ```
- 打印执行过程的命令:
    ```
        set -x
    ```
- 写脚本一定要先测试再上生产环境
2. 获取随机字符串或数字

-c,–characters=LIST select only these characters

2.1 获取8位字符串随机数
- MD5全程报文摘要算法,此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的报文摘要,不同的文件产生相同的报文摘要的可能性是非常小的
```
    echo $RANDOM | md5sum | cut -c 1-8
    cat /proc/sys/kernel/random/uuid | cut -c 1-8
```
2.2 随机8位数字随机数

cksum命令是确保文件从一个系统传输到另一个系统的过程中没有被损坏。这个测试要求校验和在源系统中被计算出来,在目的系统中又被计算一次,两个数字比较,如果校验和相等该文件被认为正确传输了

- %N 十亿分之一秒,纳秒[000000000, 999999999]
```
    echo $RAANDOM | cksum | cut -c 1-8
    date +%N | cut -c 1-8
```
3. 定义一个颜色输出字符串函数
- 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能
- 转义序列是以ESC开头,即用\033来完成(ESC的ASCII码用十进制表示是27,用八进制表示是033)
- 书写格式:
    \033[显示方式;前景色;背景色m + 内容 \033]m 
数值含义
0默认值
1高亮
22非粗体
4下划线
24非下划线
5闪烁
25非闪烁
7反显
27非反显

前景色

数值含义
30黑色
31红色
32绿色
33黄色
34蓝色
35洋红
36青色
37白色

背景色

数值含义
40黑色
41红色
42绿色
43黄色
44蓝色
45洋红
46青色
47白色
    echo -e "\033[m hello \033[m"

    echo -e "\033[0;31;46m hello \033[m"
    显示方式:正常 字体前景色:红色 背景色:青色
4. 批量创建用户

利用useradd 和 passwd

    #!/bin/bash
    USER_FILE=users.txt
    for USER in user{1..5}; do
    if ! id $USER &>/dev/null; then
        PASS=$(echo $RANDOM | md5sum | cut -c 1-8)
        useradd $USER
        echo $PASS | passwd --stdin $USER &> /dev/null
        echo -e "$USER\t$PASS" >> $USER_FILE
        echo "$USER user create successfully."
    else
        echo_color red "$USER already exists.";  
    fi
    done

5. 检查主机存货状态

    #!/bin/bash
    for IP in $@; do
    if ping -c 1 $IP &>/dev/null; then
        echo "$IP is ok."
    else
        echo "$IP is wrong!"
    fi
    done       

6. 系统监控

6.1 系统命令
6.1.1 vmstat
- 借助vmstat工具来分析CPU统计信息
- vmstat(Virtual Memory Statics 虚拟内存统计)命令用来显示Linux系统虚拟内存状态,也可以报告关于进程、内存、I/O等系统整体运行状态
- vmstat[刷新延时 刷新次数]

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 2895176 138760 4284624    0    0    62   187    1    1 22  0 78  0  0


6.1.1.1 (procs)进程信息字段
分类参数含义
procsr等待运行的进程数,数量越大,系统就越繁忙
procsb不可被唤醒的进程数量,数量越大,系统越繁忙
6.1.1.2 memory(内存信息字段)
分类参数含义
memoryswpd使用的Swap空间的大小,单位KB
memoryfree空闲的内存容量,单位KB
memorybuff缓冲的内存容量,单位KB
memorycache缓存的内存容量,单位KB
6.1.1.3 swap(交换分区信息)
- 如果说si和so数越大说明数据经常要在磁盘和内存之间数据交换,系统性能就会越差
分类参数含义
swapsi(in)从磁盘中交换到内存中的数据的数量,单位KB
swapso(out)从内存中交换到硬盘中的数据的数量,单位KB
6.1.1.4 io(磁盘读写)
- bi和bo数越大,说明磁盘的I/O越繁忙
分类参数含义
iobi(in)从块设备读入数据的问题,单位是块
iobo(out)写到块设备的数据的总量,单位是块
6.1.1.5 system(系统信息字段)
- in和cs数越大,说明系统与接口设备的通信越繁忙
分类参数含义
systemin(interrupt)每秒被中断的进程次数
systemcs(switch)每秒钟进行的事件切换次数
6.1.1.6 CPU(CPU信息字段)
分类参数含义
CPUus(user)非内核进程消耗CPU运算时间的百分比
CPUsy(system)内核进程消耗CPU运算时间的百分比
CPUid(idle)空闲CPU的百分比
CPUwa(wait)等待I/O所消耗的CPU百分比
CPUst(steal)被虚拟机偷走的CPU百分比
6.1.2 free
- 查看内存使用状态
- free [-b|-k|-m|-g]
    - -b 表示以字节为单位
    - -k 表示以KB为单位
    - -m 表示以MB为单位
    - -g 表示以GB为单位
    free -m

                 total       used       free     shared    buffers     cached
    Mem:          1006        687        319          0         98        449
    -/+ buffers/cache:        139        866
    Swap:         1999          0       1999    
6.1.2.1 第一行
分类含义
total内存总数,total=used+free
used已经使用的内存数
free空闲的内存数
shared多个进程共享的内存数,0,废弃,永远为0
buffers缓冲区内存数,buffer用于作为写入磁盘的内容缓冲区
cached缓存内存数,用于从磁盘中读取的内容缓存
6.1.2.2 第二行
- 用于指示应用程序看到的内存情况,也就是应用程序获取内存大小
参数算法含义
- buffers/cache第一行的used-buffers-cached已经使用的要减去缓存和缓冲的内存量
+ buffers/cache第一行的free+buffers+cached空闲的要加上缓存和缓冲的内存量
6.1.2.3 第三行
分类含义
totalswap总数,默认单位是K
used已经使用的swap数,默认单位是K
free空闲的swap数,默认单位是K
6.1.3 查询网络状态
- netstat 选项
选项含义
-t列出TCP协议端口
-u列出UDP协议端口
-n不使用域名与服务名,而使用IP地址和端口号
-l仅列出在监听状态网络服务
-a列出所有的网络连接
   netstat -tlun
   netstat -an | more
   netstat -unt | grep  ESTABLISHED



ping

```
    ping -c 1 www.baidu.com
```
- 在windows下,ping一个地址,默认发送四个数据包,linux下ping是不会自动终止的,需要按ctrl+c终止或用参数-c指定要求完成的回应此时
- 在官方 -c<完成次数> 来设置完成要求回应的次数

if后的[]

- if后面接 command list,可以是函数
- [后面只能是condition expression.

缓冲区与缓存区的区别

- 首先缓冲区跟缓存区都是内容内的。
- 所谓的缓冲区,就是当读取内存数据的时候,内容的数据会先放置在缓冲区,等缓冲区一定程度饱和,一起写入硬盘,所以可以提高读写的速度、减少磁盘IO操作、增加磁盘使用寿命

- 所谓的缓存区,就是如果需要不停地读取文件,原本需要从硬盘读取,那么读取一次后可以将文件放在缓存区内,下次读取的时候直接从缓存区拿就可以了,这是内存之间的读取,速度肯定快

查看网卡信息

- ifconfig

查看某块网卡的信息

- ifconfig 网卡名
```
    ifconfig ens33
```

curl

```
    HTTP_CODE=$(curl -o /dev/null -s -w "%{http_code}" http://www.baidu.com)
```
- -o 表示输出
    - -o /dev/null 表示输出到null
- -s 表示默认状态,就是不打印日志
- -w 表示监控
- "%{http_code}" 表示获取头部状态码
- HTTP_CODE就是接收返回的http_code

curl 详解

grep -v xxx

- cat a.txt | grep -v "grep"
    - 表示对a.txt的结果进行过滤,不要含有"grep"的内容
    - -v表示不要

wc

- 统计
    - wc -l
        - 表示只统计行数
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值