
当你在 Linux 终端输入 touch test.txt 创建一个文件,或用 cat log.txt 查看日志时,是否想过:'文件' 到底是什么? 为什么 Linux 里连键盘、显示器甚至进程都被叫做 '文件'?这篇文章会从最直观的 '磁盘文件' 入手,逐步带你理解 Linux '一切皆文件' 的核心哲学,为后续学习 IO 操作打下坚实基础。
一、狭义理解:磁盘上的 '真实文件'
我们日常说的 '文件',大多是指存放在硬盘(或 SSD)里的文本、图片、视频等数据 —— 这就是 Linux 中文件的狭义定义。要理解它,我们得先搞清楚 '文件的家'(磁盘)和 '文件的本质'。
1.1 磁盘:文件的 '永久储藏室'
首先要明确一个关键点:磁盘是 '永久性存储介质'。和内存(断电数据消失)不同,磁盘里的数据即使关机也不会丢失 —— 这也是我们把文件存在磁盘里的原因。同时,磁盘还有一个特殊身份:外设(既可以输入数据,也可以输出数据)。
- 输入(Input):从磁盘读取数据到内存(比如打开
test.txt); - 输出(Output):从内存写入数据到磁盘(比如保存编辑后的
test.txt)。
这种 '和磁盘交换数据' 的过程,就是我们常说的IO(Input/Output,输入输出)。所以,对文件的所有读写操作,本质都是和磁盘的 IO 交互—— 这也是 '文件操作' 和 'IO' 总是绑在一起的原因。
1.2 文件的 '双重身份':内容 + 属性
很多人以为 '文件就是里面存的数据',但实际上,Linux 中的文件由两部分组成,缺一不可:
- 内容(Data):文件实际存储的信息,比如文本里的文字、图片的像素数据;
- 属性(Metadata,元数据):描述文件的 '说明书',比如文件名、大小、创建时间、权限(谁能读 / 写)、所属用户等。
关键知识点:0KB 空文件为什么也占空间?
你可能注意过,用 touch empty.txt 创建的空文件(大小显示 0KB),在磁盘上依然会占用少量空间(通常是几个字节到几十字节)。原因很简单:空文件没有内容,但必须存储属性信息—— 比如文件名 empty.txt、创建时间 2024-11-23、权限 -rw-r--r-- 等,这些属性需要占用磁盘空间(存储在 Linux 的 inode 结构中,后续文章会详细讲)。
我们可以用 ls -l 命令直观看到文件的属性:
# 查看空文件的属性(大小 0,但有创建时间、权限等)ls -l empty.txt

其中,-rw-r--r-- 是权限,1 是硬链接数,user 是所属用户,0 是内容大小, 是创建时间, 是文件名 —— 这些都是文件的属性。


