首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >核心原理:文件系统 vs 归档格式

核心原理:文件系统 vs 归档格式

作者头像
一个平凡而乐于分享的小比特
发布2026-02-02 16:56:54
发布2026-02-02 16:56:54
620
举报

🔥作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生,研究方向无线联邦学习 🎬擅长领域:驱动开发,嵌入式软件开发,BSP开发 ❄️作者主页:一个平凡而乐于分享的小比特的个人主页 ✨收录专栏:Linux,本专栏目的在于,记录学习Linux操作系统的总结 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

在这里插入图片描述
在这里插入图片描述

核心原理:文件系统 vs 归档格式

问题产生原因:

想将OSD_On-Screen_Button_Simulation目录下的所有内容拷贝到U盘下,再通过U盘拷贝到Linux系统其他路径下。我先查看当前路径下,文件夹下所有文件的属性,如下:

在这里插入图片描述
在这里插入图片描述

我将其拷贝到U盘下,再次查看U盘内,目录下的文件属性,如下:

在这里插入图片描述
在这里插入图片描述

可以看到U盘内存放的文件属性已经发生了变化!!!

于是我问了deepseek关于这个问题,给出了这样的解决方法:

在这里插入图片描述
在这里插入图片描述

但是我百思不得其解,在网上搜索后才知道本质原因,分享给大家!

1. 文件系统(FAT32/NTFS/exFAT)
  • 设计目标:管理磁盘上的文件和目录结构
  • 限制
    • FAT32/NTFS是为Windows设计的
    • 不支持Linux的完整元数据(metadata)
    • 只保存基本属性:文件名、大小、时间戳
    • 不保存:Linux权限(rwx)、所有者(UID)、组(GID)、特殊标志(如setuid)
2. 归档格式(tar/gzip)
  • 设计目标完整打包文件和目录的所有信息
  • tar格式会保存
    • 文件内容(原始字节)
    • 完整元数据
      • 权限位(rwxrwxrwx)
      • 所有者UID/GID
      • 时间戳(atime/mtime/ctime)
      • 链接信息(硬链接/软链接)
      • 设备文件(如果包含)
    • 目录结构

具体过程对比:

情况A:直接拷贝(会丢失权限)
代码语言:javascript
复制
源文件(Linux) → cp命令 → FAT32 U盘 → cp命令 → 目标(Linux)
      ↓                     ↓                    ↓
  权限:rwxr-xr-x     权限:rw-r--r--     权限:rw-r--r--
  (保存在ext4)     (FAT32丢弃x权限)    (继承U盘的权限)

关键点:FAT32像一个"过滤器",只通过它能理解的信息。

情况B:tar打包拷贝(保留权限)
代码语言:javascript
复制
源文件(Linux) → tar打包 → FAT32 U盘 → tar解压 → 目标(Linux)
      ↓                 ↓                 ↓                 ↓
  权限:rwxr-xr-x → 打包进.tar文件 → .tar文件原样复制 → 从.tar恢复权限
  (ext4文件系统)     (二进制数据包)   (只是复制字节)    (tar读取元数据)

tar的工作机制:

打包时(tar czf backup.tar.gz)
代码语言:javascript
复制
# tar会读取文件的:
1. 内容数据(文件的实际字节)
2. 元数据(权限、所有者、时间等)
3. 将这些信息一起编码到.tar文件中

# tar文件内部结构:
[文件头(116字节)] + [文件内容] + [文件头] + [文件内容] + ...
文件头包含:
- 文件名
- 权限模式 (mode)
- 所有者UID
- 所属组GID
- 文件大小
- 修改时间
- 文件类型
- ...等100多个字段
在U盘上
代码语言:javascript
复制
backup.tar.gz 只是一个普通的"文件"
FAT32看到的: "有一个叫backup.tar.gz的文件,大小XXX字节"
FAT32不需要理解tar的内部结构,就像不理解.zip文件内部一样
解压时(tar xzf backup.tar.gz)
代码语言:javascript
复制
# tar会:
1. 读取.tar文件的二进制数据
2. 解析文件头信息
3. 根据文件头中的权限信息创建文件
4. 恢复原始权限和属性

技术类比:

类比1:搬家
  • 直接拷贝:像把家具一件件搬过去,但说明书丢了
  • tar打包:像把家具连同说明书一起装箱,到新家再按说明书组装
类比2:邮寄信件
  • FAT32:只关心"信封"(文件名、大小),不关心"信的内容"
  • tar:把整封信(内容+格式)封装好,接收方拆开得到完整信件

验证实验:

代码语言:javascript
复制
# 1. 查看tar文件头信息
tar tvf backup.tar.gz
# 输出示例:
# -rwxr-xr-x tjf/tjf       943 2024-12-26 13:52 install_rules.sh
# ↑ 这里已经包含了权限信息!

# 2. 对比两种方式
# 方式1:直接cp
cp install_rules.sh /mnt/usb/
cp /mnt/usb/install_rules.sh ~/
ls -l ~/install_rules.sh  # 显示 -rw-r--r--

# 方式2:tar方式
tar czf install.tar.gz install_rules.sh
cp install.tar.gz /mnt/usb/
cp /mnt/usb/install.tar.gz ~/
tar xzf ~/install.tar.gz
ls -l install_rules.sh     # 显示 -rwxr-xr-x

为什么tar能绕过文件系统限制?

因为tar创建了一个自包含的格式

代码语言:javascript
复制
tar文件 = [元数据] + [数据] + [元数据] + [数据] + ...
  • FAT32只看到:一个名为backup.tar的大文件
  • 不知道也不关心里面有什么
  • 当tar在Linux上解压时,它会用自己的元数据来创建文件

其他类似工具:

代码语言:javascript
复制
# cpio - 也保存权限
find . -print | cpio -o > backup.cpio

# zip(需要参数)
zip -r backup.zip .     # 默认不保存权限
zip -r --symlinks backup.zip .  # 保存符号链接

# rsync(通过网络或ext4文件系统)
rsync -av source/ dest/  # 保存所有属性

打包后,重新解压缩已解决:

在这里插入图片描述
在这里插入图片描述

总结关键点:

  1. FAT32等Windows文件系统天生不支持Linux权限
  2. tar将"权限信息"编码到文件内容中,而FAT32只看到"文件内容"
  3. 解压时,tar根据自己保存的元数据重建文件
  4. 这就像用相机拍下家具摆放位置(tar打包),然后按照片恢复(tar解压)

所以,tar不是"不改变属性",而是它把属性作为数据的一部分保存和恢复,绕过了文件系统的限制。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-02-02,如有侵权请联系 [email protected] 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 [email protected] 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 核心原理:文件系统 vs 归档格式
  • 问题产生原因:
    • 1. 文件系统(FAT32/NTFS/exFAT)
    • 2. 归档格式(tar/gzip)
  • 具体过程对比:
    • 情况A:直接拷贝(会丢失权限)
    • 情况B:tar打包拷贝(保留权限)
  • tar的工作机制:
    • 打包时(tar czf backup.tar.gz)
    • 在U盘上
    • 解压时(tar xzf backup.tar.gz)
  • 技术类比:
    • 类比1:搬家
    • 类比2:邮寄信件
  • 验证实验:
  • 为什么tar能绕过文件系统限制?
  • 其他类似工具:
  • 总结关键点:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档