磁盘分区 & 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 中所有的命令
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 中的函数
打印处理后的文本内容
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
-----------