磁盘管理、awk
磁盘管理、awk
1、磁盘管理
-
什么是磁盘管理
linux系统中,磁盘管理就是将硬盘通过挂载的方式挂载到linux文件系统中。 -
挂载磁盘的步骤
1.磁盘分区
2.挂载 -
磁盘分区
linux中的磁盘分区有两种:fdisk、gdisk
两者特点介绍:
fdisk:分区2T以下的磁盘,最多可以分为4个分区
gdisk:分区2T以上的磁盘,最多可以分为128个分区 -
如何添加一块磁盘
1、虚拟机关机
2、编辑虚拟机设置
3、点击添加
4、选择硬盘,点击下一步
5、后续一直下一步即可
6、查看本机的磁盘
lsblk
7、查看本机的分区
df -h -
如何进行磁盘分区
fdisk [磁盘名称] # 磁盘设备一般是放在/dev目录下
1、执行分区命令(fdisk/gdisk)
2、输入m获取分区相关命令
3、相关命令简介
n : 新建一个分区
p :打印分区表
w : 写入磁盘并退出
q : 退出
d : 删除一个分区打印分区表
在linux中,存在一个桶的概念
桶:存放数据的容器
4、这里我们选择n新建一个分区
5、默认p进行分区
6、选择分区号,设置当前分区的容量
设置分区容量时,其实就是用到了上面的桶的概念,这里其实是给分区设置桶的数量,通过字节数除以扇区数获得每个桶存放数据的大小,再通过单位换算获得桶的个数
但是上面的的算法算起来麻烦且繁琐,所以在这里我们直接选择100G就好
7、w写入磁盘并退出,磁盘分区完成 -
挂载磁盘分区
1、查看本机的磁盘
lsblk
可以看到我们刚才的sdc的一个分区sdc3
2、挂载磁盘分区
在挂载磁盘分区之前先对文件系统进行格式化
1、格式化文件系统
mkfs.xfs /dev/sdb1(磁盘分区)
2、挂载磁盘分区
mount /dev/sdc3 /mnt
2、linux三剑客之awk
- awk主要是用来格式化文本的
1、awk命令格式:
awk [-F|-f|-v] 'BEGIN{} //{command1; command2} END{}' [操作对象]
[-F|-f|-v] 大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value
' ' 引用代码块
BEGIN 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
// 匹配代码块,可以是字符串或正则表达式
{} 命令代码块,包含一条或多条命令
; 多条命令使用分号分隔
END 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息
2、awk的生命周期
grep、sed及awk都是读一行处理一行,直到处理完成,这种处理文本的方式,大大的减少了机器内存的消耗
1、接收一行作为输入
2、把读入进来的文本进行分解
3、使用处理规则处理文本
4、输入一行,赋值给$0,直到处理完成
5、把处理完之后的所有数据交给END{}来再次处理
3、awk语法格式
awk [参数] [处理规则] [操作对象]
4、awk处理规则的处理流程
BEGIN{}
// # 正则表达式
{} # 函数体代码
END{}
5、awk中的预定义变量
$0 : 代表当前行(默认一行一行的进行读取处理)
# 示例:读取出/etc/passwd里的每一行
[root@jinx ~]# awk -F: '{print $0,"----"}' /etc/passwd # 一行一行的读取,且每一行后加上'----'符号,更好的去理解awk的处理规则;有一点需要注意的是,外面如果使用单引号,里面就要用双引号,避免引起冲突
$n :表示第n列
# 示例:打印出/etc/passwd里的第3列
[root@jinx ~]# cat /etc/passwd | awk -F: '{print $3}'
NF :记录当前文件每一行的列数
# 示例:打印出/etc/passwd文件里每一行的列数
[root@jinx ~]# cat /etc/passwd | awk -F: '{print NF}'
注:$NF表示文件的最后一列
NR :用来记录每一行的行号(实际上是读取一行,记录当前行是读取的第几行,并以数字形式输出)
# 示例:打印出/etc/passwd文件中每一行在文件中的行号
[root@jinx ~]# cat /etc/passwd | awk -F: '{print NR}'
FS :指定文本内容分隔符(默认是空格)
注:FS的优先级要高于-F
# 示例:以-F冒号作为分隔,FS以x作为分隔,对/etc/passwd文件进行处理
[root@jinx ~]# cat /etc/passwd | awk -F: 'BEGIN{FS="x"}{print $NF,$1}'
OFS :指定打印分隔符(默认空格)
# 示例:打印出/etc/passwd文件里的第一行和最后一行,并以‘>>>’ 分隔开
[root@jinx ~]# cat /etc/passwd | awk -F: 'BEGIN{OFS=">>>"}{print $NF,$1}'
6、awk中的函数
print : 打印
printf :格式化打印
占位符
%s : 字符串
%d : 数字
- :左对齐
+ :右对齐
10 :至少占用10个字符
# 示例:格式化打印出/etc/passwd文件里的第一行和最后一行,并以‘>>>’ 分隔开,且两列的分隔符在同一垂直水平线上
[root@jinx ~]# cat /etc/passwd | awk -F: 'BEGIN{OFS=" >>> "}{printf "%+20s >>> %-20s\n",$NF,$1}'
7、awk中的定位
1、正则表达式
# 示例:匹配打印出/etc/passwd文件中包含root的行
[root@jinx ~]# cat /etc/passwd | awk -F: '/root/{print $0}'
2、比较表达式
>
<
>=
<=
~ 正则匹配
!~ 正则匹配(取反)
# 示例1:打印出/etc/passwd文件里属主大于属组的行
[root@jinx ~]# cat /etc/passwd | awk -F: '$3 > $4{print $0}'
# 示例2:打印出/etc/passwd文件里结尾包含bash的行
[root@jinx ~]# cat /etc/passwd | awk -F: '$NF ~/bash/{print $0}'
# 示例3:打印出/etc/passwd文件里结尾不包含bash的行
[root@jinx ~]# cat /etc/passwd | awk -F: '$NF !~/bash/{print $0}'
3、逻辑表达式
&& : 逻辑与 >>> and
|| : 逻辑或 >>> or
! : 逻辑非 >>> not
# 示例1:打印出/etc/passwd文件里属组小于1000且属主小于1000的行
[root@jinx ~]# awk -F: '$4 < 1000 && $3 < 1000{print $0}' /etc/passwd
# 示例2:打印出/etc/passwd文件里属组小于1000或属主大于1000的行
[root@jinx ~]# awk -F: '$4 < 1000 || $3 > 1000{print $0}' /etc/passwd
# 示例3:打印出/etc/passwd文件里属主不大于1000的行
[root@jinx ~]# awk -F: '!($3 > 1000){print $0}' /etc/passwd
4、算术表达式(只能对纯数字进行操作)
+ 加
- 减
* 乘
/ 除
% 取余
5、条件表达式
== 等于
> 大于
<= 小于等于
>= 大于等于
# 示例:打印出/etc/passwd文件里第5行
[root@jinx ~]# awk -F: 'NR==5{print $0}' /etc/passwd
6、范围表达式
通过限制一个范围来筛选符合条件的数据
# 示例:打印出/etc/passwd文件里第五行到第十行的数据
[root@jinx ~]# awk -F: 'NR==5,NR==10{print $0}' /etc/passwd
7、流程控制
只存在于循环中
1、分支流程
if
# 示例:只打印出/etc/passwd文件里行数大于10的数据
[root@jinx ~]# awk -F: '{if (NR > 10){print $0}}' /etc/passwd
语法结构
{if (条件){}}
{if (条件){}else{}}
{if (条件){}else if(条件){}else{}}
2、循环流程
1、for
# 示例:当for循环条件成立时打印/etc/passwd文件中的每一行
[root@jinx ~]# awk -F: '{for(i=1;i < 5; i++){print $0}}' /etc/passwd # /etc/passwd文件中的每一行都循环打印4次
语法结构
{for(i=初始值;条件判断;i递增或者递减){}}
2、while
# 示例1:当while条件成立时打印出/etc/passwd文件里的每一行
[root@jinx ~]# awk -F: '{i=1;while(i<5){print $0,i++}}' /etc/passwd # /etc/passwd文件中的每一行都循环打印4次
# 示例2:对/etc/passwd文件里的内容每隔5行打印一行星星
[root@jinx ~]# awk -F: '{if(NR%5==0){print "* * * * * * * * * * * * * " }print $0}' /etc/passwd