文件管理操做的命令应用及原理
——Linux磁盘管理及文件系统管理
@(Linux磁盘管理,文件系统管理)[磁盘分区管理,inode索引节点,经常使用操做命令, ]node
对于接触过Linux的朋友,对各类文件(目录文件)的建立、复制、移动、重命名和删除等操做必定不陌生,不少人能够作到熟极而流的地步。但是大家知道这些命令运行背后的原理和执行机制吗,知其然不可不知其因此然,今天咱们就来研究一下这些经常使用命令背后的故事。centos
- 一切皆文件 :Linux系统的 根本原则!
[TOC]缓存
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 【注意】一、硬连接不能对目录文件进行,仅能对文件进行; 二、不能跨分区进行;
#####5.2.2 符号连接(软连接) 符号连接(软连接):建立一个文件,文件中存储一串strings,strings的内容是被连接文件的路径;
ln [-sv] SRC... DEST SRC : 将要被连接的原文件 DEST : 连接的文件 -s : symbolic link -v : verbose 【注意】一、符号连接能够对目录文件进行; 二、能够跨分区进行; 三、指向的是另外一个文件的路径,其大小为指向路径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编号不变化。
反馈与建议
-
微博:@我真的是阿初
感谢阅读个人文章,但愿能给你带来一些帮助。