文件管理操作的命令应用及原理
——Linux磁盘管理及文件系统管理
@(Linux磁盘管理,文件系统管理)[磁盘分区管理,inode索引节点,常用操作命令, ]
对于接触过Linux的朋友,对各种文件(目录文件)的创建、复制、移动、重命名和删除等操作一定不陌生,很多人可以做到熟极而流的地步。可是你们知道这些命令运行背后的原理和执行机制吗,知其然不可不知其所以然,今天我们就来研究一下这些常用命令背后的故事。
- 一切皆文件 :Linux系统的 根本原则!
1 常用文件管理类命令的用法
常用文件管理类命令:mkdir , rmdir , touch , cp , mv , rm
1.1 mkdir rmdir touch 创建(目录)文件命令
创建/删除 目录文件:mkdir和rmdir
mkdir [OPTION]… DIRECTORY…
-p : 建立父目录及子目录或文件
-v : verbose,显示创建过程
mrmdir [OPTION]… DIRECTORY…
-p : 删除父目录及子目录或文件
-v :verbose,显示删除过程
touch 修改文件时间戳命令:使用此命令创建空白文件
touch FILE_NAME …
1.2 cp 复制文件(目录)命令
1.2.1 单源文件复制: cp [OPTION]… [-T] SOURCE DEST
单源文件复制特性:
(1)如果DEST路径不存在,则创建以DEST的basename为文件名的文件,并复制源文件的数据流至DEST的basename文件中;
如:
cp /etc/issus /tmp/123
则建立一个指定文件名为123的文件,文件内容和issue相同;
(2)如果DEST存在:
非目录文件;则DEST文件名不变,覆盖DEST文件内容;
如果DEST是目录文件;则现在DEST目录下创建一个与源文件同名的文件,并复制数据流;
1.2.2 多源文件复制,有两种形式
(1) cp [OPTION]… SOURCE… DIRECTORY
(2) cp [OPTION]… -t DIRECTORY SOURCE…
常用选项:
-i : 交互式复制,即覆盖之前提醒用户确认(对于Centos 7是默认选项):
-f :强制覆盖目标文件:
-r|R :递归复制,即复制目录,
-d :复制符号链接文件本身,而非其指向的源文件,即复制快捷方式,不复制源文件:
-a :-dR –preserve=all,archive,用于实现归档;
–preserve(保留)=
mode :权限
ownership :属主和属组
timestamps :时间戳
context :安全标签
xattr :扩展属性
links :符号链接
all :上述所有属性
多源文件复制特性:
(1)如果DEST不存在:命令提示错误;
(2)如果DEST存在:
如果DEST是非目录文件:命令提示错误
如果DEST是目录文件:分别复制每个文件至目录文件中,并保持源文件名;
如:
cp /etc/{issue,fstab} /tmp/
【命令总结】:cp命令在DEST不存在情况下不能创建目录,只会新建同名的文件,文件内容与源文件相同;
1.3 mv 文件(目录)重命名和移动命令:
mv命令:move(rename) files,可重命名或移动文件;语法格式与cp命令相同:
mv移动:
mv [OPTION]… [-T] SOURCE DEST
(1) MV [OPTION]… SOURCE… DIRECTORY
(2) MV [OPTION]… -t DIRECTORY SOURCE…
-i :交互式
-f :force
mv重命名:
cd到DEST文件的同级目录内,
mv oldFILENAME newFILENAME
1.4 rm 删除文件命令
rm [OPTION] {FILE|DIRECTORY}…
-i : interactive,与用户交互,在删除前询问用户确认
-v :verbose,显示删除过程
-d : 删除空白目录文件
-r|R :recursive,递归删除,删除目录及其目录下所有文件(目录)【操作危险,慎用】
-f :force,强制删除【操作危险,慎用】
【注意】:应建立一个文件目录当作回收站,所有不需要的文件不要直接删除,而是 mv 至回收站文件,确定后要 rm 后,在回收站内使用 rm 命令
- 关于这些命令背后的实现机制,这一切都要从存储设备开始讲起。我们将学习硬盘基础知识、分区管理、文件系统管理、数据和元数据、inode索引节点等知识,最后,我们将来讲述文件操作命令的实现机制。
2 Linux磁盘基础知识
计算机的五个组成部分为:控制器、运算器、存储器、输入设备和输出设备。这些林林总总多种多样的设备可以分为 Charactor-Device(字符设备)和 Block-Device(块设备)两种。
Charactor-Device :存取单位为“字符”,常见的 Charactor-Device 比如键盘;
Block-Device :存取单位是“块”,我们今天要讲的磁盘就属于 Block-Device。
2.1 磁盘的接口
存储设备包括机械硬盘、固态硬盘、移动磁盘、U盘、软盘和光盘等等,我们今天讲的磁盘主要是对于机械硬盘的。
磁盘与计算机主板间的接口分为并口和串口两种。
并口:IDE、SCSI
串口:STAT、SAS、USB
2.2 磁盘设备的命名
磁盘接口对应的设备文件名 : /dev/DEV_FILE
IDE : /dev/hd
SCSI,SATA,SAS,USB : /dev/sd
【注意】设备名在centos6以后统一为 :/dev/sd
命名方式:
不同设备:a-z
如:/dev/sda , /dev/sdb , …
同一设备上的不同分区: 1,2…
如:/dev/sda1 , /dev/sda5 , …
2.3 机械式硬盘相关知识
几个专业术语:磁道、柱面、扇区、MBR
track:磁道
当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道(Track)。
cylinder:柱面
在有多个盘片构成的盘组中,由不同盘片的面,但处于同一半径圆的多个磁道组成的一个圆柱面(Cylinder)。
sector:扇区
磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区(Sector)。硬盘的第一个扇区,叫做引导扇区。每个扇区512bytes字节
MBR : Main Boot Record,主引导记录
是位于磁盘最前边的一段引导(Loader)代码。它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。
0磁道0扇区 : 512bytes
MBR :Master Boot Record
前446bytes :存储Boot loader
中64bytes :存储分区表,
每16bytes:标识一个分区,
后2bytes : 存储MBR有效性标识,55AA
3 Linux磁盘分区管理
3.1 磁盘分区概念
即被划分后的硬盘区域,按柱面划分,磁盘分区可做看作是逻辑卷管理前身的一项简单技术。
计算机中存放信息的主要的存储设备就是硬盘,但是硬盘不能直接使用,必须对硬盘进行分割,分割成的一块一块的硬盘区域,这就是磁盘分区。
-
-
3.2 磁盘分区的目的
老旧的文件系统不支持单个分区体积太大的数据空间,所以分区是一种传统。当然分区有很多好处,分区后有利于管理,方便针对不同分区执行不同的操作,且当硬盘的某一部分损坏时,仅仅会影响对应的分区,其余分区数据不会受到影响,可继续使用。针对不同的分区内存放数据的类型,可定制不同需求,如定制数据存储格式、定制是否只读,可节省空间或加快数据存取速度。
MBR的中间64bits对应储存分区表,每16bytes标识一个分区,因此一个磁盘最多有4个主分区,为了实现扩展功能,所以一块硬盘最多3个主分区和一个扩展分区,在扩展分区上可以划分多个逻辑分区,逻辑分区的编号从5开始。
在传统的磁盘管理中,将一个硬盘分为两大类分区:主分区和扩展分区。主分区是能够安装操作系统,能够进行计算机启动的分区,这样的分区可以直接格式化,然后安装系统,直接存放文件。
3.3 磁盘分区的步骤
3.3.1 fdisk 磁盘分区命令
仅对于一块硬盘来讲,最多只能管理15个分区;
fdisk -l [-u] [device…]
fdisk device子命令:管理功能
p : print ,显示已有分区;
n : new , 创建;
d : delete , 删除
w : write , 写入磁盘并退出;
q : quit , 放弃更新并退出;
m : 获取帮助
l : 列出所有分区id
t : 调整分区id
一般Linux用到的分区格式编号为:
5 :Extended
82 :Linux swap / Solaris
83 :Linux
8e :Linux LVM
3.3.2 查看内核是否已经识别新的分区
cat /proc/partitions
若无新加的分区,则代表内核未识别该分区;
3.3.3 通知内核重新读取硬盘分区表
CentOS6.X 或者 CentOS7.X 可执行下列命令:
partx -a /dev/DEVICE
-n M:N : 代表识别M到N间的分区;
【注】该命令可能要反复用多次才能全部识别新分区;
kpartx -a /dev/DEVICE
-f : force 【慎用】
CentOS5.X 可使用:partprobe
partprobe /dev/DEVICE
4 Linux文件系统管理
4.1 文件系统的概念
文件系统是指在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,文件系统是对文件存储设备的空间进行组织和分配,明确磁盘或分区上的文件的方法和数据结构,也指文件系统种类。文件系统还包括通过目录结构找到文件的指定路径的格式(FHS)。
大部分程序基于文件系统进行操作,在不适用的文件系统上不能工作。一个分区或磁盘在作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘上。这个过程就叫建立文件系统。
4.2 文件系统的分类
4.2.1 按照平台架构及应用环境划分
Linux文件系统:ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,swap
交换分区 : swap
光盘:iso9660
Windows :fat32,ntfs
Unix : FFS,UFS,JFS2
网络文件系统:NFS,CIFS
集群文件系统:GFS2,OCFS2
分布式文件系统:ceph,moosefs,mogilefs,GlusterFS,Lustre
Linux的虚拟文件系统:VFS
4.2.2 根据其是否支持”journal”(日志)功能,将文件系统划分成
日志型文件系统:ext3,ext4,xfs,…
非日志型文件系统:ext2,vfat
4.3 文件系统的组成
内核中的模块: ext4,xfs,vfat
用户空间的管理工具:mkfs.ext4 , mkfs.xfs ,mkfs.vfat
4.4 创建文件系统
4.4.1 mkfs命令:适用于ext4 ,xfs,btrfs,vfat等系统
mkfs.FS_TYPE /dev/DEVICE
-f : 强制修改文件系统
-L DEV_NAME : 命名卷标
mkfs -t FS_type /dev/DEVICE
-f : 强制修改文件系统
-L LABEL : 命名卷标
4.4.2 mke2fs命令: ext2,ext3,ext4 类文件系统专用管理工具
不支持xfs等其他文件系统
mke2fs [OPTION] /dev/DEVICE
-t {ext2|wxt3|ext4} : 指明系统类型
-b {1024|2048|4096} : 指明块大小
-L LABEL : 指明卷标
-j : journal ,指定为日志型,相当于 -t ext3
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i # : 为数据空间中每多少个字节创建一个inode编号;#大小不应该小于block的大小;
-N # : 为数据空间创建#个inode编号;
-m # : 为管理人员预留的空间百分比,为避免由于磁盘空间耗尽而无法进行管理操作,#默认为5,代表预留5%的空间;
-O FEATURE[,…] :创建分区时,指明分区特性;
-O FEATURE[,…] : 启用指定特性
-O ^FEATURE[,…]: 关闭指定特性
4.4.3 块设备属性信息查看 : blkid
~]# blkid
命令结果显示内容:DEVICE:UUID TYPE
blkid [OPTION]… [DEVICE]
-U UUID : 根据指定的UUID来查找指定的设备
-L LBAEL : 查找指定LABEL的设备
4.4.4 文件系统检测及修复:当文件系统可能受到损坏时,进行磁盘检查及修复
fsck : File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
-a : 自动修复错误
-r : 交互式修复错误
【注意】 FS_TYPE一定要与分区上已有的文件系统类型相匹配
e2fsck : ext系列文件系统专用的检测修复工具
-y : 自动回答为yes
-f :强制修复
5 索引节点和链接文件
5.1 inode : Index Node , 索引节点
5.1.1 索引式文件系统
根据inode编号查找所有存放文件内容的块。
inode bitmap :inode位图,和块位图类似,本身占一个块,对位标识每个inode空闲与否的状态信息;
inode table :inode表,存储文件对应的metadata(元数据)信息,每个文件都有一个inode,一个块组中的所有inode组成了inode表。
【notes】:当存储设备初始格式化时,inode编号的总量就已经确定了,当 小文件数量过多时,就会出现磁盘空间未满,却取法写入数据这种情况,原因就是inode编号已经被划分完毕,所以在分配inode数量时应根据所存储数据的特性来配置inode相关内容。
5.2 链接文件
5.2.1 硬链接
硬链接:指向同一个inode的多个不同路径,创建文件的硬链接即为为inode创建新的引用路径,因此会增加其引用计数;
ln [OPTION]… SRC… DEST
SRC : 将要被链接的原文件
DEST : 链接的文件
如:给/etc/fstab 文件创建一个硬链接文件 /etc/fstab.hardlink
~]# ln /etc/fstab /etc/fstab.hardlink
【注意】1、硬链接不能对目录文件进行,仅能对文件进行;
2、不能跨分区进行;
5.2.2 符号链接(软链接)
符号链接(软链接):创建一个文件,文件中存储一串strings,strings的内容是被链接文件的路径;
ln [-sv] SRC… DEST
SRC : 将要被链接的原文件
DEST : 链接的文件
-s : symbolic link
-v : verbose
【注意】1、符号链接可以对目录文件进行;
2、可以跨分区进行;
3、指向的是另一个文件的路径,其大小为指向路径strings的长度,不增加或减少原文件inode的引用计数。
6 Linux文件操作类命令的实现机制
6.1 创建(目录)文件实现机制
查找inode表中的空闲inode并分派给新文件,查找目标分区磁盘super-block中的空闲block并分配给新文件,将文件名称和inode编号等元数据添加至【上一级目录文件所对应的磁盘块数据】中。
6.2 删除操作实现机制
即为减少其引用计数,直到减少到0为止,其实际数据并未删除,只是没有引用该数据的路径而已。
恢复删除数据:
根据缓存等蛛丝马迹找到指向已删除数据的路径。粉碎文件:可保护想销毁的数据
即执行删除操作后对存储原删除数据的磁盘的块写入其他内容覆盖。
6.3 复制的实现机制
在目标目录下创建新空文件,并生成一个新的inode编号,然后把源文件的数据复制过去,将新的inode指向新的数据形成链接。
6.4 文件移动实现机制
5.41 跨分区实现机制
将【原文件的名称和对应磁盘块数据的inode编号】从【原路径上一级目录文件所对应的磁盘块数据】中删除,原文件的inode引用次数减少至0,在【目标分区目标路径的上一级目录文件所对应的磁盘块数据】中,执行创建新文件操作并在新分区的对应路径写入原文件数据并将原文件执行删除,此过程中inode编号不变化;
5.42 同分区移动实现机制
将【原文件的名称和对应磁盘块数据的inode编号】从【原路径上一级目录文件所对应的磁盘块数据】移动至【目标目录文件所对应的磁盘块数据】中,原文件inode引用次数减少至0,此过程中inode编号不变化。
反馈与建议
微博:@我真的是阿初
感谢阅读我的文章,希望能给你带来一些帮助。