元数据卡
- 前置知识:计算机的三个核心部件(上一页)
- 预计时间:8 分钟
- 完成标志:能解释程序和文件的区别,能用 file 命令查看文件类型
你的进度
你知道了电脑里有 CPU、内存、硬盘。但你怎么让它干活?你要写一段"程序",然后让电脑执行它。
"工坊里有一把好锤子,和一张锤子的图纸——它们有什么区别?"
工坊主人冷不丁地问了你一句。你愣住了——锤子图纸画得再精美,它不能敲钉子。但你把图纸上的设计做出来,它就变成了一把能用的锤子。
"程序也是一样。"他递过来一个小盒子。"这是一个计算器程序。它在硬盘上安安静静地躺着——像一张图纸。但当它被启动后,它在内存里活了过来。"
程序只是一个文件
计算器本质上只是一个文件。一个保存在硬盘上的、很长的、机器能读懂的指令列表。在 Windows 上它叫 calc.exe,在 Mac 上它藏在 /Applications/Calculator.app 里。它不动声色地躺在那里,像一本关着的书——你打开它,它才开始运作。
# 在 Linux / Mac 上查看一个可执行文件的类型
file /bin/ls
# 预期输出:
# /bin/ls: ELF 64-bit LSB executable x86-64 version 1 (SYSV)语言:Shell (Bash) 如何运行:打开终端,粘贴后按回车 预期输出:显示 /bin/ls 是一个 ELF 格式的可执行文件,64 位 你试试:换成 /bin/bash、/usr/bin/python3 或任意可执行文件
输出的意思很简单:/bin/ls 这个文件里装的不是文字,不是图片,是机器可以直接执行的指令。
程序 = 存在硬盘上的一个文件。它的内容不是人类读的文字,是机器的指令。
文件就是信息
"刚才你从材料架上拿了一块铜板,但你有没有想过——那块铜板上的标记本身是什么?"
在我们继续之前,先确认一个最根本的东西:文件。
文件 = 硬盘上的一个名字 + 一段字节。
每个文件有一个路径、一个大小、一个类型。操作系统用文件系统来管理它们——文件系统就是硬盘上的一个大型索引,像图书馆的卡片柜一样,告诉你每一本书(文件)在哪个架子上(目录)。
# 列出当前目录下所有文件,显示详细信息
ls -lh
# 预期输出样例:
# -rw-r--r-- 1 steven steven 1.2K Jun 23 10:00 README.md
# drwxr-xr-x 2 steven steven 4.0K Jun 23 09:30 src语言:Shell (Bash) 如何运行:输入 ls -lh预期输出:当前目录下的所有文件和子目录,带大小、修改时间、权限 你试试:ls -lh / 查看根目录
对操作系统来说,一切皆是文件。你的文档、程序、硬件设备(比如键盘输入)、进程信息,都以"文件"的形式暴露出来。这不是比喻,是 Unix 设计哲学的核心。
程序与文档没有本质区别——都是硬盘上的一串字节。只不过 .txt 由文本编辑器读取展示成文字;.exe 由操作系统读取加载到内存里一条一条执行。
旅人笔记
程序是硬盘上的一个文件,里面装的是机器指令。文件是信息的最小容器——一个名字加一段字节。操作系统通过文件系统管理这一切:程序、文档、图片、音乐,全是文件。区别只在于谁来解读这些字节。
→ 下一步:进程与内存
程序静静地躺在硬盘上——那你双击它之后发生了什么?