磁盘分区 & Linux 三剑客之 awk

今日内容

  • 磁盘分区
  • Linux 三剑客之 awk

内容详细

一、磁盘分区

磁盘分区 --> 挂载

步骤

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

1、查看磁盘

磁盘目录

	/dev	--> cdrom、sdb、sdc

[root@localhost ~]# ls /dev

查看本机的磁盘

	lsblk

[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk 
├─sda1            8:1    0  512M  0 part /boot
└─sda2            8:2    0 99.5G  0 part 
  └─centos-root 253:0    0 99.5G  0 lvm  /
sdb               8:16   0  200G  0 disk 
├─sdb1            8:17   0   50G  0 part 
└─sdb2            8:18   0  100G  0 part 
sdc               8:32   0  3.9T  0 disk 
sr0              11:0    1  4.4G  0 rom

查看本机的分区

	df -h

[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.6M  479M   2% /run

2、磁盘分区命令

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

fdisk [磁盘路径(操作对象)]

    1、fdisk [磁盘目录]
    2、n	: 新建一个分区
    3、p	: 打印分区表
    4、w	: 写入磁盘并退出

	q	: 退出
	d	: 删除一个分区

例子:
    1、输入分区命令
    [root@localhost ~]# fdisk /dev/sdb

    2、选择新建分区
    Command (m for help): n
    Partition type:
   p   primary (2 primary, 0 extended, 2 free)	< -- 这里可以看到还剩余多少个分区可创建
   e   extended

    3、默认打印
    Select (default p): 
    Using default response p
    Partition number (3,4, default 3):

    4、第一个不输入,第二个输入分区的大小( + 分区大小)
    First sector (314574848-419430399, default 314574848): 
    Using default value 314574848
    Last sector, +sectors or +size{K,M,G} (314574848-419430399, default 419430399): +10G
    Partition 3 of type Linux and of size 10 GiB is set

    4、写入并退出
    Command (m for help): w
    The partition table has been altered!

输入 m 可以查看 fdisk 中所有的命令

image

gdisk :分区2TB以上的磁盘,最多可以分128个分区

与上述 fdisk 的磁盘分区操作步骤 几乎 一致

3、格式化文件系统

格式命令

	mkfs.xfs [磁盘路径]

[root@localhost ~]# mkfs.xfs /dev/sdb3
meta-data=/dev/sdb3              isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

4、挂载

命令

	mount [磁盘路径] [挂载母鹿]

[root@localhost ~]# mount /dev/sdb3 /mnt

5、检查是否挂载

[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.6M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root  100G  2.1G   98G   3% /
/dev/sda1                509M  132M  378M  26% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/sdb3                 10G   33M   10G   1% /mnt		< -- 挂载成功!

三、Linux 三剑客之 awk

awk 的作用主要式格式化文本

1、语法格式

命令书写格式

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

参数:

-F : 指定文本内容的分隔符(输出之前指定)

# 指定 passwd 文件中内容的分隔符为 : 
打印最后一列
awk -F: '{print $NF}' /etc/passwd

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

2、awk 的生命周期

注意 : awk 对文本的处理是一行一行进行处理的,直至处理完成,grep 和 sed 也是如此

1、接收一行文本内容作为输入
2、对刚进来的文本内容进行分解
3、根据处理规则处理文本
4、把处理结果赋值给 $0,直至处理完成
5、把处理完之后的所有数据交给END{}来再次处理

3、awk 中的预定义变量

提前知道 : {} 是循环的意思

$0	: 代表当前行
	[root@localhost ~]# awk -F: '{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 ---

$n	: 代表第 n 列
    [root@localhost ~]# awk -F: '{print $1}' /etc/passwd
    root		< -- 打印了第一列的内容
    bin
    daemon
    adm
    lp
    sync

NF	: 记录当前行的字段数(列数)
    [root@localhost ~]# awk -F: '{print NF}' /etc/passwd
    7			< -- 打印每一行的列数(字段数)
    7
    7
    7

NR	:记录当前的行数(行号) 
    [root@localhost ~]# awk -F: '{print NR}' /etc/passwd
    1
    2
    3
    4
    5
    6			< -- 记录每一行的行号

FS	: 指定文本内容的分隔符,默认是空格(输出之前,将文本原有的内容分隔)
	[root@localhost ~]# awk -F: 'BEGIN{FS="x"}{print $NF}' /etc/passwd
    :0:0:root:/root:/bin/bash
    :1:1:bin:/bin:/sbin/nologin
    :2:2:daemon:/sbin:/sbin/nologin
    :3:4:adm:/var/adm:/sbin/nologin

    # FS 的优先级比 -F 的大,优先执行 FS


OFS	: 指定打印(输出)文本内容的分隔符,默认是空格
打印第一列和第二列,打印时用 ~~ 分隔开
    [root@localhost ~]# awk -F: 'BEGIN{OFS=" ~~ "}{print $NF,$1}' /etc/passwd
    /bin/bash ~~ root
    /sbin/nologin ~~ bin
    /sbin/nologin ~~ daemon
    /sbin/nologin ~~ adm
    /sbin/nologin ~~ lp
    /bin/sync ~~ sync

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

BEGIN

在执行循环体函数处理文本之前
可以在 BEGIN{ } 里面先定义变量
如 : FS OFS
先指定文本内容的分隔符和输出文本的分隔符

/ /

定位文本
书写正则表达式定位文本内容再做文本处理

循环
大括号内的处理操作会循环执行

END

文本处理结束之后会统一把数据交由END{}再次处理

5、awk 中的函数

print

打印处理后的文本内容

printf

格式化打印

%s

字符串占位

%d

数字占位
占位符中的 左对齐,加数字组合使用,表示占据多少字节
占位符中的 右对齐,加数字组合使用,表示占据多少字节

例子

# 用 : 号 分隔 passwd 文件中的内容,
# 格式化打印分隔后的第一列和最后一列,
# 每列占用15字节,
# 输出的内容用 | 管道符分隔
	awk -F: '{printf"|%-15s|%-15s|\n",$1,$NF}' /etc/passwd

[root@localhost ~]# awk -F: '{printf"|%-15s|%-15s|\n",$1,$NF}' /etc/passwd
|root           |/bin/bash      |
|bin            |/sbin/nologin  |
|daemon         |/sbin/nologin  |
|adm            |/sbin/nologin  |
|lp             |/sbin/nologin  |

6、awk 中的定位

1、正则表达式

# 正则使用 / / 符号来匹配

例子: 
1、打印 passwd 文件中含有 root 的行
	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

2、打印以 root 开头的行
	awk -F: '/^root/{print $0}' /etc/passwd
[root@localhost ~]# awk -F: '/^root/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

3、打印第一列不包含 root 的行
	awk -F: '$1 !~ /root/{print $0}' /etc/passwd
[root@localhost ~]# awk -F: '$1 !~ /root/{print $0}' /etc/passwd
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

2、比较表达式

比较符号:
	> 
	<
	=
	>=
	<=
	~	: 包含,一般与正则表达式一起使用
	!~	: 不包含

例子:
打印所属主id 与 所属组id 相加小于1000的行

[root@localhost ~]# awk -F: '($3 + $4 < 1000){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

3、逻辑表达式

符号:
	&&	: 逻辑与
	||	: 逻辑或
	!	: 逻辑非

例子:

    [root@localhost ~]# awk -F: '$3 + $4 > 10 && $3 * $4 < 1000{print $0}' /etc/passwd
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

打印所属主id 与 所属组id 相加大于1000的行
    [root@localhost ~]# awk -F: '!($3 + $4 < 1000){print $0}' /etc/passwd
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin

4、算术表达式

符号:
	+
	-
	*
	/	: 除以
	==	: 等于
	%	: 取余数

例子:
1、打印行数是奇数的行
	awk -F: 'NR % 2 == 1{print $0}' /etc/passwd

[root@localhost ~]# cat -n /etc/passwd | awk -F: 'NR % 2 == 1{print $0}'
     1	root:x:0:0:root:/root:/bin/bash
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin		< -- 行号都是奇数
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

2、打印行数是偶数数的行
	cat -n /etc/passwd | awk -F: 'NR % 2 == 0{print $0}'

[root@localhost ~]# cat -n /etc/passwd | awk -F: 'NR % 2 == 0{print $0}'
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     6	sync:x:5:0:sync:/sbin:/bin/sync
     8	halt:x:7:0:halt:/sbin:/sbin/halt

5、条件表达式

符号 : (与比较表达式相似)
    ==
    >
    <
    >=
    <=

例子:
1、打印第 5 行与第 7 行
	cat -n /etc/passwd | awk -F: 'NR == 5 || NR == 7{print $0}'

[root@localhost ~]# cat -n /etc/passwd | awk -F: 'NR == 5 || NR == 7{print $0}'
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

6、范围表达式

类似于 sed 的定位
例子:
1、打印以 root 开头的行到以 adm 开头的行
	awk -F: '/^root/,/^adm/{print $0}' /etc/passwd

[root@localhost ~]# awk -F: '/^root/,/^adm/{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

8、流程控制

注意: 流程控制只存在循环之中

if

1、单分支	: {if(判断条件){输出结果}}

2、二分支	: {if(判断条件){输出结果}else{}}

例子: 
如果所属主id 与属组id 相加大于1000,输出 big, 否则输出 small
	awk -F: '{if($3 + $4 > 1000){print "big"}else{print "small"}}' /etc/passwd

[root@localhost ~]# awk -F: '{if($3 + $4 > 1000){print "big"}else{print "small"}}' /etc/passwd
small
small
big
small
small

3、多分支	: {if(){}else if{}else{}}

for

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

例子:
每行打印前 2 次
	awk -F: '{for(i=0;i<5;i++){print $0}}' /etc/passwd

[root@localhost ~]# awk -F: '{for(i=0;i<2;i++){print $0}}' /etc/passwd
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
daemon:x:2:2:daemon:/sbin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

while

	{while(判断条件){}}

例子:
每行打印两遍
[root@localhost ~]# cat -n /etc/passwd | awk -F: '{i=1;while(i<3){print $0, i++}}'
     1	root:x:0:0:root:/root:/bin/bash 1
     1	root:x:0:0:root:/root:/bin/bash 2
     2	bin:x:1:1:bin:/bin:/sbin/nologin 1
     2	bin:x:1:1:bin:/bin:/sbin/nologin 2


打印前 5 行
[root@localhost ~]# cat -n /etc/passwd | awk -F: 'NR < 6{print $0}'
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

每隔 5 行 打印一次横线

每隔 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
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
-----------
posted @ 2021-12-22 17:16  elijah_li  阅读(80)  评论(2编辑  收藏  举报
//一下两个链接最好自己保存下来,再上传到自己的博客园的“文件”选项中