Linux 一切皆文件

“一切皆文件”(Everything is a file)是 Unix/Linux 的核心哲学,其精髓不是说“物理上所有东西都是磁盘上的文本文件”,而是操作系统将所有系统资源(硬件、网络、进程信息等)抽象为统一的文件接口

它主要体现在以下 4 个维度:

  • 统一的 I/O 接口(多态思想)

    普通文件、串口、终端设备(/dev/tty)、乃至网络套接字,对用户态程序暴露的操作完全一致:open()read()write()close()。作为程序员,写串口和写普通 .txt 文件的底层逻辑没有本质区别,系统屏蔽了底层的硬件驱动差异。

  • 统一的资源标识与层次化命名

    所有资源都挂载在单根目录树(/)下,拥有唯一的路径标识。系统通过路径访问资源,而不是像 Windows 那样给不同设备分配盘符(C:, D:)或专有设备名称。

  • 内核机制的暴露(虚拟文件系统 / 状态可视化)

    /proc/sys 是纯内存文件系统。例如查看 CPU 信息只需 cat /proc/cpuinfo,调整内核参数只需 echo 1 > /proc/sys/net/ipv4/ip_forward。系统将复杂的内核数据结构直接投射为文本文件,简化了调试和系统管理。

  • 底层支撑:VFS(虚拟文件系统)与文件描述符(FD)

    在内核层,统一由 VFS 抽象出 file_operations 函数指针结构体,任何设备只要实现了这套虚函数表,就能被当作文件处理;在进程层,所有 I/O 资源都分配一个整型的文件描述符(FD),标准输入/输出、磁盘文件、网络 Socket 平等共享该编号空间。

局限与代价

这种设计并非万能。对于非流式、强控制型的硬件交互,单纯依靠 read/write 往往不够灵活,Linux 依然妥协引入了 ioctl() 系统调用;此外,网络 Socket 建立连接仍需要专门的 socket()bind()connect() 等系统调用,直到拿到已连接的 FD 后,才能完全复用文件读写接口。

posted @ 2026-09-05 23:33  光風霽月  阅读(13)  评论(0)    收藏  举报