回到首页

输入关键词,多个关键词用空格分隔。

← 工程原理与设计 · 系列目录

Linux 概念指南

约 4 分钟更新于 2026-11-06
本页目录

Linux 最值得学习的地方,是它怎样把复杂的硬件与程序组织成几个可以组合的概念。本文沿用 2016 年笔记的顺序,修订旧版启动流程、系统调用和进程回收的表述。

内核、发行版与启动

严格说,Linux 是内核:它管理进程、内存、设备和文件系统,为应用提供访问系统资源的接口。日常安装的发行版还包含系统工具、库、包管理器与服务管理程序。

启动可以先理解为:固件初始化硬件,引导程序加载内核,内核完成初始化,再启动用户空间的第一个进程,由它组织后续服务。BIOS 与 MBR 是一种历史路径,UEFI 等环境采用不同的启动方式,不能把“读取磁盘前 512 字节”当作所有机器的通用流程。

发行版选择影响软件管理和默认配置,却不会改变学习文件描述符、进程和权限的价值。这里不保留旧笔记中已经带有时代背景的发行版排行榜与产品消息。

系统调用、库、Shell 与终端

系统调用是用户程序请求内核服务的接口。库可以封装系统调用,也可以完全在用户空间完成计算。不是每一行代码都需要进入内核。

命令行里的 chmod 程序与 chmod 系统调用有关,但它们不是同一个东西。手册章节有助于区分:man 1 chmod 查看命令,man 2 chmod 查看系统调用。

终端负责提供输入输出界面,Shell 负责解释命令。一个终端窗口可以运行 Bash 或其他 Shell,也可以运行编辑器。把终端和 Shell 分开,才能解释为什么换终端不一定会改变脚本语法。

文件、目录和 inode

文件系统把存储组织成目录树,/ 是根目录,. 表示当前目录,.. 表示父目录。绝对路径从根开始,相对路径从当前工作目录开始。

在常见 Unix 文件系统中,目录把文件名映射到 inode;inode 保存文件的元数据及定位文件内容所需的信息。硬链接是同一 inode 的另一个名称,符号链接则保存指向目标的路径。删除一个名字不一定立即释放文件:当最后一个硬链接被删除且不再有进程打开该文件时,存储才可以回收。相关语义见 unlink(2)。

因此,删除正在写入的日志文件后,磁盘空间可能没有立即恢复;文件名消失与所有使用者关闭文件,是两回事。

权限的对象不同,含义也不同

ls -l 中的九个权限位,分别描述所有者、所属组和其他用户的读、写、执行权限。

对普通文件,读表示读取内容,写表示修改内容,执行表示允许作为程序执行。对目录,读主要涉及列出名称,写涉及修改目录项,执行表示允许搜索、穿过目录。能否删除文件主要取决于所在目录的权限及其他限制,而不只是文件自身是否可写。

权限不足时,先弄清楚哪个用户需要对哪个对象做什么,再给出相应权限。递归设置所有文件为完全开放的权限,会掩盖这个问题。

管道把小程序连起来

标准输入、输出、错误通常对应文件描述符 0、1、2。Shell 的管道把左侧标准输出连接到右侧标准输入:

printf 'welcome to Linux\n' | wc -w

结果为三个单词。连接的是字节流,左右两端必须约定内容格式。文件名含换行、数据中含分隔符等情况,会让看似简单的文本管道失效。

进程的创建和结束

程序是代码与数据,进程是运行中的程序实例。fork 创建子进程,exec 系列调用用另一个程序替换当前进程的程序映像。成功的 exec 不返回,也不创建新的进程编号。

子进程退出后,父进程通常通过 wait 或 waitpid 获取退出状态。如果尚未回收,子进程可能处于僵尸状态;它已不执行代码,保留的是退出信息等少量内核记录,并不是整份程序内存继续运行。孤儿进程可由 init 或指定的子收割进程接管。见 wait(2)。

信号、进程组与通信

在通常的交互式终端中,Ctrl+C 向前台进程组发送 SIGINT,Ctrl+Z 发送 SIGTSTP。Shell 利用进程组和会话管理前后台作业。信号适合通知状态变化;传输业务数据则常用管道、套接字或共享内存。

很多信号可以被捕获或忽略,但 SIGKILL 和 SIGSTOP 不能。共享内存虽然省去了部分复制,也需要参与进程自己约定同步方式。具体规则见 signal(7)。

理解这些关系后,再看命令就不再只是背参数:权限问题回到对象和身份,磁盘问题回到文件与打开引用,服务退出问题回到进程与信号。

相关文章