当全新安装了一块新的硬盘设备后,为了更充分、安全的利用硬盘空间首先要进行磁盘的分区,然后格式化,最后挂载使用。
添加设备->分区->格式化(创建文件系统)-> [起名]->修改配置文件->创建一个挂载点->挂载
fdisk命令用于管理磁盘分区,格式为:
“fdisk [磁盘名称]”
。管理某硬盘的分区:“fdisk /dev/sda”
m
:查看全部可用的参数n
:添加新的分区d
:删除某个分区信息l
:列出所有可用的分区类型t
:改变某个分区的类型p
:查看分区表信息w
:保存并退出q
:不保存直接退出[root@localhost ~]# fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x7516baf3. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help):
p
查看分区表信息(当前为空):Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x7516baf3 Device Boot Start End Blocks Id System
n
创建新的分区信息:Command (m for help): n
p
,这个p
代表是主分区,e
为扩展分区:Command action e extended p primary partition (1-4) p
1
代表分区编号为1
:Partition number (1-4): 1
First cylinder (1-2610, default 1):
+2G
,代表该分区的大小为2G
:Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +2G
Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x7516baf3 Device Boot Start End Blocks Id System /dev/sdb1 1 262 2104483+ 83 Linux
w
,将上述分区信息保存:Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@localhost ~]#
[root@localhost ~]# partprobe
在Linux系统中用于格式化的命令是mkfs,它支持的文件类型有:
cramfs,ext2,ext3,ext4,fat,msdos,xfs,btrfs,minix,vfat
"mkfs.文件类型名称"
,例如要格式分区为ext4,则命令为"mkfs.ext4 硬盘分区名称"
。[root@localhost ~]# mkfs.ext4 /dev/sdb1 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 131648 inodes, 526120 blocks 26306 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=541065216 17 block groups 32768 blocks per group, 32768 fragments per group 7744 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 37 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost ~]# mkdir /web [root@localhost ~]# mount /dev/sdb1 /web/
[root@localhost ~]# vim /etc/fstab /dev/sdb1 /web ext4 defaults 0 0 要挂载的分区 挂载点 文件系统类型 挂载选项 是否备份 是否检测
第一个0:fs_dump 是否要使用dump命令进行备份. 0为不备份,1为要备份 。
第二个0:fs_pass – 该字段被fsck命令用来决定在启动时是否需要被扫描的文件系统的顺序,根文件系统/对应该字段的值应该为1,其他文件系统应该为2。若该文件系统无需在启动 时扫描则设置该字段为0
UID是一个标识你系统中的存储设备的字符串,其目的是帮助使用者唯一的确定系统中的所有存储设备,不管它们是什么类型的。它可以标识DVD驱动器,USB存储设备以及你系统中的硬盘设备等。
“umount [挂载点/设备文件]”
。[root@localhost ~]# umount /dev/sdb1
它是真正的唯一标志符
Linux中的许多关键功能现在开始依赖于UUID
可以通过 blkid 命令获取各分区的UUID
root@localhost ~]# blkid | grep sdb1 /dev/sdb1: LABEL="cc" UUID="11e9fc80-cd17-46fa-b0ff-0e5bdc2fd133" TYPE="ext4" [root@localhost ~]# tune2fs -l /dev/sdb1 | grep UUID Filesystem UUID: 11e9fc80-cd17-46fa-b0ff-0e5bdc2fd133
通常我们用的比较多的一般都是fdisk工具来进行分区,但是现在由于磁盘越来越廉价,而且磁盘空间越来越大;而fdisk工具他对分区是有大小限制的,它只能划分小于2T的磁盘。但是现在的磁盘空间很多都已经是远远大于2T了,甚至达到2.5T和3T,那要怎么办能,有两个方法,其一是通过卷管理来实现,其二就是通过我们今天谈到的Parted工具来实现对GPT磁盘进行分区操作。
“df [选项] [文件]”
。“df -h”
参数作用
-a
: 显示出所有的文件系统(包括虚拟的)--total
: 展出出总体使用量-h
:更易读的容量格式如1K,234M,2G…-i
:展示出Inode的信息(默认是磁盘使用信息)-T
:显示出文件系统的类型[root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg0-root 20G 333M 19G 2% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 190M 34M 147M 19% /boot /dev/mapper/vg0-usr 9.8G 1.9G 7.4G 21% /usr /dev/mapper/vg0-var 20G 113M 19G 1% /var /dev/sdb1 2.0G 3.1M 1.9G 1% /web
“ du [选项] [文件]”
。查看根目录的总占用空间:
du -sh /
查看当前目录下各文件所占空间:
du -sh *
-a
: 评估每个文件而非目录整体占用量。-c
:评估每个文件并计算出总占用量总和。-h
:更易读的容量格式如1K,234M,2G…-s
:仅显示占用量总和。查看到该挂载目录的占用硬盘量:
[root@localhost ~]# du -sh /web/ 20K /web/
[root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 1024M 0 rom sda 8:0 0 80G 0 disk ├─sda1 8:1 0 200M 0 part /boot └─sda2 8:2 0 60G 0 part ├─vg0-root (dm-0) 253:0 0 20G 0 lvm / ├─vg0-swap (dm-1) 253:1 0 2G 0 lvm [SWAP] ├─vg0-usr (dm-2) 253:2 0 10G 0 lvm /usr └─vg0-var (dm-3) 253:3 0 20G 0 lvm /var sdb 8:16 0 20G 0 disk ├─sdb1 8:17 0 1.9G 0 part └─sdb2 8:18 0 1.9G 0 part
[root@localhost ~]# blkid /dev/sda1: UUID="a4acde25-491e-425e-9a3c-3ccc995ee4c4" TYPE="ext4" /dev/sda2: UUID="qivYdT-3t0K-JdU2-1afU-lZGG-NvNt-22lYE1" TYPE="LVM2_member" /dev/mapper/vg0-root: UUID="e5ea11e5-157f-42b2-aba1-d92ff6002af3" TYPE="ext4" /dev/mapper/vg0-swap: UUID="c30b0464-2b30-45ca-ac65-79baa79af17b" TYPE="swap" /dev/mapper/vg0-usr: UUID="16ebdfae-1ddd-4841-9415-ea105add7857" TYPE="ext4" /dev/mapper/vg0-var: UUID="6d6cc476-2c4f-40a9-9e8b-b9c1f90c6fe4" TYPE="ext4"
1、关机 2、添加硬盘 3、创建分区 fdisk /dev/sdb 或 gdisk /dev/sdb 4、格式化文件系统 mkfs.xfs /dev/sdb1 5、挂载 mount /dev/sdb1 /mnt
awk是一个报告生成器,它拥有强大的文本格式化的能力
grep 、sed、awk被称为linux中的"三剑客"。 我们总结一下这三个"剑客"的特长。 grep 更适合单纯的查找或匹配文本 sed 更适合编辑匹配到的文本 awk 更适合格式化文本,对文本进行较复杂格式处理
awk [参数] [处理规则] [操作对象] awk [options] 'Pattern{Action}' file # 对于上述语法中的program来说,又可以细分成pattern和action,也就是说,awk的 基本语法如下 awk [options] 'Pattern{Action}' file # 从字面上理解 ,action指的就是动作,awk擅长文本格式化,并且将格式化以后的文 本输出,所以awk最常用的动作就是print和printf,因为awk要把格式化完成后的文 本输出啊,所以,这两个动作最常用。 # 我们先从最简单用法开始了解awk,我们先不使用[options] ,也不指定pattern,直 接使用最简单的action,从而开始认识awk,示例如下
# 上图中的示例没有使用到options和pattern,上图中的awk '{print $5}',表示输 出df的信息的第5列,$5表示将当前行按照分隔符分割后的第5列,不指定分隔符时,默认使用空格作为分隔符,细心的你一定发现了,上述信息用的空格不止有一个,而是有连续多个空格,awk自动将连续的空格理解为一个分割符了,是不是比cut命令要简单很多,这样比较简单的例子,有利于我们开始了解awk。 awk是逐行处理的,逐行处理的意思就是说,当awk处理一个文本时,会一行一行进行处理,处理完当前行,再处理下一行,awk默认以"换行符"为标记,识别每一行,也就是说,awk跟我们人类一样,每次遇到"回车换行",就认为是当前行的结束,新的一行的开始,awk会按照用户指定的分割符去分割当前行,如果没有指定分割符,默认使用空格作为分隔符。
注意,$NF 和 NF 要表达的意思是不一样的,对于awk来说,$NF表示最后一个字段,NF表示当前行被分隔符切开以后,一共有几个字段。 也就是说,假如一行文本被空格分成了7段,那么NF的值就是7,$NF的值就是$7, 而$7表示当前行的第7个字段,也就是最后一列,那么每行的倒数第二列可以写为$(NF-1)。
# 而且我们说过awk是逐行处理的, 刚才已经说过了最常用的Action:print AWK 包含两种特殊的模式:BEGIN 和 END。 BEGIN 模式指定了处理文本之前需要执行的操作: END 模式指定了处理完所有行之后所需要执行的操作:
经过实验发现,还真是,我们并没有给定任何输入来源,awk就直接输出信息了,因为,BEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作,而上述示例没有给定任何输入源,但是awk还是会先执行BEGIN模式指定的"打印"动作,打印完成后,发现并没有文本可以处理,于是就只完成了"打印 aaa bbb"的操作
上图中,蓝色标注的部分表示BEGIN模式指定的动作,这部分动作需要在处理指定的文本之前执行,所以,上图中先打印出了"aaa bbb",当BEGIN模式对应的动作完成后,在使用后面的动作处理对应的文本,即打印a.txt文件中的第一列与第二列,这样解释应该比较清楚了吧。
1、参数 -F : 指定文本分隔符(默认是以空格作为分隔符) awk -F'f' '{print $NF}' 9.txt 案例:打印系统所有用户的解析器 awk -F: '{print $NF}' /etc/passwd 2、awk的生命周期 grep、sed和awk都是读一行处理一行,直至处理完成。 1、接收一行作为输入 2、把刚刚读入进来得到文本进行分解 3、使用处理规则处理文本 4、输入一行,赋值给$0,直至处理完成 5、把处理完成之后的所有的数据交给END{}来再次处理 3、awk中的预定义变量 $0 : 代表当前行 [root@localhost ~]# awk -F: '{print $0, "---"}' /etc/passwd $n :代表第n列 [root@localhost ~]# awk -F: '{print $1}' /etc/passwd NF :记录当前行的字段数 [root@localhost ~]# awk -F: '{print NF}' /etc/passwd [root@localhost ~]# awk -F: '{print $NF}' /etc/passwd NR :用来记录行号 [root@localhost ~]# awk -F: '{print NR}' /etc/passwd FS :指定文本内容分隔符(默认是空格) [root@localhost ~]# awk 'BEGIN{FS=":"}{print $NF, $1}' /etc/passwd FS 的优先级要高于 -F OFS :指定打印分隔符(默认空格) [root@localhost ~]# awk -F: 'BEGIN{OFS=" >>> "}{print $NF, $1}' /etc/passwd 4、awk处理规则的执行流程 BEGIN{} // {} END{} 5、awk中的函数 print : 打印 printf :格式化打印 %s : 字符串 %d :数字 - :左对齐 + :右对齐 15 : 至少占用15字符 [root@localhost ~]# awk -F: 'BEGIN{OFS=" | "}{printf "|%+15s|%-15s|\n", $NF,$1}' /etc/passwd 6、awk中的定位 1、正则表达式 [root@localhost ~]# awk -F: '/root/{print $0}' /etc/passwd [root@localhost ~]# awk -F: '/^root/{print $0}' /etc/passwd 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
只存在循环之中。 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