简介《鸟哥的Linux私房菜-基础篇》第四版是一份面向Linux初学者的入门学习资料适合具备基本计算机操作能力、希望系统掌握Linux概念与常用工具的读者也可供有一定经验的IT技术人员查漏补缺。内容从计算机组成与操作系统原理讲起逐步延伸到man页与info页等文档查看方法、常见实用文档的位置与使用、nano文本编辑器的基本操作以及SELinux安全管理等知识点并配有大量实际操作讲解帮助读者培养独立解决常见问题的能力。资源包内含1个PDF文件大小约17.5MB单文件结构便于在电脑或移动设备上随时翻阅。目前已有1235人学习下载说明其在Linux入门群体中具有一定认可度。对于想为后续深入研究Linux或类Unix系统打下基础的读者这份资料可作为循序渐进的入门读物。1. 从一台“内存不够用”的服务器说起这份第四版基础篇到底能帮你解决什么上周帮朋友看一台测试机现象很典型跑个编译任务系统就卡到 SSH 都敲不动free -h一看可用内存只剩几十兆swap 被吃得干干净净。他第一反应是“CPU 太弱”可我让他把top按内存排序一看罪魁祸首是几个没配好缓存参数的进程。这件事恰好说明一个老问题——很多人上手 Linux 时命令背了一堆但计算机到底怎么把数据从硬盘搬到内存、再交给 CPU 处理这条链路是模糊的。模糊就会导致排错时抓不住重点只能靠重启和玄学。《鸟哥的Linux私房菜-基础篇》第四版就是冲着这个模糊地带去的。它没有一上来就甩命令而是先用“计算器概论”把五大单元、CPU 架构、内存与总线的关系讲透再过渡到 Linux 的文件系统、文档查阅、nano 编辑器和 SELinux 这些实操内容。适合两类人一是非科班出身、想系统补齐计算机基础再学 Linux 的初学者二是已经会用几个命令、但遇到性能或权限问题就卡壳的运维新人。下面我不复述书而是按“怎么把这本书用起来”的思路拆成可复现的步骤和参数。2. 先立住底层模型五大单元与 CPU 架构怎么指导你选型和排错2.1 五大单元不是背概念是排错时的定位地图书里把计算机拆成输入单元、输出单元、控制单元、算术逻辑单元和主存储器五部分并且反复强调一条数据流向所有数据都要经过主存储器CPU 只跟主存储器打交道。这条规则放到今天依然成立而且直接决定你排错时的第一反应。我一般会这样用这个模型当一台机器变慢先问“瓶颈在哪个单元”。如果是 CPU 跑满top里%us高那是算术逻辑单元在忙如果是%wa高说明 CPU 在等 I/O数据还没从硬盘搬到主存储器如果是内存不足导致频繁 swap那就是主存储器这个中转站太小数据被迫在硬盘和内存之间反复倒腾。书里那句“内存容量如果太小数据快取就不足影响效能相当大”说的就是这个中转站的意义。具体到操作你可以用下面这组命令把五大单元的状态量化出来而不是凭感觉# 查看 CPU 整体负载与各核心使用率%us 高说明运算单元忙 top -bn1 | head -20 # 查看内存与 swap 使用available 才是真正可用的内存 free -h # 查看 I/O 等待%wa 高说明数据搬运跟不上 iostat -x 1 3 # 查看 CPU 架构与字组大小确认是 32 位还是 64 位 lscpu | grep -E Architecture|CPU op-mode|Byte Order逻辑说明top的%us对应算术逻辑单元%wa对应数据从存储单元到主存储器的搬运free的available列比free列更值得看因为它扣掉了不可回收的缓存。lscpu里的CPU op-mode(s)如果显示32-bit, 64-bit说明这颗 CPU 支持 x86_64能寻址超过 4GB 的内存。参数上iostat -x 1 3表示每秒采样一次、共三次%util接近 100% 就说明磁盘是瓶颈。提示书里提到 32 位 CPU 最多支持约 4GB 内存这个结论在今天依然成立。如果你在一台 32 位系统上插了 8GB 内存多出来的部分不会被使用free -h里总内存会明显小于物理容量。2.2 RISC 与 CISC 的差异决定你下载软件包时选哪个架构书里把 CPU 架构分成精简指令集和复杂指令集两类并指出 ARM 是 RISC 的代表x86 是 CISC 的代表。这个知识点在下载软件时非常实用你从源码编译也好下预编译包也好第一步永远是确认目标机器的架构。我一般会先跑一条命令确认架构再决定下载哪个包# 查看内核架构x86_64 对应 CISC 的 64 位aarch64 对应 ARM 的 64 位 uname -m # 查看更详细的 CPU 型号与支持的指令集 cat /proc/cpuinfo | grep -E model name|flags | head -4逻辑说明uname -m输出x86_64就选 amd64 或 x86_64 的包输出aarch64就选 arm64 的包。/proc/cpuinfo里的flags能看到sse4_2、avx这类多媒体指令集以及vmx、svm这类虚拟化指令集。书里那张例题表列出的 MMX、SSE、Intel-VT、AMD-SVM就是从这里读出来的。如果你要跑虚拟机宿主机flags里没有vmx或svm那硬件虚拟化就用不了只能走软件模拟性能差一大截。这里有个容易翻车的点书里提到 64 位 CPU 可以向下兼容运行 32 位软件但反过来不行。所以你在 x86_64 机器上装一个标注i386或i686的包通常没问题但把x86_64的包装到 32 位系统上会直接报“无法执行二进制文件”。我一般会在下载页先看架构标签再对一下uname -m这一步花十秒能省掉后面半小时的排查。2.3 容量单位与速度单位为什么 500GB 硬盘只剩 460GB书里专门用一道例题解释了这个现象硬盘厂商按十进制算500GB 等于 500×1000×1000×1000 字节操作系统按二进制算除以 1024 的三次方结果约 466GB。这不是厂商偷工减料而是两套进位制并行导致的。这个知识点在实际运维里有两个延伸用法。第一看df -h和ls -l时要清楚-h是二进制口径而网络带宽的 Mbps 是十进制口径。书里那个例子很经典20M/5M 的线路理论下载速度是 20÷82.5MB/s上传是 5÷8625KB/s。第二做容量规划时别把标称容量当可用容量要留出文件系统元数据和保留块的开销。# 查看文件系统容量-h 是二进制口径-H 是十进制口径 df -h df -H # 查看块设备物理信息sector size 通常是 512 字节或 4096 字节 lsblk -o NAME,SIZE,SECTOR,SCHED # 查看 inode 使用情况inode 耗尽也会导致无法创建新文件 df -i逻辑说明df -h和df -H对比着看能直观感受到两套进位制的差异。lsblk的SECTOR列显示逻辑扇区大小书里提到硬盘最小物理量为 512 字节、最小组成单位为扇区就是这个。df -i是很多人忽略的一项如果 inode 用满即使df -h显示还有空间也创建不了新文件现象是“磁盘没满但写不进去”这时候要查是不是有大量小文件。3. 把文档查阅和 nano 编辑器串成一条日常操作链3.1 man 与 info遇到不认识的命令先查再试书里花了不小篇幅讲 man 页和 info 页这不是凑字数而是 Linux 里最可靠的“后悔药”。我见过太多人遇到不认识的命令就去搜网页结果搜到的版本和本机不一致参数对不上。正确做法是先man因为 man 页就是本机这个版本的说明书。man 页的章节划分要记一下第 1 章是用户命令第 5 章是配置文件格式第 8 章是系统管理命令。同一个词在不同章节含义不同比如passwd在第 1 章是改密码的命令在第 5 章是/etc/passwd这个文件的格式说明。# 查看命令用法默认按章节顺序找 man ls # 明确指定查第 5 章的配置文件格式 man 5 passwd # 在 man 页里搜索关键字按 n 跳下一个N 跳上一个 man find # 进入后输入 /name 回车再按 n 跳转 # info 页适合查 GNU 工具的完整手册比 man 更细 info coreutils逻辑说明man 5 passwd里的5就是章节号这个技巧在查配置文件时特别有用。进入 man 页后/关键字是搜索n是下一个匹配q退出。info页是树状结构适合查coreutils这种包含几十个命令的大包。参数上man -k可以按关键字反查命令比如man -k password会列出所有和密码相关的 man 页。注意有些精简系统没装 man 页跑man ls会提示No manual entry for ls。这时候要么装man-pages包要么用命令 --help看简要说明。别把“查不到”当成“没这个命令”。3.2 nano 编辑器改配置文件的最低成本方案书里介绍 nano 是因为它上手快不用记模式切换。对于改/etc/fstab、/etc/hosts这类小文件nano 比 vim 更不容易翻车因为它的快捷键直接印在屏幕底部。# 打开或新建文件如果文件不存在会直接创建 nano /etc/hosts # 常用操作 # CtrlO 保存回车确认文件名 # CtrlX 退出如果有未保存修改会提示 # CtrlW 搜索输入关键字回车 # CtrlK 剪切当前行CtrlU 粘贴 # CtrlG 查看帮助逻辑说明nano 的CtrlO是写入按完会问文件名直接回车就覆盖原文件。CtrlX退出时如果改了没存会问Save modified buffer?按Y再回车即可。搜索用CtrlW输入关键字后回车光标跳到第一个匹配处。参数上nano -w可以关闭自动换行改配置文件时建议加上避免长行被折断导致语法错误。我一般改配置文件前会先备份这是血泪经验# 改之前先备份出问题能快速回滚 cp /etc/hosts /etc/hosts.bak nano /etc/hosts # 改完检查语法或内容 cat /etc/hosts逻辑说明cp备份这一步花不了两秒但能救命。改完用cat确认内容别急着重启服务。如果是改sshd_config这类服务配置改完先跑sshd -t测试语法通过了再重启否则可能把自己关在门外。3.3 常见实用文档位置别只盯着 man书里提到常见实用文档的位置这一点在排查时很有用。除了 man 和 info/usr/share/doc下通常有软件自带的说明文件/etc下是配置文件/var/log下是日志。我一般会按这个顺序找信息先man再/usr/share/doc/软件名/最后看/var/log里的报错。# 查看软件自带文档目录 ls /usr/share/doc/ | head -20 # 查看某个软件的文档 ls /usr/share/doc/bash/ # 查看系统日志中最近的错误 journalctl -p err -n 20 # 查看登录相关日志 tail -f /var/log/secure逻辑说明/usr/share/doc下常有README、CHANGELOG、examples等目录examples里往往有可直接抄的配置样例。journalctl -p err按优先级过滤只看错误级别。tail -f实时跟踪日志排查登录问题时很有用。参数上-n 20表示只看最近 20 行避免刷屏。4. SELinux 与权限排查为什么文件权限对了还是被拒绝4.1 SELinux 不是“关掉就完事”的开关书里把 SELinux 作为安全管理的一部分这个定位很准。很多人遇到权限问题第一反应是chmod 777还不行就setenforce 0把 SELinux 关了。关掉确实能绕过问题但也把一层安全防护一起关掉了而且下次换台机器同样的问题还会再来。SELinux 的核心是给进程和文件打标签进程只能访问标签匹配的文件。所以当你看到Permission denied但ls -l显示权限是rwx时大概率是 SELinux 在拦。# 查看 SELinux 当前状态 getenforce # 查看文件的安全上下文 ls -Z /var/www/html/index.html # 查看进程的安全上下文 ps -eZ | grep httpd # 查看 SELinux 拒绝日志 ausearch -m avc -ts recent # 临时把某个布尔值打开比如允许 httpd 访问网络 getsebool -a | grep httpd setsebool httpd_can_network_connect on逻辑说明getenforce返回Enforcing表示正在拦截Permissive表示只记录不拦截。ls -Z和ps -eZ看的是user:role:type:level四段关键是第三段type。ausearch -m avc能查到具体的拒绝记录里面会写清楚哪个进程访问哪个文件被拒。setsebool改的是布尔值开关on是临时生效加-P才是永久生效。提示setsebool -P会写入策略重启后依然有效。如果只是临时测试不加-P重启就恢复。别在没搞清楚原因前就setenforce 0那等于把门锁拆了。4.2 用 sealert 把拒绝日志翻译成人话ausearch的输出是原始 AVC 记录看着费劲。sealert能把日志翻译成可读建议告诉你哪条命令可以放行。# 安装 setroubleshoot-server 后可用 sealert -a /var/log/audit/audit.log # 或者直接分析最近的拒绝 sealert -b逻辑说明sealert -a分析指定日志文件输出里会给出suggested commands比如setsebool -P httpd_can_network_connect on或chcon -t httpd_sys_content_t /path。我一般会先看建议再决定是改标签还是改布尔值。参数上-b是分析启动以来的记录适合快速定位。4.3 权限排查的固定顺序遇到权限问题我一般按这个顺序走避免乱试# 第一步确认当前用户和组 id # 第二步确认文件权限和属主 ls -l /path/to/file # 第三步确认父目录的执行权限目录没有 x 就进不去 namei -l /path/to/file # 第四步确认 SELinux 上下文 ls -Z /path/to/file # 第五步确认挂载选项比如 noexec 会导致无法执行 mount | grep /path逻辑说明id看自己是谁ls -l看文件权限namei -l会逐级列出路径上每个目录的权限这一步能发现“文件权限对但父目录没 x”的问题。ls -Z看 SELinuxmount看挂载选项。这五步走完基本能定位到是传统权限、SELinux 还是挂载选项的问题。5. 避坑与排查五个我踩过的具体问题5.1 现象free -h显示内存快满了但系统不卡原因Linux 会把空闲内存拿来做缓存free列变小是正常的available列才是真正可用的。书里强调主存储器是数据中转站缓存正是利用这个中转站提升效率。解决看available列只要它还有余量就不用紧张。真要释放缓存可以sync echo 3 /proc/sys/vm/drop_caches但生产环境别随便跑缓存被清掉反而会变慢。5.2 现象df -h显示还有空间但创建文件报No space left on device原因inode 耗尽。每个文件都要占一个 inode大量小文件会把 inode 用完块空间却还有剩。解决df -i确认 inode 使用率找到哪个目录小文件多清理或打包。书里讲容量单位时提到扇区和块inode 是另一个维度的资源别只盯着块空间。5.3 现象改了sshd_config后重启服务SSH 连不上了原因配置语法错误服务启动失败而你又把当前会话断了。解决改之前备份改完先sshd -t测试语法通过了再systemctl reload sshd。用reload而不是restartreload 不会断现有连接。如果已经连不上只能走控制台或救援模式回滚。5.4 现象chmod 777后还是Permission denied原因SELinux 上下文不匹配或者父目录缺少执行权限或者挂载选项带了noexec。解决按第 4.3 节的顺序排查先namei -l看父目录再ls -Z看 SELinux最后mount看挂载选项。别一上来就关 SELinux。5.5 现象下载的软件包解压后无法执行提示“无法执行二进制文件”原因架构不匹配比如在 ARM 机器上下了 x86_64 的包或者在 32 位系统上下了 64 位的包。解决uname -m确认本机架构重新下载对应版本。书里讲 RISC 与 CISC 时提到 ARM 和 x86 是两套架构这个知识点在这里就派上用场了。6. 进阶用法用man -k和apropos建立自己的命令索引书里讲文档查阅时提到 man 页的章节划分但很多人不知道man -k可以按关键字反查。这个技巧用熟了等于给自己建了一个命令索引遇到“我想干某件事但不知道用哪个命令”时特别管用。# 按关键字搜索所有 man 页的简短描述 man -k password # 等价写法 apropos password # 搜索后如果结果太多用 grep 过滤 man -k network | grep -i show\|status # 更新 man 页数据库新装的软件如果 man -k 搜不到先跑这个 mandb逻辑说明man -k和apropos是同一个功能搜索的是 man 页的NAME段。比如man -k password会列出passwd、shadow、pam等相关条目。如果新装了软件但搜不到跑mandb重建数据库。参数上grep -i忽略大小写show\|status是或匹配。我一般会把这个和--help结合用先用man -k找到候选命令再用命令 --help快速看参数最后用man看详细说明。这套组合比直接搜网页靠谱因为查到的就是本机版本。再补一个验证方法学完书里任何一节别只看跑一条命令验证。比如学完五大单元跑lscpu和free -h对一下学完容量单位跑df -h和df -H对比学完 SELinux跑getenforce和ls -Z看一眼。验证过的知识才是自己的没验证过的只是“看过”。从那以后我每次改配置文件前都强制走一遍“备份、改、测语法、reload”这四步不管多简单的文件都不跳过。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?