磁盘管理,linux三剑客之awk


一、磁盘管理

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

1、挂载磁盘的步骤

  1、磁盘分区

  2、挂载

2、磁盘分区

  fdisk:分区2TB以下的磁盘,最多可以分4个区

  gdisk:分区2TB以上的磁盘,最多可以分128个分区(需要安装:yum install gdisk -y)

3、添加一块磁盘

  lsblk:查看本机的磁盘

  df -h:查看本机的分区

4、磁盘分区

  n:新建一个分区

  p:打印分区表

  w:写入磁盘并退出

  q:退出

  d:删除一个分区

5、挂载磁盘分区

  1、格式化文件系统

    mkfs.xfs /dev/sdb1

6、总结

  1、关机

  2、添加硬盘

  3、创建分区

    fdisk /dev/sdb 或 gdisk /dev/sdb

  4、格式化文件系统

    mkfs.xfs /dev/sdb1

  5、挂载

    mount /dev/sdb1 /mnt

 二、awk

  awk命令-文本和数据进行处理的编程语言

1、awk的语法

  awk [参数] [处理规则] [操作对象]

2、参数

  -F:指定文本分隔符(默认是以空格作为分隔符)

[root@localhost ~]# cat 3.txt
jakdfj djsfj jklll
feefsdjlljj jjll
fjklkjl
jsdfds fersdf jere
[root@localhost ~]# awk '{print $NF}' 3.txt
jklll
jjll
fjklkjl
jere
[root@localhost ~]# awk -F'j' '{print $NF}' 3.txt
klll
ll
l
ere

  案例:打印系统所有用户的解析器

    [root@localhost ~]# awk -F: '{print $NF}' /etc/passwd

3、awk的生命周期

  grep、sed和awk都是读一行处理一行,直至处理完成

  1、接收一行作为输入

  2、把刚刚读入进来得到的文本进行分解

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

  4、输入一行,赋值给$0,直至处理完成

  5、把处理完成之后的所有数据交给END{}来再次处理

4、awk中的预定义变量

  $0:代表当前行

    [root@localhost ~]# awk -F: '{print $0,"---"}' /etc/passwd

  $n:代表第n列

    [root@localhost ~]# awk -F: '{print $1}' /etc/passwd

  NF:记录当前行的字段数

    [root@localhost ~]# awk -F: '{print NF}' /etc/passwd

    [root@localhost ~]# awk -F: '{print $NF}' /etc/passwd

  NR:用来记录行号

    [root@localhost ~]# awk -F: '{print NR}' /etc/passwd

  FS:指定文本内容分隔符(默认是空格)

    [root@localhost ~]# awk 'BEGIN{FS=":"}{print $NF,$1}' /etc/passwd

    FS的优先级要高于 -F

    [root@localhost ~]# awk -F: 'BEGIN{FS="x"}{print $NF}' /etc/passwd

  OFS:指定打印分隔符(默认空格)

    [root@localhost ~]# awk -F: 'BEGIN{OFS=">>>"}{print $NF,$1}' /etc/passwd

5、awk处理规则的执行流程

  BEGIN{}

  //:正则匹配

  {}:循环

  END{}

6、awk中的函数(函数一般应用于{}循环里面)

  print:打印

  printf:格式化打印

    %s:字符串

    %d:数字

    -:左对齐

    +:右对齐

    15:至少占用15字符

  [root@localhost ~]# awk -F: 'BEGIN{OFS="|"}{printf "|%+15s|%-15s|\n",$NF,$1}' /etc/passwd

7、awk中的定位

  1、正则表达式

    [root@localhost ~]# awk -F: '/root/{print $0}' /etc/passwd

[root@localhost ~]# awk -F: '/root/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

    [root@localhost ~]# awk -F: '/^root/{print $0}' /etc/passwd

[root@localhost ~]# awk -F: '/^root/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

  2、比较表达式

    >

    <

    >=

    <=

    ~:正则匹配

    !~:正则匹配(取反)

    例1、打印属组ID大于属主ID的行

      [root@localhost ~]# awk -F: '$4>$3{print $0}' /etc/passwd

[root@localhost ~]# awk -F: '$4>$3{print $0}' /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

    例2、打印结尾包含bash的行

      [root@localhost ~]# awk -F: '$NF ~ /bash/{print $0}' /etc/passwd

