Unix/Linux四层知识骨架:从文件系统权限到命令行复习指南
简介:这份《Unix/Linux基础讲义》面向刚接触操作系统课程、需要补齐命令行使用与系统概念的初学者,也适合计算机专业低年级学生、运维入门者和转行学习者用于课堂教学、实验预习与自学复习。讲义先说明操作系统向下封装硬件、向上提供接口的承上启下作用,再梳理Unix从MULTICS、UNICS到BSD与System Ⅲ的演进,以及Linux在Minix、GNU计划、POSIX标准和互联网推动下逐步成形的脉络,并延伸到内核版本与发行版、两类用户、远亲关系、Unix与Linux的联系和区别,以及服务器、嵌入式等开发应用领域。文中对多用户、多任务、实时处理、稳定高效、安全可移植等特性也有概述。压缩包内共1个doc文档,大小约13.46MB,内容按章节组织,便于阅读、整理笔记和考前回顾。已有326人学习,可用于理解Unix/Linux家族关系、建立系统知识框架并查漏补缺。
1. 知识地图:Unix/Linux 的知识骨架可以分成四层
Unix/Linux 学到最后,你会发现它并不是一堆命令的集合,而是四层叠起来的东西:最底层是操作系统的定位与历史脉络,包括它为什么存在、Unix 和 Linux 各自怎么来的、内核和发行版是什么关系;往上一层层是文件系统,包括单一根目录、FHS 规范、一切皆文件这层抽象;再往上是权限,包括三类用户乘三种权限拼出的九位组合;最上面才是命令行,包括命令格式、帮助体系、文件名匹配和重定向。很多人复习时直接从第四层开始背命令,结果ls -l那十位字符永远记不牢,/etc和/var永远分不清。这份笔记按从下往上的顺序重排一遍,适合已经学过一遍、想系统理清脉络的人,也适合考前想把重点和易错点一次性过筛的人。
2. 历史与定位:从 MULTICS 到发行版的主线怎么理
这一章是全篇的基础。考试里最爱出的简答题几乎都落在这里:操作系统的三个目标、Unix 和 Linux 的血缘、五大支柱、内核版本和发行版本的区别。它们看起来是零散的历史故事,其实是一条因果关系很清楚的线:一次失败的尝试留下概念,一个小项目变成 Unix,一场商业竞争催生变种,一个教学工具启发内核,一套自由软件计划补齐外围,最后拼成一个完整系统。
2.1 操作系统的三个目标与承上启下的位置
教材开篇给操作系统的目标只有三条,但每一条都要能展开成一句话。方便,是使计算机系统易于使用;有效,是以更有效的方式使用计算机系统资源;扩展,是方便用户有效开发、测试和引进新功能。这三条分别对应「用户体验、资源效率、可演进性」,答题时按这个顺序写,比死背原文更稳。
更关键的是操作系统的地位:向下封装硬件,向上提供操作接口。这句话是整个 Unix/Linux 体系的解释器。后面所有的「一切皆文件」「设备文件」「/proc 目录数据在内存里」,本质上都是这句「向下封装」的具体实现手法:硬件差异被藏进内核和/dev里,应用程序只面对一套统一的接口。我习惯把它当成一个黑匣子来看:上面的人只管调用,下面的人只管适配,中间那层就是操作系统。
提示:这三个目标和「承上启下」这一定位,是后面解释「为什么要有文件系统抽象」和「为什么权限要分三类用户」的出发点,答题时常常需要回溯到这几句话。
2.2 Unix 家族:一条被商业竞争拖慢的时间线
Unix 的历史不是按年份平铺的流水账,每一年都能对应一个「为什么」。梳理成表格,复习时看一列就够:
| 时间 | 关键事件 | 复习时要抓住的点 |
|---|---|---|
| 1965 | 多方合作启动 MULTICS,目标是多使用者、多任务、多层次 | 项目因过于复杂而失败,但概念被继承下来 |
| 1969 | 一组开发者做出 UNICS,后改名 Unix,用 B 语言和汇编混合编写 | 诞生之初就带「多任务」属性 |
| 1971 | C 语言被发明出来 | 语言与系统同源,为后面的重写埋下伏笔 |
| 1973 | 用 C 语言重写 Unix | 可移植性的真正起点,不再绑死在一种机器上 |
| 1974 | Unix 第一次走出原开发机构 | 政府机关、研究机构、企业、高校开始注意到它 |
| 1980 | BSD 版本线与商业版本线并行竞争 | 「Unix 战争」爆发,变种大量出现 |
| 1982 | 第一个商业版本发布,不再开源 | 开源与闭源正式分岔,价格开始成为门槛 |
| 1992—2001 | 长达近十年的版权官司 | 商业版本因昂贵局限在大型机,BSD 因官司失去发展窗口 |
这张表最容易被忽略的其实是最后两行。前面讲的是「技术怎么来的」,最后两行讲的是「机会怎么让出来的」:Unix 稳定、高效、安全、功能强大,但平台要求高、价格昂贵,普通用户难以使用;BSD 本来有机会,却被版权问题拖住了。这段空档,正是后来 Linux 崛起的缝。
2.3 Linux 家族的五大支柱:Unix、Minix、GNU、POSIX、互联网
Linux 不是凭空出现的,教材把它拆成五个支柱,这个五分法本身就是一道标准简答题,必须能默写并解释各自的作用。
Unix 操作系统提供了设计范式和「类 Unix」这个目标形态。Minix 操作系统提供了一个可读的教学范本:它仿照 4.3BSD 的源码,用约 12000 行 C 语言白手起家写成,本身只是教学工具,没有太多实际应用价值,但它证明了一个人也能写内核。GNU 计划补的是外围工具链:GNU 是「GNU is Not Unix」的递归缩写,1984 年发起,目标是开发一套免费、类 Unix 的操作系统及开发工具,Emacs 编辑系统、BASH shell、GCC、GDB 都出自这个体系。POSIX 标准补的是接口统一:它定义了操作系统应该为应用程序提供的接口标准,用来统一 Unix、Linux 各分支的编程接口,提高通用性和可移植性。互联网补的是协作方式:全世界的修改能汇总到同一个地方,由社区甄别后决定是否进入主线。
把五个支柱串起来看,逻辑非常顺:Unix 给方向,Minix 给样板,GNU 给工具,POSIX 给接口约定,互联网给协作渠道。1990 年前后,一个开发者决定写自己的 Minix 替代内核,1991 年正式发布,随后与 GNU 软件结合,1992 年一套完全自由的操作系统正式诞生,这就是常说的 GNU/Linux,简称 Linux。
2.4 内核版本与发行版本:心脏和外衣的区别
这两个概念混起来,是后面所有版本问题的根源。内核是系统的心脏,是运行程序和管理磁盘、打印机等硬件设备的核心程序,它在裸设备与应用程序之间提供了一个抽象层。内核版本分两条线循环推进:稳定版具有工业级强度,可以广泛应用和部署,新版本相对旧版主要修正 bug 或加入新驱动;开发版要试验各种解决方案,变化很快。所有源码修改最终汇总到统一入口,由社区甄别后决定是否进入主线。
发行版则是另一回事。它通常包含 Linux 内核、来自 GNU 计划的大量函式库、基于 X Window 的图形界面,再加上桌面环境、办公套件、媒体播放器、数据库这些应用软件。X Window 值得单独记一笔:它是类 Unix 系统图形用户界面的工业标准,最重要的特征之一是结构与设备无关;它采用客户机/服务器结构,主要由 X Server 和 X Client 两部分组成,而且实现与操作系统内核分开,不是 Unix/Linux 的必需构成部分,只是一个可选的应用程序组件。
发行版谱系可以按维护方式粗分:社区维护为主的 Debian 系(含 Ubuntu、Linux Mint 这类衍生版)、企业支持为主的商业系(Fedora、CentOS 这条线)、滚动更新为主的 Arch 系,以及 openSUSE 这类独立路线。记谱系比记排名有用,因为排名年年变,谱系关系几年都不动。
2.5 Unix 与 Linux 的联系:九个特性怎么记才不散
Unix 是工作站上最常用的操作系统,多用户、多任务,允许多人同时访问计算机并同时运行多个任务,稳定、高效、安全、方便、功能强大,从 20 世纪 70 年代起就运行在许多大中小型计算机上;但它对运行平台要求高,只能在特定机型上发挥全部功能,价格也不友好。Linux 是类 Unix 操作系统,免费、不受版权制约、与 Unix 兼容,在 x86 架构上实现了 Unix 系统的全部特性,同时保持高效性和稳定性。
教材列了九个特点:开放性、完全免费、多用户、多任务、良好的用户界面、设备独立性、丰富的网络功能、可靠的系统安全性、良好的可移植性。九条平铺很难背,我按四组归类:成本组(开放性、完全免费)、能力组(多用户、多任务、丰富的网络功能)、体验组(良好的用户界面、设备独立性)、保障组(可靠的系统安全性、良好的可移植性)。答题时先报组名再展开,条理立刻出来。
应用领域同样按三块记:服务器领域是应用最多的一块,可提供 Web、FTP、邮件、DNS、缓存等服务,支持集群与虚拟主机;嵌入式领域是把 Linux 剪裁修改后在嵌入式计算机系统上运行,支持多种 CPU 和硬件平台,剪裁性好,代表有 Embedix、uCLinux、muLinux;桌面应用领域强调办公、多媒体、网络一体化,办公套件有 openOffice、KOffice 这类。这三块的分法背后是同一件事:内核可剪裁、接口统一,所以同一套东西能同时铺到服务器、嵌入式和桌面上。
3. 文件系统与权限:单一根目录、FHS 与三组九位
这一章是整份讲义里信息密度最高的部分。目录结构靠背,路径规则靠理解,权限靠一张十位字符的输出反复练。三者其实是一条链:目录树定义了「东西在哪」,路径定义了「怎么找到」,权限定义了「能不能动」。
3.1 目录与路径:绝对路径为什么一定以 / 开头
目录是一组相关文件的集合,一个目录下面除了文件还可以放子目录。确定文件位置时,DOS 和 Unix/Linux 都采用「路径名 + 文件名」的方式,路径反映的是目录与目录之间的关系。差别在分隔符:Unix/Linux 用斜杠/,DOS 用反斜杠\。这个细节在写脚本时经常引发错误,尤其在跨平台配置文件里。
绝对路径从目录树的树根/开始往下,直到到达文件所经过的所有节点目录,下级目录接在上级目录后面用/隔开。因为它总是从根出发,所以第一个字符一定是/,这是判断绝对路径最快的方法。相对路径指目标目录相对于当前目录的位置,如果目标不在当前目录下,就要用两个特殊目录:.指向当前目录本身,..指向上一级目录。
实际使用里,.和..承担了大量隐式工作。cd ..回上级,./run.sh表示执行当前目录下的脚本,../conf/app.ini表示上一级目录里的配置文件。写脚本时用绝对路径更稳,因为相对路径会随执行位置变化;但交互操作时用相对路径更快。这两种选择没有对错,只有场景差别。
3.2 从盘符到单一根:Windows 与 Linux 的差别和 FHS 目录表
在 Windows 下打开「计算机」,看到的是一个个驱动器盘符,每个驱动器有自己的根目录结构,形成多棵树并列。Linux 下看不到盘符,只有一个根目录/,所有分区都挂载到这唯一的根上。教材里有句话说得很好:无论哪个发行版,桌面和应用只是 Linux 的外衣,文件组织和目录结构才是 Linux 的内核。
早期的 UNIX 由各家厂商自定义目录,比较混乱。1994 年推出了 FHS(Filesystem Hierarchy Standard,文件系统层次结构标准),规定了根目录下各文件夹的名称和作用,统一了命名混乱的局面。这张表必须能默写主干:
| 目录 | 作用 | 记忆抓手 |
|---|---|---|
/ | 根目录,有且只有一个,一切都从这里开始 | 树的起点 |
/bin、/usr/bin | 可执行二进制文件,如 ls、tar、mv、cat | 普通用户能用的命令 |
/boot | 系统启动相关文件,如内核文件、引导管理器 | 开机时最先读的地方 |
/dev | 设备文件,访问其中某个文件等于访问某个设备 | 一切皆文件的落点 |
/etc | 系统配置文件,不建议放可执行文件 | 改配置先来这里 |
/home | 普通用户家目录,~表示当前用户家目录 | 用户数据 |
/lib、/usr/lib、/usr/local/lib | 系统使用的函数库 | 程序运行时要调用的库 |
/lost+found | 系统异常产生错误时存放遗失片段 | 出过事才用得上 |
/mnt、/media | 光盘等设备的默认挂载点 | 临时挂载 |
/opt | 给主机额外安装软件的位置 | 第三方软件 |
/proc | 数据在内存中的虚拟目录,不占磁盘 | 看内核、设备、网络状态 |
/root | 超级管理员的家目录 | 不是/home/root |
/sbin、/usr/sbin、/usr/local/sbin | 管理员用的可执行命令,如 fdisk、shutdown、mount | 权限更高的一组命令 |
/tmp | 临时文件,任何人都能访问,重要数据不能放 | 关机可能清空 |
/srv | 服务启动后需要访问的数据 | 服务数据 |
/usr | 应用程序存放目录,含共享数据、文档、手册 | 软件主仓库 |
/var | 经常变化的文件,如日志、邮件、PID 文件 | 会「长大」的目录 |
这张表不要横着背,按用途分组背更省力:启动相关是/boot;命令相关是/bin、/sbin及其/usr下的对应目录;配置相关是/etc;库相关是/lib及其变体;用户相关是/home、/root;设备与挂载是/dev、/mnt、/media;运行时与变化数据是/proc、/var、/tmp;软件与数据是/usr、/opt、/srv、/lost+found。按组记,考场上被问到某个目录,先定位组再定位具体项,比线性回忆可靠得多。
3.3 一切皆文件与五种文件类型
Unix/Linux 把数据文件、程序文件、设备文件(LCD、触摸屏、鼠标)、网络文件(socket)统统抽象为文件,用统一方式管理。这层抽象的价值,直接对应上一章那句「向下封装硬件」:鼠标和文本文件在接口层面长得一样,都是可以被 open、read、write 的对象。也正因为如此,Unix/Linux 里的文件可以没有扩展名,扩展名更多是给人看的,不决定文件性质。判断真实类型用file命令,后面跟文件名查单个,跟通配符*查当前目录全部。
常用文件类型有五类。普通文件用于存放数据、程序等信息,一般长期放在外存中,包括文本文件、数据文件、可执行二进制程序。目录文件被系统当成一种特殊文件,用来构成树型结构,只允许系统管理员修改,用户进程可以读取但不能修改;每个目录文件至少包含两个条目,.表示该目录本身,..表示上一级目录。设备文件把每个设备映射成一个文件,分字符设备和块设备:字符设备以一个字符为单位存取,块设备以字符块为单位存取,每一种 I/O 设备对应一个设备文件放在/dev下。管道文件多用于进程间通信。链接文件类似快捷方式,分软链接(符号链接)和硬链接。
ls -l输出的第一位就是类型标记:d目录、-普通文件、c字符设备、b块设备、l软链接,另有s、p这类特殊类型。记住这一位,比记「五类」的抽象定义更实用,因为考试和实际排查都是先看这一位。
3.4 三类访问用户与三种访问权限
文件权限是文件的访问控制权限,即哪些用户和组可以访问文件、能执行什么操作。Unix/Linux 是典型的多用户系统,不同用户地位不同,对文件和目录有不同权限,所以除了严格界定用户权限,还在身份认证、访问控制、传输安全、文件读写权限等方面做了控制。
访问用户分三类。所有者是创建文件的用户,可以允许同组用户访问自己的文件。用户组是把用户组合起来的单位,某一类或某个项目中的所有用户可以被归为一个组,组内成员按组权限访问。其他用户是系统内除前两类之外的所有人。用一个生活化的类比:一个空间属于我,我是所有者,想怎么访问就怎么访问;我设置允许好友访问,好友就相当于用户组;我开放给所有人,所有人就是其他用户。
访问权限分三种,关键在于文件和目录下的含义完全不同,这是全篇最容易被忽略的对照:
| 权限 | 对文件 | 对目录 |
|---|---|---|
读r | 读取文件内容 | 浏览目录(能 ls) |
写w | 新增、修改文件内容 | 删除、移动目录内的文件 |
执行x | 执行该文件 | 进入该目录(能 cd) |
对目录来说,w不是「修改目录本身」,而是「删除、移动目录内的文件」;x不是「运行目录」,而是「进入目录」。这两条一旦记混,排查权限问题就会变成没有方向地乱试:明明文件有读权限却打不开,很可能是路径上某一级目录缺少x。另外要记住,通常只有文件的属主或超级用户才能改变文件的读写权限。
3.5 ls -l 十位怎么读,数字权限怎么算
ls -l的输出可以拆成十位加若干列。第一位是文件类型,后九位分三组,依次是所有者、用户组、其他用户的权限,每组三位,顺序固定为读、写、执行。三组权限乘以三种类型,构成九种权限组合。
# 查看当前目录下文件的权限详情 ls -l # 输出示例: # -rw-r--r-- 1 user group 1024 Mar 1 10:00 report.txt # 第 1 位 - 普通文件 # 第 2-4 位 rw- 所有者:可读可写,不可执行 # 第 5-7 位 r-- 用户组:只读 # 第 8-10位 r-- 其他用户:只读数字表示法把三位权限换算成一个数:r=4、w=2、x=1,三组相加。于是644就是所有者读写、组和其他只读;755是所有者全权限、组和其他读加执行;777是所有人都全权限,实际使用中要谨慎,尤其不要在多人共用的目录里随手给。
# 给脚本设置 755:所有者可读写执行,其他人只读和执行 chmod 755 run.sh # 只给所有者补上执行权限,其余两组保持不变 chmod u+x run.sh # u 所有者、g 用户组、o 其他用户、a 全部,+ 表示增加、- 表示去掉这两段命令背后的逻辑值得多说一句:数字法适合一次性设定完整权限,符号法适合在原权限上做增量修改。实际维护中,符号法更安全,因为它不会把其他两组的权限误改掉;数字法更常用于新建脚本或部署时的批量设定。
4. 命令行:命令格式、帮助体系与文件名匹配
命令行这一层看着零散,其实只有三件事:一条命令由哪几部分组成、不会用时去哪里查、文件名怎么写才能一次匹配一批。把这三件事理顺,剩下的命令都是查手册的事。
4.1 命令格式拆解与为什么选项可以省略
Linux 命令的通用格式是:
command [-options] [parameter1] ...command是命令名,通常是相应功能的英文单词或缩写;[-options]是选项,用来对命令进行控制,方括号表示可选,省略也能执行;parameter1 ...是传给命令的参数,可以是零个、一个或多个。理解这个格式的关键在于分清「选项改变行为」和「参数指定对象」:ls -l /etc里-l决定「怎么列」,/etc决定「列哪里」。
早期 Linux 没有图形界面,所有操作全靠命令完成;现在图形界面很友好,但开发过程中命令行仍占很重要位置,许多功能在命令行下比图形界面更快。教材里有句话很直白:不会命令行,就不算会 Linux。发行版里命令最少的也有 200 多个,需要掌握的是高频的那一批,而不是全部。
4.2 --help 与 man:八个 section 怎么选
查帮助有两条路。--help一般是命令自带的帮助信息,但不是所有命令都有这个选项,能不能用要试。man是更完整的手册,包含绝大部分命令和函数的使用说明,并且按章节(section)组织,分节的意义必须记住:
| 章节 | 内容 | 典型例子 |
|---|---|---|
| 1 | 标准命令 | 普通可执行命令 |
| 2 | 系统调用 | open、write |
| 3 | 库函数 | printf、fopen |
| 4 | 特殊设备说明 | /dev下各种设备 |
| 5 | 文件格式 | passwd |
| 6 | 游戏和娱乐 | 小工具类 |
| 7 | 杂项、惯例与协定 | 文件系统、网络协议、ASCII 码、全局变量 |
| 8 | 管理员命令 | ifconfig 这类 |
用法是man [选项] 命令名。常用功能键也要记:空格翻下一屏,Enter 滚动一行,b回滚一屏,f前滚一屏,q退出,h列出所有功能键,/word搜索字符串。
最容易出错的地方在于重名:命令名和函数名可能刚好一样,比如printf既是命令也可以是库函数。如果不指定章节号,man printf会按章节顺序先命中第 1 节,只看到命令用法,看不到库函数说明。所以规范写法是man 1 ls表示查第 1 节的标准命令,man 3 printf表示查第 3 节的库函数。日常可以偷懒写man ls,但一旦发现查不到想要的内容,第一反应应该是补章节号。
4.3 ls 的参数与通配符:一次匹配一批文件
ls是 list 的缩写,列出目录内容,类似 DOS 下的 dir。文件名最长可以有 256 个字符,.代表当前目录,..代表上一级目录,以.开头的文件是隐藏文件,需要-a才能显示。三个高频参数:-a显示所有子目录和文件包括隐藏文件,-l以列表方式显示详细信息,-h配合-l以人性化方式显示文件大小。-l和-h几乎总是成对出现,因为它们解决的是同一个问题:看得清每一项到底多大。
通配符是这一节真正有价值的部分,它让一条命令能作用到一批文件:
| 通配符 | 含义 | 示例 |
|---|---|---|
* | 代表文件名中任意多个字符 | ls te*找以 te 开头的文件;ls *html找以 html 结尾的文件 |
? | 代表文件名中任意一个字符 | ls ?.c找第一个字符任意、后缀为 .c 的文件 |
[] | 字符组,匹配其中任意一个,-表示范围 | [abc]匹配 a、b、c 中任意一个;[a-f]匹配 a 到 f 范围内任意字符 |
\ | 转义,让通配符变回普通字符 | ls \*a查找文件名为*a的文件 |
两个细节常被忽略:一是-只有写在方括号内才表示范围,ls a-f查找的是名为 a-f 的文件,此时-失去通配符作用;二是?和*处在方括号内时不用转义就失去通配符作用,变成普通字符。这两条在考试里出现频率不高,但在实际写脚本时经常是「明明该匹配到却没匹配到」的真正原因。
4.4 输出重定向:让结果从屏幕落到文件
Linux 允许把命令执行结果重定向到文件,本应显示在终端上的内容就被保存下来。>是最基础的一个,文件不存在则创建,存在则覆盖内容。
# 把 ls 的结果写入 test.txt:不存在则创建,存在则覆盖 ls > test.txt # 追加写入:保留原内容,把新结果接在文件末尾 ls >> test.txt # 把标准错误也一起收进文件:2>&1 表示把错误流并到标准输出流 ls /not/exist > out.txt 2>&1三个写法的区别要能一口说清:>是覆盖,>>是追加,2>&1是合并错误流。覆盖和追加搞反,是日常最容易造成数据丢失的一类操作——本想追加日志,结果用了>,前一天的记录直接被清空。这个操作没有撤回办法,只能靠习惯:写重定向之前先想清楚是「记录」还是「重建」。
4.5 自动补全与历史命令:两个被低估的效率工具
敲命令时按下 Tab 键,系统会自动补全命令或路径,这是减少拼写错误最直接的办法。命令执行过之后,可以用上下方向键翻看以前的命令,history会把执行过的命令列出来。这两个功能看着不起眼,但在长路径和复杂参数场景下作用很大:路径越长,Tab 的价值越高;命令越复杂,历史记录的复用价值越高。
使用上有个小习惯值得养成:先用history找到旧命令,再用方向键调出来改参数,比重新敲一遍快,也不容易漏掉某个选项。补全则要注意歧义情况,当多个文件同前缀时,Tab 一次补不全,按两次会列出候选,这时候再补几个字符区分。
5. 易漏点:五处最容易被复习滑过去的地方
这一章列的五个点,共同特征是「看教材时觉得懂了,做题或上手时才发现没懂」。每个点都按「错在哪里、为什么会漏、怎么补」写,方便直接对照自己的笔记查。
易漏点一:把目录结构当单词表背,只记名字不记归属
很多人能背出/etc是配置文件、/var是变化文件,但被问到「日志在哪」「用户家目录在哪」「内核在哪」时要现场反应。问题出在记忆方式是线性排列,而不是按功能分组。补法是重排顺序:先按「启动、命令、配置、库、用户、设备、运行时、软件」八组归类,再在组内记具体目录。组内项数少,回忆时先定组再定项,命中率高得多。另外要牢记一条:根目录下一般只存放目录,所有东西都从/开始,/home不是「home 盘」,而是根下的一个目录。
易漏点二:权限只记 rwx 对文件的含义,忘了对目录的 w 和 x
教材讲权限时通常先讲文件,目录那半句跟在后面,很容易被一眼扫过去。结果是遇到「文件有权限但打不开」「能进目录但删不掉文件」这类问题时完全没方向。补法是把目录的w和x单独抄一行贴在笔记最上方:目录的w是删除和移动目录内文件,x是进入目录。再配一个自查顺序:先看文件本身的九位,再逐级看路径上每一层目录有没有x,最后才怀疑属主和用户组身份。
易漏点三:把内核版本和发行版版本混为一谈
看到版本号就默认是「系统版本」,是初学阶段最常见的混淆。内核是心脏,管程序和硬件,分稳定版和开发版两条线循环;发行版是内核加 GNU 函式库、图形界面和一堆应用软件的组合。补法很简单:以后看到任何版本号,先问一句「这是内核的还是发行版的」。再记一个结构式:发行版 = 内核 + GNU 函式库 + X Window + 应用软件;其中 X Window 采用客户机/服务器结构,由 X Server 和 X Client 组成,与内核分开,不是必需组件。这个结构式能同时解释「为什么同一内核能有这么多发行版」和「为什么图形界面起不来但系统还活着」。
易漏点四:man 不指定章节号,然后就下结论说查不到
man printf只看到命令用法、看不到库函数说明,很多人会以为手册不全。原因是 man 按章节号顺序搜索,第 1 节命中就不再往下找。补法是形成习惯:查命令用man 1,查系统调用用man 2,查库函数用man 3,查配置文件格式用man 5。同时在笔记里保留那张八节表,尤其是第 1、2、3、5、8 这五个高频节。
易漏点五:「一切皆文件」只当口号背,遇到 /dev 和 /proc 就卡住
这句话背起来顺口,但真正的考点在落地:设备文件放在/dev,访问其中某个文件等于访问某个设备;/proc的数据都在内存里,不占磁盘空间,里面有 CPU、中断、DMA、I/O 端口、网络状态这些信息。补法是把「一切皆文件」拆成三层来理解:数据文件、程序文件被抽象为文件;设备被映射为文件,分字符设备和块设备;网络连接也被抽象成文件。三层都能举出对应目录,这句话才算真的掌握了。顺带记住文件类型的第一位标记d、-、c、b、l,看ls -l时先读这一位,比背五类定义快。
6. 复习清单:把四层知识压成一张自查表
复习这件事,最怕的是「看过一遍就以为会了」。我的做法是把四层知识压成一张表,每行一个自查问题,要求自己不看笔记、用一句话答出来。答不上来的行就是漏洞,直接回到对应章节补,不从头再读一遍。
| 层级 | 自查问题 | 答不上来就看 |
|---|---|---|
| 定位 | 操作系统的三个目标是什么?承上启下具体指什么? | 第 2.1 节 |
| 历史 | Unix 时间线上哪一年对应「可移植性起点」?哪两行解释了 Linux 的机会? | 第 2.2 节表 |
| 支柱 | 五大支柱分别是哪一个?GNU 的递归缩写和目标是什么? | 第 2.3 节 |
| 版本 | 稳定版和开发版的差别?发行版由哪几部分组成?X Window 是不是必需? | 第 2.4 节 |
| 特点 | 九个特点能否按四组复述?三块应用领域分别是什么? | 第 2.5 节 |
| 路径 | 绝对路径为什么第一个字符一定是/?.和..各指什么? | 第 3.1 节 |
| 目录 | 能否不看表说出八组目录及其代表项?/root和/home的区别? | 第 3.2 节表 |
| 文件 | 五种文件类型分别是什么?ls -l第一位各字母含义? | 第 3.3 节 |
| 权限 | 目录的w和x各是什么?644、755分别代表什么? | 第 3.4、3.5 节 |
| 命令 | 命令格式三段各是什么?--help和man的适用差别? | 第 4.1、4.2 节 |
| 手册 | 八个 section 分别装什么?为什么man 3 printf要写章节号? | 第 4.2 节表 |
| 匹配 | *、?、[]、\各是什么?-什么时候失效? | 第 4.3 节表 |
| 重定向 | >和>>的区别?2>&1在做什么? | 第 4.4 节 |
表格用过一轮之后,我建议再补两个动手环节,比反复看笔记有效。
第一个是默写目录树。拿一张白纸,从/开始往下画三层,只写目录名和一句话作用,限时五分钟。画完对照第 3.2 节的表,漏掉的项用红笔补上。这个练习的价值在于暴露「以为自己记得其实记不住」的部分,尤其是/lost+found、/srv、/opt这类平时很少碰的目录。
第二个是手写命令并解释参数。把ls -alh、ls te*、ls ?.c、ls [a-f]*、ls \*a、ls > test.txt、ls >> test.txt这几条写在纸上,每条旁边标出「哪个是选项、哪个是参数、匹配或写入的是什么」。写不出来就说明通配符和重定向还停留在「见过」的阶段,没有到「会用」的阶段。
最后留一个查漏补缺的方法:把第 5 章那五个易漏点当成自测题,每条用 30 秒口述「错在哪、为什么漏、怎么补」。五条都能流畅说出来,这一轮复习就可以收了;卡住的那条,就是下一轮唯一需要重看的地方,不必再把整章读一遍。
说个自己的教训。最早学权限那一节时,我把rwx对文件的含义背得很熟,目录那句顺手划了过去,结果第一次在服务器上删不掉一个文件,对着ls -l看了十几分钟,反复确认文件权限没问题,最后才发现是所在目录缺w。从那以后,我每次看权限都强制走一遍顺序:先读十位定类型和九位权限,再看路径上每一级目录的x和w,最后才看属主和组。这个顺序固定下来之后,同类问题基本没再翻过车。希望帮到你。
本文还有配套的精品资源,点击获取