Linux09--文件管理之:文件系统、stat元信息、文件属性、软硬链接
1 文件系统
1.1 文件系统介绍
# 0 文件系统 FileSystem
是操作系统内核中负责组织管理磁盘的程序
# 1 分区与文件系统
传统中:
一个磁盘分割槽(分区)只能格式化成一个文件系统
新技术:
一个分区 可格式化为多个文件系统 # LVM
也可将多个分区合成一个文件系统 # LVM、RAID
# 总结:
一个可被挂载的资料为一个文件系统,而不是一个分区
# 2 整体逻辑
/boot / # 文件系统必须挂载到目录 (使用者 操作 该磁盘分区空间的入口)
xfs xfs ext4 # 操作系统给分区指定文件系统类型
分区1(eg: /boot) 分区2(eg: swap) 分区3(eg: /) # (分区/分割槽) 根据使用分成不同的区域
磁盘/硬盘
# 3 常见的文件系统类型
不同的文件系统类型,操作系统针对磁盘使用不同的管理方式
# linux
xfs(CentOS7)、ext4(CentOS6)、btrfs # 都是日志文件系统、索引式文件系统
其特点是文件系统将没提交的数据变化(内存中的数据) 保存到日志文件
以便在系统崩溃或者掉电时恢复数据
xfs专为大数据产生,每个单个文件系统最大可以支持8eb
单个文件可以支持16tb,不仅数据量大,而且扩展性高
还可以通过xfsdump,xfsrestore来备份和恢复
# windows
FAT32、NTFS
1.2 XFS的工作原理
### 1 文件数据的组成及存储
创建一个文件至少占用一个inode 区块 和一个block区块
1.1 inode区块存放: 文件的元信息 eg:权限、时间、大小、以及文件的一个或多个block块号等
一个文件被分配唯一一个inode号
在同一个分区中,两个文件的inode号码相同,两个文件互为硬链接
1.2 block区块存放: 文件的实际内容
比较大的文件占用多个block
比较小的文件占用的block 的剩余空间就无法使用
# 强调:每个inode 与block 都有自己的编号
1.3 superblock超级区块: 记录整个文件系统的整体信息
eg:inode与block的总量、使用量、剩余量等
### 2 硬盘和操作系统存取单位
2.1 硬盘的最小存取单位 扇区(Sector)
每个扇区储存512字节,相当于0.5KB
2.2 操作系统(文件)的最小存取单位 块(block)
磁盘的多个扇区组织成一个个的block块,是文件存取的最小单位
block默认大小为4KB, 即连续八个sector组成一个 block
读取一个block会消耗一次磁盘I/O (input/output 磁盘读写)
### 3 文件存取原理 ---> ext xfs都是 索引式文件系统
# 目录 和 文件 的区别在于
目录的block块是 子目录名字及其对应的inode号
文件的block块是 文件真实内容
eg: cat /etc/passwd
# 简述:
--> / inode号 --> / block
--> /etc inode --> /etc block
--> /etc/passwd inode --> /etc/passwd block
--> /etc/passwd的文件内容
1.先查询出 根目录 / 的inode号
2.再根据 / 的 inode号,找到 / 对应的inode块
并从里面读取到 / 目录文件 存放的数据block块 # 存放的是/目录下的 子目录名字及其对应的inode号
3.从 / 的block块中,找到 /etc 的inode号
4.再次 /etc 的 inode号,找到 /etc 的inode块
并从里面读取到 /etc 目录文件 存放的数据block块
5.从 /etc 的block块中,找到 /etc/password 的inode号
6.根据/etc/password 的 inode号,找到 /etc/password 的inode块
并从里面读取到 /etc/password 目录文件 存放的数据block块
从而读取找真正的内容
1.3 FAT文件系统
u盘 或者 Windows使用的文件案系统一般为FAT格式 链接式文件系统
# 原理
FAT文件系统并没有inode存在
而是每个block号码都记录后一个block的位置
# 缺点问题
若同一个文件的block分散太厉害,磁盘可能就会多转好几圈才能完整读取到这个文件内容
# 碎片整理
可以通过碎片整理将同一个文件所属的blocks汇整在一起,这样文件的读取会比较容易
2 stat元信息
2.1 inode信息
# 1 文件的inode: 即index node索引节点
是UNIX操作系统中的一种数据结构,其本质是结构体
负责储存文件的元信息
# 2 查看某个文件的inode信息
stat [文件或目录]
# 查看inode号
ls -i [文件或目录]
# 3 文件的inode元信息 存放的是
除了文件名和文件真实内容之外,所有有关文件的信息/元数据(metadata)
Size : 文件的字节数
Blocks : 文件所使用的磁盘 扇区数 # 最小为 8 文件系统操作的最小单位:一个block,为8个扇区
IO Block: 写入/写出块的大小 # 8个扇区 一个block的大小 4K(4096)
Device : 设备号码
Inode : inode 编号
Links : 链接数,即有多少文件名指向这个inode
Access : 文件的读写执行权限
Uid : 文件拥有者的User ID
Gid : 文件的Group ID
Access : 指文件上一次打开的时间
Modify : 指文件内容上一次变动的时间
Change : 指inode上一次变动的时间
# 4 三种时间解释
文件访问时间 : atime
对文件进行一次读操作,它的访问时间就会改变
eg: cat、more等操作,但stat、ls命令对atime是不会有影响的(没有读取文件的真实内容)
文件修改时间 : mtime
文件的内容被最后一次修改的时间 # 文件block块被修改
ls -l命令显示出来的文件时间就是这个时间
eg: echo aa >> a.sh 或vim a.txt 修改内容
属性修改时间 : ctime
文件的属性(元信息)被最后一次修改的时间 # 文件inodek块被修改
当文件的状态被改变的时候,状态时间就会随之改变
eg: chmod、chown a.txt
2.2 inode大小
# 1 inode大小
每个inode节点的大小
ext文件系统 一般是128字节或256字节
xfs文件系统 一般是512字节
# 2 inode数量
inode会消耗硬盘空间,且每个文件都必须有一个inode
故分区完后,不可以增加inode数量,改变inode大小
# 注
分区中 有可能发生inode已经用光,但硬盘还未存满的情况。此刻也无法在该分区上创建新文件
# 3 查看文件系统信息
# 查看ext文件系统信息
dumpe2fs -h [分区路径]
eg: dumpe2fs -h /dev/sda1 | grep "Inode size"
# 查看xfs文件系统信息
xfs_info [分区路径]
eg: xfs_info /dev/sda1
2.3 分区磁盘占满的情况
### 1 分区磁盘占满的情况
1.inode数量占满
inode数量已经用光,但硬盘还未存满的情况
# 查看 inode信息
df -i
2.分区硬盘空间占满
inode数量还有,但硬盘空间被用完
### 2 解决磁盘占满
1 释放inode号
删除不重要的部分文件
将部分文件备份到其他分区 打包成压缩包
2 增加磁盘
增加新的分区,并挂载目标目录的子目录中
磁盘分区 挂载目录
# eg: /dev/sda1/ ---> /boot/
此时 磁盘分区/dev/sda1 已满,导致目录/boot下 不能新建文件
# /dev/sdb1/ ---> /boot/data/
新增磁盘/dev/sdb,并新建分区/dev/sdb1,且挂载到/boot/data/
此时 /boot/data/目录就可新建文件
# 动态查看磁盘使用情况 []内可放查看系统信息的命令
while true;do [df -i]; sleep 0.5; clear; done;
3 文件属性信息
3.1 属性概述
# 1 查看文件属性命令
查看文件信息 :ls -l -i
统计inode数量 :df -i
目录及文件的元信息 :stat [文件或目录]
# 2 详细文件属性解读
inode号 文件类型及权限 硬链接个数 属主 属组 文件的大小 文件的修改时间 文件名字
201326677 drwxr-xr-x. 6 root root 100 Sep 13 16:48 yum
67662624 -rw-r--r-- 1 root root 970 Sep 23 03:50 yum.conf
134451378 drwxr-xr-x. 4 root root 151 sep 23 04:16 yum.repos.d
属主:文件所有者
属组:文件所属组
文件大小:最小单位字节
3.2 文件类型及权限
# 1 详解
drwxr-xr-x.
第一位 代表文件类型 eg: d-->文件夹
第二位到第十位 代表 每三位代表 属主、属组、其他人的 文件权限
第十一位 代表是否是在selinux开启的状态创建的 eg: 有'.' 代表是在selinux开启,无则不是
# 2 常见的文件类型
d: 文件夹(directory) # ***
-: 普通文件(file) f或- 表示 # file [文件] 查看文件类型 ***
纯文本文件 text /etc/hosts
二进制文件 binary /bin/ls
数据型文件 data /tmp/etc.tar.gz
l: 链接文件 eg: 软链接、符号链接、快捷方式 # ***
c: 字符设备文件,会不断产生字符信息 character eg:字体
b: 块设备文件 block eg:硬盘
s: socket文件,套接字接口文件,和网络有关的文件
p: 管道文件 pipe
管道:将前一个命令的结果交给后面一个命令来处理即管道技术
# 3 文件类型查看方法
配置文件:.conf
日志文件:.log
脚本文件:.sh
脚本文件:.py
# 注意:文件拓展名说明
windows是通过拓展名区分不同文件类型
Linux是通过拓展名提示不同文件类型,即使将压缩文件的后缀名改了,依旧是压缩文件
# 4 文件权限
r(read) : 4 # 可读
w(write) : 2 # 可写
x(execute): 1 # 可执行
N/A(-) : 0(没有权限)
3.3 硬链接和软链接
### 1 硬链接: 相当于文件的别名,
ln [源来的路径] [新的路径]
硬链接: 指通过索引节点(inode)号来进行连接,inode是可以对应多个文件名的
源文件与目标文件的inode号码相同,都指向同一个inode
特点:1.防止误删数据 2.修改一个文件的内容,其他链接文件都会修改 # 相同点
3.不能给目录创建硬链接 4.硬链接不能跨分区 # 不同点
# 因为硬链接是同一个inode,若是跨区了,各自文件系统的inode根本不一样 无法建立硬链接
### 2 软链接: 相当于快捷方式,用于存放指向源文件的路径信息
ln -s [源来的路径] [新的路径]
软链接: 目标文件指向的是源文件的路径,而不是inode号,所以源文件的“链接数”不会增加
源文件与目标文件的inode号码不相同
目标文件是依赖源文件而存在的
特点:1.修改一个文件的内容,其他链接文件都会修改 # 相同点
2.能给目录创建软链接 3.软链接能跨分区 # 不同点
作用:1.软件升级 2.企业代码发布 3.不方便目录移动 # ***
# 简单解释1/2
代码配置固定使用同一个软链接,但可以修改指向的源文件目录
软件升级 或 代码发布后,新建一个新版本目录,把之前的软链接配置 指向这个新版本目录
若新版本有问题,进行版本回滚,只需要把软链接配置,再重新之前旧版本目录即可
### 3 空目录文件的“链接数”为何为2 ?
创建目录时,默认会硬链接生成两个目录项"."和".."
"." 的inode号码就是当前目录的inode号码
".."的inode号码就是父目录的inode号码
此时 当前目录的inode号的中“链接数” 分别是:创建的目录名和目录中的"."
# 所以,任何一个目录的“链接数”总数,总是等于 2+它的子目录总数(含隐藏目录)
### 4 如何真正删除文件
1.在linux操作系统中,硬链接个数为0时,才会删除源文件,表示数据真正删除了
文件的inode信息中有一项叫做“链接数”,记录指向该inode的文件名总数
删除一个文件名,就会使得indoe中的链接数减一
当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其对应的block区域
2.文件信息没有被进程调用的时候,进程调用数为0
分类:
Linux运维
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)