磁盘管理
Linux系统中磁盘管理就是将硬盘通过挂载的方式挂载到linux文件系统中。
1、挂载磁盘的步骤
1、磁盘分区
2、挂载
2、磁盘分区
fdisk:分区2TB以下的磁盘,最多可以分4个分区
[root@test-10.4 ~]# yum install gdisk -y
gdisk:分区2TB以上的磁盘,最多可以分128个分区
3、添加一块磁盘
lsblk : 查看本机的磁盘
df -h : 查看本机的分区
[root@test-10.4 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part /
sdb 8:16 0 200G 0 disk
sr0 11:0 1 4.3G 0 rom
[root@test-10.4 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 19G 1.5G 18G 8% /
devtmpfs 900M 0 900M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.6M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda1 1014M 138M 877M 14% /boot
tmpfs 182M 0 182M 0% /run/user/0
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
[root@test-10.4 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xa0b907c6 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xa0b907c6
设备 Boot Start End Blocks Id System
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+1G
分区 1 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xa0b907c6
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@test-10.4 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part /
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 1G 0 part
sr0 11:0 1 4.3G 0 rom
[root@test-10.4 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xa0b907c6
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分区号 (2-4,默认 2):
起始 扇区 (2099200-41943039,默认为 2099200):+2G
Last 扇区, +扇区 or +size{K,M,G} (4194304-41943039,默认为 41943039):
将使用默认值 41943039
分区 2 已设置为 Linux 类型,大小设为 18 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@test-10.4 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part /
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 18G 0 part
sr0 11:0 1 4.3G 0 rom
***************************************************
[root@test-10.4 ~]# mount /dev/sdb1 /mnt/
mount: /dev/sdb1 写保护,将以只读方式挂载
mount: 未知的文件系统类型“(null)”
[root@test-10.4 ~]# mkf
mkfifo mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.xfs
mkfs mkfs.cramfs mkfs.ext3 mkfs.minix
[root@test-10.4 ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=262144, 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
***************************************************
[root@test-10.4 ~]# fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x8d34f978 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):^C
[root@test-10.4 ~]# gdisk /dev/sdc
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
Command (? for help): /^H
b back up GPT data to a file
c change a partition's name
d delete a partition
i show detailed information on a partition
l list known partition types
n add a new partition
o create a new empty GUID partition table (GPT)
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit
x extra functionality (experts only)
? print this menu
Command (? for help): ?
b back up GPT data to a file
c change a partition's name
d delete a partition
i show detailed information on a partition
l list known partition types
n add a new partition
o create a new empty GUID partition table (GPT)
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit
x extra functionality (experts only)
? print this menu
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: 1G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): p
Disk /dev/sdc: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): A27C37AB-C8B2-4CE3-B245-0ED32F7A685D
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 39847868 sectors (19.0 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 2097152 1023.0 MiB 8300 Linux filesystem
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.
awk
awk主要是用来格式化文本。
1、awk的语法
awk [参数] [处理规则] [操作对象]
[root@test-10.4 ~]# cat Ttnizi.txt
Hello Ttnizi
dg gsj hufuua
dfht rjc poqwh
ghjcg
[root@test-10.4 ~]# awk '{print $NR}' Ttnizi.txt
Hello
gsj
poqwh
[root@test-10.4 ~]# awk '{print $NF}' Ttnizi.txt
Ttnizi
hufuua
poqwh
ghjcg
2、参数
-F : 指定文本分隔符(默认是以空格作为分隔符)
awk -F'f' '{print $NF}' Ttnizi.txt
[root@test-10.4 ~]# cat Ttnizi.txt
Hello Ttnizi
dg gsj hufuua
[root@test-10.4 ~]# awk -F'f' '{print $NF}' Ttnizi.txt
Hello Ttnizi
uua
案例:打印系统所有用户的解析器
awk -F: '{print $NF}' /etc/passwd
[root@test-10.4 ~]# cat /etc/passwd
nginx:x:998:996:nginx user:/var/cache/nginx:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root@test-10.4 ~]# awk -F: '{print $NF}' /etc/passwd
/sbin/nologin
/sbin/nologin
3、awk的生命周期
grep、sed和awk都是读一行处理一行,直至处理完成。
1、接收一行作为输入
2、把刚刚读入进来得到文本进行分解
3、使用处理规则处理文本
4、输入一行,赋值给$0,直至处理完成
5、把处理完成之后的所有的数据交给END{}来再次处理
4、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 ---
$n :代表第n列
[root@test-10.4 ~]# awk -F: '{print $1}' /etc/passwd
root
bin
NF :记录当前行的字段数
[root@localhost ~]# awk -F: '{print NF}' /etc/passwd
7
7
[root@localhost ~]# awk -F: '{print $NF}' /etc/passwd
/bin/bash
/sbin/nologin
NR :用来记录行号
[root@localhost ~]# awk -F: '{print NR}' /etc/passwd
1
2
3
FS :指定文本内容分隔符(默认是空格)
[root@localhost ~]# awk 'BEGIN{FS=":"}{print $NF, $1}' /etc/passwd
/bin/bash root
/sbin/nologin bin
FS 的优先级要高于 -F
OFS :指定打印分隔符(默认空格)
[root@localhost ~]# awk -F: 'BEGIN{OFS=" >>> "}{print $NF, $1}' /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
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
| /bin/bash|root |
| /sbin/nologin|bin |
7、awk中的定位
1、正则表达式
[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:x:0:0:root:/root:/bin/bash
2、比较表达式
>
<
>=
<=
~ 正则匹配
!~ 正则匹配(取反)
案例:要求打印属组ID大于属主ID的行
[root@localhost ~]# awk -F: '$4 > $3{print $0}' /etc/passwd
案例:结尾包含bash
[root@localhost ~]# awk -F: '$NF ~ /bash/{print $0}' /etc/passwd
案例:结尾不包含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
[root@localhost ~]# awk -F: '!($3 + $4 > 2000){print $0}' /etc/passwd
4、算术表达式
+
-
*
/
%
案例:要求属组 + 属主的ID 大于 2000
[root@localhost ~]# awk -F: '$3 + $4 > 2000{print $0}' /etc/passwd
案例:要求属组 * 属主的ID 大于 2000
[root@localhost ~]# awk -F: '$3 * $4 > 2000{print $0}' /etc/passwd
案例:要求打印偶数行
[root@localhost ~]# awk -F: 'NR % 2 == 0{print $0}' /etc/passwd
案例:要求打印奇数行
[root@localhost ~]# awk -F: 'NR % 2 == 1{print $0}' /etc/passwd
5、条件表达式
==
>
<
>=
<=
案例:要求打印第三行
[root@localhost ~]# awk -F: 'NR == 3{print $0}' /etc/passwd
6、范围表达式
[root@localhost ~]# awk -F: '/^root/,/^ftp/{print $0}' /etc/passwd
8、流程控制
只存在循环之中。
if
[root@localhost ~]# awk -F: '{if($3>$4){print "大于"}else{print "小于或等于"}}' /etc/passwd
if(){}
if(){}else{}
if(){}else if(){}else{}
for
[root@localhost ~]# awk -F: '{for(i=10;i>0;i--){print $0}}' /etc/passwd
for(i="初始值";条件判断;游标){}
while
[root@localhost ~]# awk -F: '{i=1; while(i<10){print $0, i++}}' /etc/passwd
while(条件判断){}
每隔5行,打印一行横线
-------------------------------------------------------------------------
[root@localhost ~]# awk -F: '{if(NR%5==0){print "----------------"}print $0}' /etc/passwd