[root@localhost ~]# awk -F: '$NF ~ /bash/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
test:x:1000:1000::/home/test:/bin/bash
test03:x:1001:1000::/home/test03:/bin/bash
test05:x:998:996::/home/test05:/bin/bash
tuser1:x:1002:1002::/home/tuser1:/bin/bash
tuser2:x:1003:1003:手动创建用户:/home/tuser2:/bin/bash
tuser3:x:1004:1004:手动创建用户:/home/tuser3:/bin/bash

    例3、打印结尾不包含bash的行

      [root@localhost ~]# awk -F: '$NF !~ /bash/{print $0}' /etc/passwd

  3、逻辑表达式

    &&:逻辑与

    ||:逻辑或

    !:逻辑非

    [root@localhost ~]# awk -F: '$3+$4>2000 && $3 * $4>2000{print $0}' /etc/passwd

[root@localhost ~]# awk -F: '$3+$4>2000 && $3 * $4>2000{print $0}' /etc/passwd
test03:x:1001:1000::/home/test03:/bin/bash
tuser1:x:1002:1002::/home/tuser1:/bin/bash
tuser2:x:1003:1003:手动创建用户:/home/tuser2:/bin/bash
tuser3:x:1004:1004:手动创建用户:/home/tuser3:/bin/bash

    [root@localhost ~]# awk -F: '$3+$4>2000 || $3 * $4>2000{print $0}' /etc/passwd

    [root@localhost ~]# awk -F: '!($3+$4>2000){print $0}' /etc/passwd

  4、算数表达式

    +  -  *  /  %

    例1:要求属组+属主的ID大于2000

[root@localhost ~]# awk -F: '$3+$4>2000{print $0}' /etc/passwd
test03:x:1001:1000::/home/test03:/bin/bash
tuser1:x:1002:1002::/home/tuser1:/bin/bash
tuser2:x:1003:1003:手动创建用户:/home/tuser2:/bin/bash
tuser3:x:1004:1004:手动创建用户:/home/tuser3:/bin/bash

    例2:打印偶数行

      [root@localhost ~]# awk -F: 'NR % 2 == 0{print $0}' /etc/passwd

    例3:打印奇数行

      [root@localhost ~]# awk -F: 'NR % 2 == 1{print $0}' /etc/passwd

  5、条件表达式

    ==  >  <  >=  <=

    例1:打印第三行

[root@localhost ~]# awk -F: 'NR == 3{print $0}' /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin

  6、范围表达式

[root@localhost ~]# awk -F: '/^root/,/^ftp/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

8、流程控制(只存在循环之中)

  if(){}

  if(){}else{}

  if(){}else if(){}else{}

[root@localhost ~]# awk -F: '{if($3>$4){print $0,"大于"}else{print $0,"小于或等于"}}' /etc/passwd
root:x:0:0:root:/root:/bin/bash 小于或等于
bin:x:1:1:bin:/bin:/sbin/nologin 小于或等于
daemon:x:2:2:daemon:/sbin:/sbin/nologin 小于或等于
adm:x:3:4:adm:/var/adm:/sbin/nologin 小于或等于
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 小于或等于
sync:x:5:0:sync:/sbin:/bin/sync 大于
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 大于
halt:x:7:0:halt:/sbin:/sbin/halt 大于

  for(i="初始值";条件判断;游标){}

[root@localhost ~]# awk -F: '{for(i=5;i>0;i--){print $0}}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin

  while(条件判断){}

[root@localhost ~]# awk -F: '{i=0;while(i<5){print $0,i++}}' /etc/passwd
root:x:0:0:root:/root:/bin/bash 0
root:x:0:0:root:/root:/bin/bash 1
root:x:0:0:root:/root:/bin/bash 2
root:x:0:0:root:/root:/bin/bash 3
root:x:0:0:root:/root:/bin/bash 4
bin:x:1:1:bin:/bin:/sbin/nologin 0
bin:x:1:1:bin:/bin:/sbin/nologin 1
bin:x:1:1:bin:/bin:/sbin/nologin 2
bin:x:1:1:bin:/bin:/sbin/nologin 3
bin:x:1:1:bin:/bin:/sbin/nologin 4

  每隔5行,打印一行横线----------------------------

[root@localhost ~]# awk -F: '{if(NR%5==0){print "---------------------"}print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
---------------------
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

相关