简介:《鸟哥的Linux私房菜-基础篇》第四版是一份面向Linux初学者的入门学习资料,适合具备基本计算机使用能力、希望系统掌握Linux操作系统的读者,也适用于有一定经验的IT技术人员查漏补缺。内容从计算机组成与操作系统原理讲起,逐步延伸到Linux文档查看方法(man页、info页)、常见实用文档的位置与使用、nano文本编辑器操作以及SELinux安全管理等知识点,并配有大量实际操作讲解,帮助读者理解基本概念、熟悉常用工具,培养独立解决常见问题的能力。资源包内含1个PDF文件,大小约17.5MB,便于在电脑或移动设备上随时翻阅。目前已有1235人学习下载,说明该资料在Linux入门群体中具有较高的认可度。对于希望为后续深入研究Linux或类Unix系统打下扎实基础的读者,这份资料提供了较为完整且循序渐进的学习路径。
1. 从「内存越大越快」说起:Linux 到底跑在什么之上
很多人第一次听到「Linux 基础」这四个字,脑子里浮现的是命令、权限、目录树。但真正决定你后面学得顺不顺的,其实是一个更底层的问题:你敲下的那行命令,究竟经过了哪些硬件单元才变成屏幕上的结果。如果这个问题没想清楚,后面学man、学nano、学 SELinux,都只是背结论。
一个反直觉的结论是:系统慢,往往不是 CPU 不行,而是数据搬运的路径太长。所有要运算的数据,必须先进入主存储器,CPU 才能读取;CPU 算完,还得先写回主存储器,才能送到输出设备。硬盘里的东西,也得先搬进内存,CPU 才看得见。这条「数据必经内存」的规则,是理解 Linux 性能、理解为什么服务器要堆内存的第一块基石。搞懂它,你再看后面所有工具,都会多一层「它到底在跟谁打交道」的判断力。
2. 五大单元与数据流:为什么 CPU 不能直接读硬盘
2.1 输入、输出、控制、运算、存储,缺一不可
把一台主机拆开看,硬件可以归成五个单元:输入单元(键盘、鼠标、触控屏)、输出单元(屏幕、打印机)、CPU 内部的控制单元、CPU 内部的算数逻辑单元,以及主存储器。前两个负责和外界打交道,中间两个负责判断和计算,最后一个负责暂存。
关键在于它们之间的连线方向。数据不是从硬盘直接飞进 CPU 的,而是:输入设备 → 主存储器 → CPU → 主存储器 → 输出设备。CPU 发出的控制命令决定数据往哪流,但 CPU 真正拿来运算的数据,全部来自主存储器。这就是为什么「加内存能提速」不是玄学——内存不够时,系统要频繁把暂时不用的数据释放掉,腾出空间给新数据,这个反复腾挪的过程就是性能损耗。
提示:这条数据流规则同样适用于手机。手机参数里内存容量被反复强调,原因和服务器堆内存是同一个。
2.2 用人体类比,把抽象关系钉死
如果纯看框图还是记不住,可以借一个人体模型来锚定:CPU 是脑袋,主存储器是脑袋里「正在思考的那块区域」,硬盘是「存放回忆的记忆深处」,主板是神经系统,各种接口设备是手脚皮肤,显示适配器是脑袋里形成的影像,电源是心脏。
这个类比的价值在于,它解释了一个容易混淆的点:硬盘和内存不是一回事。内存是「现在正在处理的信息」,断电就没了;硬盘是「要长期留存的回忆」,断电还在。所以当你打开一个文件,系统做的第一件事是把文件从硬盘搬进内存,CPU 才有办法处理它。理解了这一层,后面学文件系统、学缓存、学 swap,都不会觉得突兀。
2.3 容量单位与速度单位,为什么硬盘标称总比实际小
计算机只认 0 和 1,一个 0/1 叫一个 bit,8 个 bit 组成一个 byte。容量往上走有 K、M、G、T,但这里埋着一个坑:二进制下 1K = 1024,十进制下 1K = 1000。硬盘厂商算容量用的是十进制,操作系统显示用的是二进制。
所以一块标称 500GB 的硬盘,格式化后只剩 460GB 左右。换算一下就清楚:500 × 1000 × 1000 × 1000 Byte,再除以 1024 的三次方,约等于 466GB。这不是厂商骗人,而是硬盘最小物理单位是扇区(sector),容量按「多少个扇区」来算,天然走十进制。速度单位则相反,常走十进制,比如 1GHz 就是 1000×1000×1000 Hz;网络传输用的 Mbps 是 Mbit per second,换成文件容量要除以 8,所以 20M 的带宽理论下载速度约 2.5MByte/s。
# 查看内存容量,注意系统显示的是二进制口径 free -h # 输出里的 total 就是内核识别到的可用内存,单位 GiB 是二进制这段命令的-h参数表示 human-readable,自动换算成人看的单位。free读的是内核维护的内存统计,和硬盘标称的十进制口径不同,对比时别混用。
3. CPU 架构与频率:RISC、CISC 和那个骗了无数人的「主频」
3.1 两种指令集设计哲学
CPU 内部有一组微指令集,软件最终都要翻译成这些指令才能跑。指令集设计分两大流派:精简指令集(RISC)和复杂指令集(CISC)。
RISC 的指令精简,每条执行时间短、动作单纯,效率高,但要做复杂的事得靠多条指令拼。典型代表是 ARM 系列,手机、平板、导航设备、网络设备几乎都是它,论使用范围它可能是最广的。CISC 则相反,单条指令能干的活多、指令数目庞大、长度不一,执行一条花的时间更长。x86 架构就是 CISC 的代表,个人计算机大量使用它。
为什么叫 x86?因为最早那颗 CPU 代号 8086,后来顺着 80286、80386 一路排下来,架构就被叫成 x86。2003 年后 AMD 把它扩展到 64 位,为了和老的 32 位区分,64 位个人计算机 CPU 统称 x86_64。
3.2 位宽决定了内存上限
「位」指的是 CPU 一次能读取的最大数据量。64 位 CPU 一次能读写 64bit,32 位只能读 32bit。因为读取量有限制,能从内存读写的数据也就有限制,所以 32 位 CPU 最大只能支持约 4GB 内存。这就是为什么老机器插再大内存也认不全——不是主板不认,是 CPU 的寻址宽度卡死了。
3.3 外频、倍频与超频的真相
早期 CPU 通过北桥连接内存和显示适配器,所有设备工作频率要一致,于是有了前端总线(FSB)。但 CPU 比其他设备快太多,厂商就在 CPU 内部再加速,于是有了外频和倍频:外频是 CPU 与外部组件传输的速度,倍频是内部加速的倍数,两者相乘才是 CPU 频率。比如外频 333MHz、倍频 9,频率就是 3.0GHz。
所谓超频,就是改外频或倍频。倍频通常出厂锁死,所以玩家多改外频。但外频一改,主板其他组件的频率也跟着变,可能从 333MHz 拉到 400MHz,整机频率变成原来的 1.333 倍,CPU 是快了,但可能当机。后来内存控制器被整合进 CPU,CPU 能直接和内存、显示适配器分别沟通,不再需要北桥,频率设计也就不必再迁就同步的外频。
# 查看 CPU 型号、核心数、频率 lscpu # 关注这几个字段: # CPU(s) 逻辑核心总数 # Model name CPU 型号 # CPU MHz 当前运行频率(会动态变化) # CPU max MHz 最高可自动加速到的频率lscpu从/proc/cpuinfo和 sysfs 汇总信息。注意CPU MHz是实时值,会随负载上下浮动,看到它一直在变不要慌,那是节能和自动加速机制在工作,不是系统坏了。
3.4 超线程:一个物理核心怎么装成两个
超线程(Hyper-Threading)的做法是:在每个 CPU 内部把关键的寄存器分成两群,让两个程序分别使用这两群寄存器,于是两个程序可以「同时竞争 CPU 的运算单元」,而不是靠操作系统来回切换。这样操作系统会以为有两个核心,比如四个物理核心能被识别成八个逻辑核心。
但物理运算单元只有一个,所以超线程是 case by case 的:有些场景提升明显,有些场景反而因为争抢资源导致性能下降。判断依据是你的负载能不能把运算单元喂饱——喂不饱时超线程收益大,喂太饱时反而添乱。
4. 内存、主板与芯片组:数据高速公路是怎么修的
4.1 DRAM 与 DDR 的演进逻辑
个人计算机的主存储器主要是动态随机存取内存(DRAM),断电数据就消失,所以叫挥发性内存。技术上从 SDRAM 演进到 DDR SDRAM,DDR 是 Double Data Rate,能在一次工作周期里传两次数据,相当于内存界的「倍频」。
带宽的算法是:频率 × 数据宽度。以 DDR3-1600 为例,数据宽度 64bit(即 8 Byte),1600MHz × 8 Byte = 12.8GByte/s。DDR2 频率是 4 倍,DDR3 是 8 倍,DDR4 更快。这里还有个容易踩的坑:DDR3 标准电压 1.5V,DDR3L 是低压版 1.35V,主要给低功耗设备用。如果主板不支持 DDR3L 却硬插,内存可能烧毁。
4.2 多通道与主板芯片组
所有数据都要经过内存,所以内存数据宽度越大越好。传统总线宽度有限,于是有了多通道设计,把多根内存并联起来提升总带宽。主板上负责连接各组件的芯片组,早期分南北桥:北桥连高速的 CPU、内存、显示适配器,南桥连低速的硬盘、USB、网卡。
北桥的问题在于,CPU 读写内存都要经过它,会瓜分它的带宽,而北桥又不可能比 CPU 快,于是它常常成为系统瓶颈。后来主流架构把内存控制器整合进 CPU,CPU 与内存直接交流,不再消耗额外带宽。这也是为什么现在看主板图,往往只看到 CPU 而看不到北桥。
# 查看内存插槽使用情况和每根内存的规格 sudo dmidecode -t memory # 关注: # Size 单根容量 # Speed 运行频率 # Locator 插槽编号 # Configured Memory Speed 实际运行频率dmidecode读的是 BIOS 里的 SMBIOS 表,需要 root 权限。如果发现Configured Memory Speed低于Speed,说明内存没跑在标称频率上,可能是主板或 CPU 内存控制器限制,也可能是插槽搭配不对。
4.3 内存不足时系统在做什么
内存容量不够时,系统要把已存在但暂时没用的数据释放掉,腾出空间给新数据。这个释放动作如果频繁发生,性能就崩了。Linux 作为服务器时,内存容量的重要性有时甚至超过 CPU 速度,原因就在这里。理解这一点,你再看free、看 swap、看 OOM killer,就知道它们都是在处理「内存不够」这个根本矛盾。
5. 避坑与排查:那些年我们在硬件概念上翻的车
5.1 现象:新内存插上去系统认不全
原因:32 位 CPU 寻址上限约 4GB,或者主板芯片组不支持单根大容量内存,或者插槽搭配不对导致多通道失效。 解决:先用lscpu确认 CPU 是否支持 64 位,再用dmidecode -t memory看主板支持的最大容量和插槽规格,逐根排查。
5.2 现象:硬盘标称 1TB,系统只显示 931GB
原因:厂商用十进制算容量,系统用二进制显示,这是口径差异不是故障。 解决:换算公式是标称值 × 1000³ ÷ 1024³。1TB 约等于 931GiB,属于正常范围,不用怀疑硬盘有问题。
5.3 现象:CPU 频率一直在变,以为坏了
原因:现代 CPU 有自动加速和节能机制,空闲时降频省电,有负载时自动超频。 解决:用lscpu看CPU max MHz和CPU min MHz的范围,只要在范围内波动就是正常的,不需要手动干预。
5.4 现象:DDR3L 内存插到老主板上点不亮甚至烧毁
原因:DDR3L 是低压版,部分老主板不支持低压内存,电压不匹配可能损坏硬件。 解决:插之前查主板规格书确认支持的内存类型,不确定就用标准电压版本。
5.5 现象:加了内存但系统没变快
原因:瓶颈可能不在内存,而在硬盘 I/O 或 CPU 单核性能,加内存解决不了。 解决:先用free看内存是否真的吃紧,再用iostat、top定位真正的瓶颈,别盲目加内存。
6. 从硬件认知到 Linux 工具链:为什么先懂计概再学命令
把五大单元、数据流、CPU 架构、内存带宽这些概念串起来,你会发现它们不是孤立的硬件知识,而是后面所有 Linux 操作的底层解释。你敲man查文档,文档存在硬盘上,要先读进内存才能显示;你用nano编辑文件,编辑的内容在内存里,保存时才写回硬盘;你配 SELinux,它管的也是进程能访问哪些资源,而资源最终落在内存和存储上。
所以《鸟哥的 Linux 私房菜》基础篇把「计算器概论」放在第零章,不是凑数。它是在给你一套判断框架:遇到性能问题,先问数据在哪、要经过谁、瓶颈在哪个单元;遇到工具不会用,先问它操作的是内存还是硬盘、是输入还是输出。这套框架比记住多少条命令都值钱。
我自己的习惯是,每学一个新工具,先花两分钟想清楚它在五大单元里处于什么位置、数据从哪来到哪去。这个动作看起来慢,但能省掉后面大量「命令会敲但不知道为什么」的返工。希望帮到你。
本文还有配套的精品资源,点击获取