Linux三剑客之awk(包含磁盘管理)

1. 磁盘管理

Linux系统中磁盘管理就是将硬盘通过挂载的方式,挂载到Linux文件系统中

1. 挂载磁盘的步骤
    磁盘分区
    挂载
	
# 磁盘分区
    fdisk  分区2TB以下的磁盘
        最多可以分4个分区
    # 不绝对!!!!!!只能说这样分最稳定
    gdisk  分区2TB以上的磁盘(其实都可以)
    # 需先安装  yum install gdisk -y
        最多可以分128个分区
    
# 添加一块磁盘
    lsblk:查看本机的磁盘
        sda  磁盘
        sr0  镜像文件
    df -h:查看本机分区
    关机,添加磁盘,新硬盘

1
image
2
image

3
image
image
持续下一步,直至完成,确定

# 磁盘分区
    lsblk
    fdisk /dev/sdb
    n  新建一个分区
    p  打印分区表
    d  删除分区
    q  退出
    w  写入磁盘并退出

"开始:"
    1. n
    2. 默认p--回车
    3. 默认1--回车
    4. 起始默认2048--回车
    5. 确定末尾+10G(选择你想要分的大小)
    6. w写入

# 挂载磁盘分区
    # mount /dev/sdb1  /mnt/
    # 目录不限制,只是mnt就是用来挂载的文件夹
    1. 格式化文件系统
        mkfs.xfs /dev/sdb1/

    2. 挂载
        mount /dev/sdb1 /mnt/

"总结:"
    1.关机
    2.添加硬盘
    3.创建分区
        fdisk /dev/sdb/
        or
        gdisk /dev/sdb
    4.格式化文件系统
        mkfs.xfs  /dev/sdb1
    5.挂载
        mount /dev/sdb1  /mnt

2. Linux三剑客之awk

awk支持变量,支持循环,像一个编程语言,内容很多
主要用来处理(格式化)文本的

2.1 awk的语法格式和参数

"awk的语法格式:"
    awk [参数] [处理规则] [操作对象]

"参数:"
    -F  指定文本分隔符(默认以空格作为分隔符)
    # vim x.txt -->asldfa/asdfaf/fdaos/fasf
    # awk '{print $NF}' x.txt
    # awk -F'f' '{print $NF}' x.txt

"案例:"打印系统所有的用户的解析器
awk -F: {'print $NF'} /etc/passwd
awk -F":" {'print $NF'} /etc/passwd
# 冒号:的引号可加可不加。

2.2 awk的生命周期

"awk的生命周期:"
    grep,sed,awk都是读一行处理一行,直至处理完成
    1. 接收一行作为输入
	
    2. 把刚刚读入进来的数据文本,进行分解
    # -F指定的分隔符

    3. 使用处理规则处理文本

    4. 输入一行赋值给$0($0代表当前行的内容),直至处理完成

    5. 把处理完成之后的所有的数据交给END{}来再次处理(空 就不处理)


2.3 awk中的预定义变量

"awk中的预定义变量:"
    $0  代表当前行
    # awk -F: '{print $0, '---'}' /etc/passwd

    $n  代表第n列
    # awk -F: '{print $1}' /etc/passwd
	
    NF  用来记录当前行的字段数(分割的段数)有多少列
    # awk -F: '{print NF}' /etc/passwd
    # awk -F: '{print $NF}' /etc/passwd
    # 可以用$NF取最后一列

    NR  用来记录行号的
    # awk -F: '{print NR}' /etc/passwd
    # 并不是文本再文件内部的行号

    FS  指定文本内容分隔符(默认是空格)
    # awk 'BEGIN{FS=":"}{print $FN,$1}' /etc/passwd
    awk -F: 'BEGIN{FS="x"}{print $NF}' /etc/passwd
    "FS的优先级要高于 -F"

    OFS  指定打印分隔符(默认空格)
    # awk -F: 'BEGIN{OFS=" >>> "}{print $NF,$1}' /etc/passwd


2.4 awk处理规则的执行流程和awk中的函数

"awk处理规则的执行流程:"
    BEGIN{}  # 变量在这里
    //       # 正则
    {}       # 循环,处理文本
    END{}    # 打印之前再统一处理一遍
    # 以上没有哪一部分是必须的,至少有一个,最多有四个

"awk中的函数:"
    # 函数只能应用于循环和END中{},END{}

    "print"   打印

    "printf"  格式化打印
        %s    字符串
        %d    数字
        -     左对齐
        +     右对齐
        15    至少占用15(n)个字符
        awk -F: 'BEGIN{OFS=" | "}{printf "|%-15s|%-15s|",$NF,$1}' /etc/passwd


2.5 awk中的定位

"awk中的定位:"
    1. 正则
        awk -F: '/root/{print $0}' /etc/passwd
        awk -F: '/^root/{print $0}' /etc/passwd
        awk -F: '/root|ROOT|Root/{print $0}' /etc/passwd
        ......

    2. 比较表达式(匹配文本内的内容)
        >,<,>=,<=, ~(正则匹配), !~(正则匹配)(取反)
        案例:要求打印属组id大于属主id的行
        awk -F: '$4 > $3{print $0}' /etc/passwd
        
        # 打印出结尾包含bash的
        awk -F: '$NF ~ /bash/{print $0}' /etc/passwd

        # 不包含的
        awk -F: '$NF !~ /bash/{print $0}' /etc/passwd

    3. 逻辑表达式
    &&  逻辑与
    ||  逻辑或
    !   逻辑非

    awk -F: '$3 + $4 > 2000 && $3 * $4 > 2000{print $0}' /etc/passwd

    4. 算术表达式
    # + - * / %(取模)
        案例:要求属组+属主的id大于2000的
        awk -F: '$3 + $4 > 2000{print $0}' /etc/passwd
        案例:要求打印偶数行
        awk -F: 'NR % 2 ==0{print $0}' /etc/passwd

    5. 条件表达式(匹配自定义的内容)
    # >,<,>=,<=,== 多出一个==
        案例:要求打印第三行
        awk -F: 'NR == 3{print $0}' /etc/passwd
		
    6. 范围表达式
        案例:打印以root开头的行到ftp开头的行
        awk -F: '/^root/,/^ftp/{print $0}' /etc/passwd


2.6 awk中的流程控制

# 只存在于循环之中{}

    1. if
        # 判断
        awk -F: '{if($3>$4)}{print "大于"}else{print "大于或等于"}' /etc/passwd
        if(){}
        if(){}else{}
        if(){}else if(){}else{}

    2. for
        案例:每行打印10次
        awk -F: '{for(i=0;i<10;i++){print $0}}' /etc/passwd
        for(i='初始值';条件判断;游标每次处理变量){}

    3. while
        案例:每行打印10次
        awk -F: '{i=1; while(i<10){print $0; i++}}' /etc/passwd

        awk 'BEGIN {i = 1; while (i < 6) { print i; ++i } }'
        # 输出1,2,3,4,5
        while(条件判断){}

        案例:每隔5行打印一个横线行
        awk -F: '{if(NR%5==0){print "--------------"}print $0}' /etc/passwd

posted @ 2021-12-22 16:13  Joshua_jiaxue  阅读(56)  评论(0编辑  收藏  举报