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等操作,但statls命令对atime是不会有影响的(没有读取文件的真实内容)
  
文件修改时间 : mtime
  文件的内容被最后一次修改的时间          # 文件block块被修改
  ls -l命令显示出来的文件时间就是这个时间
  eg: echo aa >> a.sh 或vim a.txt 修改内容

属性修改时间 : ctime
  文件的属性(元信息)被最后一次修改的时间   # 文件inodek块被修改
  当文件的状态被改变的时候,状态时间就会随之改变
  eg: chmodchown 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 属性概述

preview

# 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 硬链接和软链接

preview

preview

### 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
posted @   Edmond辉仔  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示