定义
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。
文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
file = data +metadata
Metadata: 元数据 描述文件属性等信息
Data: 数据 文件本身的信息
分类
根据系统分类
Linux文件系统:est2/3/4,xfs,btrfs,resiserfs,jfs swap:交换分区 光盘:iso9960
windows:fat32 ,mtfs
unix:FFS,UFS,JFS2
网络文件系统:nfs,cifs
集群文件系统:GFS2,OFS2
分布式文件系统:ceph,MooseFS,mogilefs,GusterFS,LustreFS
根据是否提供‘journal’功能
日志型文件系统:ext3/4,xfs……
非日志型文件系统:ext2,vfat
组成部分
内核中的模块:ext4,xfs,vfat
用户空间的管理工具:mkfs,ext4,xfs,mkswap
Linux文件系统的构成
• /usr/bin、/bin : -------------存放所有用户可以执行的命令• /usr/sbin、/sbin : -----------存放只有root可以执行的命令• /home :--------------------用户缺省宿主目录• /proc :---------------------虚拟文件系统,存放当前内存镜像• /dev :----------------------存放设备文件• /lib :-----------------------存放系统程序运行所需的共享库• /lost+foud :---------------存放一些系统出错的检查结果• /tmp :---------------------存放临时文件• /etc :-----------------------系统配置文件• /var :----------------------包含经常发生变动的文件,如:邮件、日志文件、计划任务等• /usr :----------------------存放所有命令、库、手册页等 类似于windows C盘下的WINDOWS目录• /mnt :----------------------临时文件系统的安装点• /boot :---------------------内核文件及自举程序文件保存位置
Linux系统及分区
Linux下所有文件和目录都存放在一个分区中。
Linux系统中每一个硬件设备(eg:硬盘、内存等)都映射到系统的一个文件。
IDE接口设备在Linux系统中映射的文件以hd为前缀,SCSI,SATA,SAS等设备映射的文件以sd为前缀。
具体的文件命名规则以英文字母排序的,eg:设备中的第一个IDE设备为hda,第二个IDE设备为hdb
IDE、SATA、SCSI的区别
IDE
IDE的英文全称为“Integrated Drive Electronics”,即“电子集成驱动器”,它的本意是指把“硬盘控制器”与“盘体”集成在一起的硬盘驱动器 。这种类型的接口随着接口技术的发展已经被淘汰了,而其后发展分支出更多类型的硬盘接口,比如ATA、Ultra ATA、DMA、Ultra DMA等接口都属于IDE硬盘。
多类型的硬盘接口,
比如ATA、Ultra ATA、DMA、Ultra DMA等接口都属于IDE硬盘。
SATA
SATA的全称是Serial Advanced Technology Attachment,是 由Intel、IBM、Dell、APT、Maxtor和Seagate公司共同提出的硬盘接口规范 。ATA规范将硬盘的外部传输速率理论值提高到了150MB/s。SATA的优势:支持热插拔 ,传输速度快,执行效率高。
SCSI
Small Computer System Interface,小型计算机系统接口,其速度、性能和稳定性都比IDE要好,价格当然也要贵得多,主要面向服务器和工作站市场
两种分区
对于同一块硬盘,又可以有不同的分区,分区的划分以数字命名,如:sdb1,sdb2,sdb3。
分区的方式有:MBR分区和GPT分区
MBR分区
主引导记录,是IBM公司早年间提出的
使用32位标识扇区数
它是存在于磁盘驱动器开始部分的一个特殊的启动扇区。整个扇区包含了已安装的操作系统系统信息,并用一小段代码来启动系统。
linux系统中的MBR通常会是GRUB加载器。
当一台电脑启动时,它会先启动主板自带的BIOS系统,bios加载MBR,MBR再启动windos,这就是MBR的过程
MBR格式的磁盘分区主要分为基本分区(primary partion)和扩展分区(extension partion)
两种主分区和扩展分区下的逻辑分区。
主分区总数不能大于4个,其中最多只能有一个扩展分区。且基本分区可以马上被挂载使用但不能再分区,扩展分区必须再进行二次分区后才能挂载。
扩展分区下的二次分区被称之为逻辑分区,逻辑分区数量限制视磁盘类型而定。
GPT分区
GUID Partition Table,即全局唯一标识磁盘分区表
使用uuid去标识磁盘和分区
是另外一种更加先进新颖的磁盘组织方式,一种使用UEFI启动的磁盘组织方式。
支持的最大磁盘可达18EB,它没有主分区和逻辑分区之分,每个硬盘最多可以有128个分区,具有更强的健壮性与更大的兼容性
GPT分区的命名和MBR类似,只不过没有主分区、扩展分区和逻辑分区之分,分区号直接从1开始累加一直到128
两者之间的区别
因为兼容问题,gpt其实在引导的最开始部分也有一段MBR引导,也叫做“保护引导”,为了防止设备不支持UEFI
1.MBR最多支持2T,而GPT理论上是无限制的
2.MBR最多支持4个主分区,GPT没有限制。如果你想跑多系统,MBR最多4个而GPT没有限制
3.win7 只使用MBR分区,从win8开始微软建议你使用GPT
4.GPT是由UEFI启动的,而UEFI是后来才提出的概念,兼容性和稳定性不如BIOS+MBR
UUID
UUID是一个标识你系统中的存储设备的字符串,其目的是帮助使用者唯一的确定系统中的所有存储设备,不管它们是什么类型的。它可以标识DVD驱动器,USB存储设备以及你系统中的硬盘设备等
使用UUID的原因?
1.UUID是真正的唯一标志符
2.设备名并非总是不变的
3.ubuntu中的许多关键功能现在开始依赖于UUID
blkid
获取文件系统类型 UUID
device:获取指定设备的
-s LABEL :查看系统中的label
-s UUID:查看系统中的UUID
[root@node1 ~]# blkid/dev/sdb: UUID="c49ce8b8-bdec-48eb-acb3-863513371bb4" TYPE="swap"/dev/sda2: UUID="29e32837-f7cf-488e-9dcb-59bd5223f3d0" TYPE="xfs" PARTUUID="e6d958dd-ae77-46bd-88d8-b5868ffd692c"/dev/sda3: UUID="xKYfx7-kzYM-NQMh-GWXa-2mC0-eUVo-9Q144A" TYPE="LVM2_member" PARTUUID="c960ac9f-5c50-4c75-a80f-e9ffae8d75d5"/dev/sr0: UUID="2018-11-25-21-21-31-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"/dev/mapper/centos-root: UUID="b54ce170-9f27-4822-9492-a05d533b727c" TYPE="xfs"/dev/mapper/centos-swap: UUID="f79315bc-2105-45a4-800c-4618cc13ca5c" TYPE="swap"/dev/sdc1: UUID="16e57ad3-3be6-4d1f-a8a7-bd880d3c9499" SEC_TYPE="ext2" TYPE="ext3" PARTLABEL="xfs" PARTUUID="7ec19c81-04e4-4be3-8b24-26f81c604d7c"/dev/sda1: PARTUUID="d7e230f0-7d0b-44f7-93c4-ffc2eb611ece"/dev/sda6: PARTUUID="f0cca532-942b-423d-b125-40eb78c1f3e3"
查看分区信息 df -h
[root@localhost ~]# df -hFilesystem Size Used Avail Use% Mounted onFilesystem 容量 已用 可用 已用% 挂载点
Linux文件管理
Linux把所有文件和设备都当作文件来管理,这些文件都在根目录下,同时Linux中的文件名区分字母的大小写。
文件名
- 严格区分大小写
- 可以使用任意字符(/),并且避免使用特殊字符
- 不要超过255个字符
- 以 .开头的文件(隐藏文件)
文件的类型 8种
普通文件类型:[-] eg:常见的脚本等文本文件和常用软件的配置文件,可执行的二进制文件
目录文件类型:[d]
块文件类型:[b] 块设备访问每次以块为单位,eg:512字节或1024字节等。块设备可随机读取,eg:硬盘、光盘等属于此类。
字符设备文件类型:[c] 字设备文件每次访问以字节为单位,不可随机读取,eg:常用的键盘就属于此类
套接字文件类型:[s] 程序见可通过套接字进行网络数据通信
管道文件类型:[p] 管道是Linux系统中一种进程通信的机制。生产者写数据到管道中,消费者可以通过进程读取数据
-
查看文件类型的三种方法
ls
| 参数 | 说明 | | —- | —- | | -a | 可以看到全部文件(包括隐藏文件) | | -ll /-l | 列表目录内容的细节,包括权限(模式)、所有者、群组、大小、创建日期、文件是否到系统其他地方的链接 | | -d | 查看当前文件夹的属性 | | -F | 在每一个列举项目之后添加一个符号
/表明是一个目录
@表明是到其他文件的符号链接
*表明到其他文件的符号链接 | | -f | 对输出的文件不进行排序。
对-aU选项生效,对-lst选项失效 | | -r | 逆序(reverse) 从后向前地列举目录中的内容 | | -R | 递归(recursive) 递归地列举所有目录(在当前目录之下的 | | -S | 大小(size) 按文件大小排序 | | -color | 对输出着色,当可以是“never”、“auto”或“always” | | -AsSh | 显示所有文件的大小
[root@tenor ~]# ls -AsSh
total 48K
4.0K .cache 4.0K .ssh 4.0K .tcshrc 0 1.txt
4.0K .config 4.0K .bash_history 4.0K .cshrc 0 .viminfo
4.0K home 4.0K .bash_profile 4.0K .pydistutils.cfg
4.0K .pip 4.0K .bashrc 4.0K .bash_logout | | -dl +[目录名] | 查看某一个目录的完整属性,而不是显示目录里面的文件属性
[root@tenor ~]# ls -dl home
drwxr-xr-x 2 root root 4096 Feb 8 18:41 home |
[root@lhuan ~]# ll 1.txt-rw-r--r-- 1 root root 54 May 26 22:41 1.txt
第一列:文件的类型第二列:文件的权限文件所有者权限,文件所属的用户组权限,其他用户权限第三列:硬链接的个数第四列:文件所有者,就是文件属于哪个用户第五列:文件所属的组第六列:文件的大小,通过选项h可以显示为可读格式,eg:K/M/G等第七列:文件的修改时间第八列:文件名或者目录名
file
| 参数 | 说明 |
|---|---|
| -b | 列出辨识结果,不显示文件名称 |
| -c | 详细显示指令执行过程,便于排错或分序程序执行的情形 |
stat
用于显示inode内容
[root@lhuan ~]# stat 1.txtFile: ‘1.txt’Size: 54 Blocks: 8 IO Block: 4096 regular fileDevice: fd01h/64769d Inode: 393892 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)Access: 2020-10-06 07:48:59.460800385 +0800Modify: 2020-05-26 22:41:44.708930028 +0800Change: 2020-05-26 22:41:44.714930023 +0800Birth: -
inode
日常在硬盘需要保存的数据实在太多了,因此 Linux 系统中有一个名为 super block 的“硬盘地图”。Linux 并不是把文件内容直接写入到这个“硬盘地图”里面,而是在里面记录着整个文件系统的信息。因为如果把所有的文件内容都写入到这里面,它的体积将变得非常大,而且文件内容的查询与写入速度也会变得很慢。
Linux 只是把每个文件的权限与属性记录在inode 中,而且每个文件占用一个独立的 inode 表格,该表格的大小默认为 128 字节,里面记录着如下信息:
➢ 该文件的访问权限(read、write、execute);➢ 该文件的所有者与所属组(owner、group);➢ 该文件的大小(size);➢ 该文件的创建或内容修改时间(ctime);➢ 该文件的最后一次访问时间(atime);➢ 该文件的修改时间(mtime);➢ 文件的特殊权限(SUID、SGID、SBIT);➢ 该文件的真实数据地址(point)
文件的属性和权限
Linux为文件赋予了3种属性:可读、可写、可执行。
在Linux系统种,每个文件都有唯一的属性,同时Linux系统种的用户可以属于同一个组,通过权限位的控制定义了每个文件的属主,同组用户和其他用户对该文件具有不同的读、写和可执行权限
- 读权限: r 表示具有读取文件或目录的权限,对应的使用者可以查看文件内容
- 写权限: w 用户可以变更此文件
eg:删除、移动等。写权限依赖于该文件父目录的权限位置。
- 可执行权限: x 一些可执行文件必须有可执行权限才可以运行。对于目录而言,可执行权限表示其他用户可以进入此目录,eg:如果目录没有可执行权限,则其他用户不能进入此目录
改变文件的所有权
一个文件属于特定的所有者,更改文件的属主或属组可以使用chown和chgrp命令。chown
chown命令可以将文件变更为新的属主或属组,只有root用户或者拥有该文件的用户才可以更改文件的所有者。
如果拥有文件但不是root用户,只可以将组更改为当前用户所在的组。
| 参数 | 说明 |
|---|---|
| -f | 忽略错误信息 |
| -h | 更改遇到的符号链接的所有权,而不是符号链接指向的文件或目录的所有权,如未指定则更改链接指向目录或文件的所有权 |
| -H | 更改由符号引用的目录的用户标识(和组标识)和所有在该目录下的文件层次结构的所有文件 |
| -R | 递归地更改指定文件夹的所有权,但不更改链接指向的目录 |
[root@tenor ~]# chown ccy:mxh 1.txt -cchanged ownership of ‘1.txt’ from ccy:mxh2 to ccy:mxh
chgrp
修改属组
| -c | 显示更改部分的信息 |
|---|---|
| -v | 显示详细的处理信息 |
| -f | 忽略错误信息 |
改变文件权限
chmod
是用来改变文件或目录权限的命令,可以将指定文件的拥有者该为指定的用户或组
用户名可以是用户名或用户ID,组可以是组名或者组ID,文件以空格分开的要改变权限的文件列表,支持通配符。
只有文件的所有者或root用户可以执行,普通用户不能将字节的文件更改称其他的拥有者。
u表示文件所有者
g表示文件所属的组
o表示其他用户
a表示所有
chmod 还可以利用数字来更改文件权限。r 对应 4, w对应 2 ,x对应 1
| 参数 | 说明 |
|---|---|
| -c | 显示更改部分的信息 |
| -f | 忽略错误信息 |
| -h | 恢复符号链接 |
| -R | 处理指定目录及其子目录下的所有文件 |
| -v | 显示详细的处理信息 |
| -reference | 把指定的目录或文件作为参考,把操作的文件或目录设置成与参数文件或目录相同的拥有者或属组 |
| —fron | 只有当前用户/群组与指定的用户/群组相同时才进行改变 |
| —help | 显示帮助信息 |
| -version | 显示版本信息 |
| + | 增加权限 | |
|---|---|---|
| - | 取消权限 | |
| = | 唯一设定权限 | |
| r | 可读取 | 数字表示法:r =4 w=2 x=1 chmod也可以用数字来表示权限如 chmod 777 file 语法为:chmod abc file 其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。 |
| w | 可写入 | |
| x | 可执行 | |
| X | 表示只有该文档是子目录或者该文档以及被设定过为可执行 |
范例 :将档案 file1.txt 设为所有人皆可读取 :chmod ugo+r file1.txt将档案 file1.txt 设为所有人皆可读取 :chmod a+r file1.txt将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入chmod ug+w,o-w file1.txt file2.txt将 ex1.py 设定为只有该档案拥有者可以执行 :chmod u+x ex1.py将目前目录下的所有档案与子目录皆设为任何人可读取 :chmod -R a+r *显示详细信息[root@tenor ~]# chmod ug+w,o+X+x 2.txt -vmode of ‘2.txt’ retained as 0665 (rw-rw-r-x)
XFS文件系统管理
XFS文件系统备份和恢复
XFS文件系统提供了整个分区备份的工具xfsdump供用户使用。
用户可以在不借助第三方软件的情况下对xfs文件系统上的数据实施备份。
检查XFS文件系统
RHEL8中检查和恢复文件系统的工具主要是xfs_repair
