Linux目录配置的依据--FHS
事实上,FHS是根据过去的经验一直再持续的改版的,FHS依据文件系统使用的频繁与否与是否允许用户随意更动, 而将目录定义成为四种交互作用的形态,用表格来说有点像底下这样:
| 可分享的(shareable) | 不可分享的(unshareable) | |
| 不变的(static) | /usr (软件放置处) | /etc (设置档) |
| /opt (第三方协力软件) | /boot (开机与内核档) | |
| 可变动的(variable) | /var/mail (用户邮件信箱) | /var/run (进程相关) |
| /var/spool/news (新闻群组) | /var/lock (进程相关) |
root@bogon:/boot# ls|xargs -n 1 file -i
config-6.12.0-201.el10.x86_64: text/plain; charset=us-ascii
config-6.12.0-210.el10.x86_64: text/plain; charset=us-ascii
efi: inode/directory; charset=binary
grub2: inode/directory; charset=binary
initramfs-0-rescue-5ab1c00ff4614d4da5c9ac98722a48ee.img: application/x-cpio; charset=binary
initramfs-6.12.0-201.el10.x86_64.img: application/x-cpio; charset=binary
initramfs-6.12.0-201.el10.x86_64kdump.img: application/x-cpio; charset=binary
initramfs-6.12.0-210.el10.x86_64.img: application/x-cpio; charset=binary
loader: inode/directory; charset=binary
symvers-6.12.0-201.el10.x86_64.xz: application/x-xz; charset=binary
symvers-6.12.0-210.el10.x86_64.xz: application/x-xz; charset=binary
System.map-6.12.0-201.el10.x86_64: text/plain; charset=us-ascii
System.map-6.12.0-210.el10.x86_64: text/plain; charset=us-ascii
vmlinuz-0-rescue-5ab1c00ff4614d4da5c9ac98722a48ee: application/octet-stream; charset=binary
vmlinuz-6.12.0-201.el10.x86_64: application/octet-stream; charset=binary
vmlinuz-6.12.0-210.el10.x86_64: application/octet-stream; charset=binary
在CENTOS 10 下,学习FHS目录架构,查询了/boot目录下(开机与核心文档所在的目录)的文件类型, 请解释一下, application/x-xz和 application/octet-stream分别是什么文件类型?
根据您的查询结果,结合Linux文件系统层次结构标准(FHS)中关于 /boot 目录的约定,您列出的文件都是与系统启动和内核密切相关的核心文件。下面为您解释这两种MIME类型所代表的文件格式及其作用。
1. application/x-xz
这是一种用于标识 XZ压缩格式 的MIME类型。XZ是一种高效的数据压缩格式和工具,在Linux环境中广泛用于压缩软件包、内核模块文件等,以节省存储空间。
- 在您系统中的具体体现:您看到的 symvers-6.12.0-201.el10.x86_64.xz 和 symvers-6.12.0-210.el10.x86_64.xz 文件就是典型的应用。symvers 文件包含了内核的符号版本信息,主要用于内核模块的编译和加载过程,确保模块与特定版本的内核兼容。为了减少占用空间,它被压缩成了 .xz 格式。
- 如何处理:您可以使用 unxz 或 xz -d 命令来解压这类文件,以查看其原始内容。
2. application/octet-stream
这是一个通用的MIME类型,意为 “八位字节流” 。当系统无法或无需确定一个文件的具体类型时,会将其归类为此类型。它通常代表可执行的二进制程序、内核映像或任何非文本的原始数据。
- 在您系统中的具体体现:在 /boot 目录下,被标记为 application/octet-stream 的关键文件就是 Linux内核映像文件,即 vmlinuz-*(例如 vmlinuz-6.12.0-210.el10.x86_64)。vmlinuz 是经过压缩的Linux内核,是系统启动时由引导加载程序(如GRUB2)加载到内存的核心程序。
- 另一个文件:vmlinuz-0-rescue-* 是救援内核映像,当默认内核无法启动时,用于系统恢复。
- 重要性:这些文件是系统启动的绝对核心,直接对应于FHS标准中定义的 /boot 目录核心功能——存放“开机启动文件与Linux内核文件。
总结与关联
在FHS标准架构下,/boot 目录被明确定义为存放系统启动所必需的文件。您通过 file -i 命令进行的探查,正好从文件格式的角度验证了这一点:
- vmlinuz (application/octet-stream) 是可直接执行的二进制内核,是启动的引擎。
- config-* 和 System.map-* (text/plain) 是内核的配置和内存映射参考文件。
- initramfs-*.img (application/x-cpio) 是初始内存文件系统,在内核启动初期提供必要的驱动和环境。
- symvers-*.xz (application/x-xz) 则是与内核版本匹配的模块符号信息压缩包。
这些文件共同协作,确保您的CentOS系统能够正常启动和运行。
2.2.3 开机流程中的 BIOS 与 UEFI 开机检测程序
简单的说,整个开机流程到操作系统之前的动作应该是这样的:BIOS:开机主动运行的固件,会认识第一个可开机的设备;
MBR:第一个可开机设备的第一个磁区内的主要开机记录区块,内含开机管理程序;
开机管理程序(boot loader):一支可读取内核文件来运行的软件;
内核文件:开始操作系统的功能...
由于 LBA0 仅提供第一阶段的开机管理代码,因此如果你使用类似 grub 的开机管理程序的话,那么就得要额外分割出一个『 BIOS boot 』的分区, 这个分区才能够放置其他开机过程所需的代码!
根据以上CENTOS 操作系统的背景知识,我在本机进行了查询:
root@bogon:/boot/efi/EFI/BOOT# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 476.9G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot/efi
├─nvme0n1p2 259:2 0 5G 0 part /boot
└─nvme0n1p3 259:3 0 370G 0 part
├─cs-root 253:0 0 100G 0 lvm /
├─cs-swap 253:1 0 10G 0 lvm [SWAP]
└─cs-home 253:2 0 150G 0 lvm /home
发现挂在目录/boot/efi就对应的是『 BIOS boot 』的分区。
以下是进入目录进行查看情况:
root@bogon:/boot# ls -alh /boot/efi
total 12K
drwx------. 3 root root 4.0K Jan 1 1970 .
dr-xr-xr-x. 5 root root 4.0K Mar 3 18:44 ..
drwx------. 4 root root 4.0K Feb 12 23:00 EFI
root@bogon:/boot# ls -alh /boot/efi/EFI/
total 16K
drwx------. 4 root root 4.0K Feb 12 23:00 .
drwx------. 3 root root 4.0K Jan 1 1970 ..
drwx------. 2 root root 4.0K Feb 12 23:02 BOOT
drwx------. 2 root root 4.0K Feb 25 14:38 centos
root@bogon:/boot# ls -alh /boot/efi/EFI/BOOT/
total 1.0M
drwx------. 2 root root 4.0K Feb 12 23:02 .
drwx------. 4 root root 4.0K Feb 12 23:00 ..
-rwx------. 1 root root 926K Jul 2 2025 BOOTX64.EFI
-rwx------. 1 root root 86K Jul 2 2025 fbx64.efi
root@bogon:/boot# ls -alh /boot/efi/EFI/centos/
total 7.6M
drwx------. 2 root root 4.0K Feb 25 14:38 .
drwx------. 4 root root 4.0K Feb 12 23:00 ..
-rwx------. 1 root root 108 Jul 2 2025 BOOTX64.CSV
-rwx------. 1 root root 159 Feb 12 23:03 grub.cfg
-rwx------. 1 root root 4.1M Feb 13 08:00 grubx64.efi
-rwx------. 1 root root 827K Jul 2 2025 mmx64.efi
-rwx------. 1 root root 926K Jul 2 2025 shim.efi
-rwx------. 1 root root 928K Jul 2 2025 shimx64-centos.efi
-rwx------. 1 root root 926K Jul 2 2025 shimx64.efi
在做文件类型查询的时候,发现了很多vnd.microsoft.portable-executable的文件类型,
我想请问为什么会出现上面带有microsoft字样的文件类型?
我安装此操作系统的时候,确实是在windows操作系统下,先到CENT OS 网站download iso光 盘镜像文件,再使用Rufus制作一个可引导的CentOS启动盘,进而插入这个U盘进行CENTOS 安装的。
root@bogon:/boot# cd /boot/efi/EFI/centos/
root@bogon:/boot/efi/EFI/centos# ls |xargs -n 1 file -i
BOOTX64.CSV: application/octet-stream; charset=binary
grub.cfg: text/plain; charset=us-ascii
grubx64.efi: application/vnd.microsoft.portable-executable; charset=binary
mmx64.efi: application/vnd.microsoft.portable-executable; charset=binary
shim.efi: application/vnd.microsoft.portable-executable; charset=binary
shimx64-centos.efi: application/vnd.microsoft.portable-executable; charset=binary
shimx64.efi: application/vnd.microsoft.portable-executable; charset=binary
root@bogon:/boot/efi/EFI/BOOT# ls |xargs -n 1 file -i
BOOTX64.EFI: application/vnd.microsoft.portable-executable; charset=binary
fbx64.efi: application/vnd.microsoft.portable-executable; charset=binary
您在 CentOS 的 /boot/efi 分区中发现 .efi 文件被识别为 application/vnd.microsoft.portable-executable 类型,这完全正常,并非系统异常或包含了 Windows 组件。
这个现象的根本原因在于:UEFI 固件标准采用了微软的 PE 文件格式作为其可执行文件的通用容器。
以下是具体的解释:
-
PE 格式是跨平台的容器标准:Portable Executable (PE) 虽然是微软为 Windows 定义的可执行文件格式(用于 .exe, .dll 等),但其设计具有良好的可扩展性和结构性。正因为如此,UEFI(统一可扩展固件接口)规范将 PE 格式指定为 UEFI 环境下所有可执行应用程序的标准格式。这意味着,任何需要被 UEFI 固件直接加载并运行的程序,都必须被封装成 PE 格式的文件。
-
.efi 文件本质是 PE 文件:您在 /boot/efi/EFI/BOOT/ 和 /boot/efi/EFI/centos/ 目录下看到的 BOOTX64.EFI、grubx64.efi、shimx64.efi 等文件,就是 UEFI 启动加载程序(boot loader)及其相关组件。它们虽然用于启动 Linux 系统,但为了能被计算机的 UEFI 固件(取代传统 BIOS)识别和执行,必须遵循 UEFI 规范,编译并链接成 PE 格式。因此,file 命令根据文件内的魔数(Magic Number)正确识别出了其格式为 PE。
-
与安装方式无关:您提到在 Windows 下使用 Rufus 制作启动盘,但这并非原因。即使您在 Linux 系统下直接制作启动盘,生成的 .efi 文件也同样是 PE 格式。Rufus 只是忠实地将 CentOS 安装镜像中已编译好的、符合 UEFI 标准的 PE 格式 .efi 启动文件写入到了 U 盘的正确位置。
总结:您看到的 microsoft.portable-executable 类型标识,仅仅表明这些 .efi 文件遵循了由微软定义、但被 UEFI 国际标准广泛采纳的文件格式规范。这是现代计算机(使用 UEFI 启动)能够加载不同操作系统(如 Windows, Linux, macOS)启动管理器的技术基础之一,确保了固件层面对可执行文件格式识别的统一性。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)