Linux三剑客之awk(包含磁盘管理)
1. 磁盘管理
Linux系统中磁盘管理就是将硬盘通过挂载的方式,挂载到Linux文件系统中
1. 挂载磁盘的步骤
磁盘分区
挂载
# 磁盘分区
fdisk 分区2TB以下的磁盘
最多可以分4个分区
# 不绝对!!!!!!只能说这样分最稳定
gdisk 分区2TB以上的磁盘(其实都可以)
# 需先安装 yum install gdisk -y
最多可以分128个分区
# 添加一块磁盘
lsblk:查看本机的磁盘
sda 磁盘
sr0 镜像文件
df -h:查看本机分区
关机,添加磁盘,新硬盘
1
2
3
持续下一步,直至完成,确定
# 磁盘分区
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