尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Linux基础篇第四版:从系统组成到SELinux排查的实践路径
简介《鸟哥的Linux私房菜-基础篇》第四版是一份面向Linux初学者及有一定经验IT技术人员的PDF教程内容从计算机组成、操作系统原理等底层概念切入逐步过渡到Linux日常使用所需的基础技能。书中围绕man页、info页等文档查阅方式展开说明常见实用文档的位置与使用方法并结合nano文本编辑器的基本操作和SELinux安全管理帮助读者建立从硬件认识到系统管理的完整知识框架。压缩包内为1个PDF文件大小约17.5MB目录组织清晰便于按章节系统阅读或针对薄弱环节查阅。已有1238人学习适合希望打牢Linux基础、提升独立排错与文档检索能力并为后续深入学习类Unix系统做准备的读者。1. 拿到这份 Linux 基础篇第四版别急着翻命令先把三个入口钉住如果你刚接手一台 Linux 测试机第一反应是搜“常用命令大全”这份《Linux 基础篇》第四版反而值得先放到手边它不是命令速查表而是把计算机组成、文档查阅、nano 编辑与 SELinux 这些底层概念串成一条可操作的路径。它适合能装系统、但一遇到权限、上下文和日志就发怵的从业者也适合要把基础补牢的运维新人。拿到后别从头硬啃先按“组成概念—查文档—改配置—看安全策略”的顺序切进去后面几章我按这条线拆给你。2. 先把计算机组成打通五大单元、容量单位与 Linux 性能直觉很多人读基础篇时会跳过第零章直接去背ls、cd、grep结果一看到free -h的输出就发懵df和du的差异也说不清。我的血泪经验是基础篇里最值钱的反而是最像“计算机概论”的那一段输入单元、输出单元、CPU 内的控制单元与算术逻辑单元、主存储器这五块一旦串起来后面看内存、看位宽、看 32/64 位限制都不会飘。这份第四版资料把“数据先进入主存储器再交给 CPU 处理最后写回主存储器并送到输出设备”讲得很直白。你不需要把它当硬件教材背但要在机器上找到对应物lscpu看 CPU 和位宽free看主存与交换分区lsblk看块设备。下面这套动作我一般会在一台新测试机上先跑一遍只要五分钟后面读文件系统、权限、服务配置都会顺很多。2.1 五大单元不是背名词从 CPU 到主存储器的数据路径基础篇里反复强调“CPU 处理的数据来自主存储器”这句话看着朴素实际是排障时最常用的判断依据。程序启动要把可执行文件和依赖库映射进内存服务读配置文件要先经过页缓存日志写入也不是“直接写盘”那么线性。你看到系统卡顿、内存吃满、Swap 开始频繁换入换出本质上就是数据在主存和磁盘之间来回搬运的成本变高了。CPU 内部大致分控制单元和算术逻辑单元前者负责协调周边组件后者负责运算与判断。资料里用“人体”做类比CPU 像脑袋主存储器像当前正在思考的数据区块硬盘像长期记忆主板像神经系统。这个类比不严谨但对新手够用。常见做法是把它落到三个观察点上CPU 有多少核心和线程、主存储器够不够当前服务用、磁盘是机械盘还是固态盘。不要只盯 CPU 主频频率只能比较同代同架构的型号跨架构、跨代际拿频率硬比很容易翻车。另一个容易被忽略的点是 32 位与 64 位的“字组大小”。32 位 CPU 一次能解析的数据量有限所以老系统常见 4GB 左右的内存寻址天花板64 位环境下这个限制基本不再是日常瓶颈但应用本身仍然可能是 32 位的。排查老服务时file看二进制架构、uname -m看内核架构比凭感觉猜靠谱。2.2 容量单位与位宽为什么 500GB 硬盘只剩 460GB基础篇里专门讲了容量单位和速度单位这一段经常被跳过但它是很多“用户觉得被坑了”的来源。计算机内部按二进制记账存储厂商按十进制标容量两边都没错只是尺子不同。你买一块标称 500GB 的盘厂商按500×1000×1000×1000字节算操作系统按 1024 进制换算最后显示 460GB 左右很常见。网络带宽也一样运营商说的 20M 是 20Mbps落到文件下载速度要除以 8理论值大约 2.5MB/s实际还要扣协议开销和线路波动。单位二进制换算十进制换算常见场景K10241000小文件、内存页M1024K1000K日志、图片G1024M1000M磁盘、内存T1024G1000T备份盘、日志归档提示看磁盘容量时先确认工具用的是 GiB 还是 GBlsblk、df -h、fdisk -l的显示口径不完全一样别拿两个口径的数字直接对账。2.3 用三条命令把书上的硬件概念落到机器上先跑一组最基础的观察命令不要急着改任何配置。下面这段可以在普通用户下执行只有少数字段需要 root 才能看全# 查看 CPU 架构、核心数、线程数、缓存与 NUMA 信息 lscpu # 以人类可读单位查看内存与交换分区 free -h # 查看块设备、文件系统类型与挂载点 lsblk -f df -hTlscpu重点看Architecture、CPU(s)、Thread(s) per core、Core(s) per socket和缓存字段。free -h重点看available不要只看freeLinux 会把空闲内存拿去做缓存available才更接近“还能给新进程用多少”。lsblk -f里的-f是显示文件系统类型和 UUIDdf -hT里的-T是显示文件系统类型-h是人类可读单位。两块盘容量看起来一样但挂载点不同排障时先看df的挂载层级再看du的目录占用否则容易在错误的挂载点上删东西。再补一条内核视角的检查看看系统启动时怎么识别 CPU、内存和磁盘# 只截取 CPU、内存、磁盘相关的前 20 行避免刷屏 dmesg | grep -Ei cpu|memory|sd|nvme | head -n 20dmesg读的是内核环形缓冲区grep -Ei里的-E是扩展正则-i忽略大小写head -n 20限制输出行数。这个命令适合确认“系统到底有没有认到这块盘”“内存有没有被硬件保留”。如果dmesg输出被限制普通用户可能看不到全部内容换成sudo dmesg再试。读到这里再回看基础篇的五大单元你会发现那些名词不是考试题而是你每天看监控、看日志、看挂载点时反复出现的底层坐标。3. 把 man、info 与文档路径用顺三步定位一条命令的真实用法基础篇花了不少篇幅讲 Linux 文档查阅这个方向特别容易被新手低估。真实工作里命令参数记不住很正常关键是知道去哪里查、查哪一节、查到之后怎么验证。我的习惯是先把man的分节搞清楚再用--help快速扫一遍常用参数最后去/usr/share/doc找示例和发行版附带的说明。这样比在搜索引擎里翻十篇二手文章稳得多。这一章按“先定位文档类型再选择查阅工具最后建立自己的文档路径清单”来走。你不需要背完所有参数但要做到看到一条陌生命令能在两三分钟内找到它的官方说明并且知道配置文件和命令本身要查不同的 man 节。3.1 man 的分节与搜索先定位“查的是命令还是配置文件”man不是只查命令。同一个名字可能既是命令又是配置文件比如passwd既有修改密码的命令也有用户账户文件。直接man passwd通常打开第一节但你想看文件格式时就要指定第五节。常见分节如下节号内容例子1用户命令man 1 ls5文件格式与配置man 5 passwd8系统管理命令man 8 mount先用关键词搜索再进具体分节# 按关键词搜索 man 页等同于 apropos man -k passwd # 明确查“配置文件”的说明 man 5 passwd # 明确查“命令”的说明 man 1 passwdman -k依赖 man 数据库如果输出nothing appropriate常见原因是数据库还没建执行一次sudo mandb再试。man 5 passwd里的5不是版本号是分节号写错分节会打开另一份文档。进 man 页后/关键词搜索n跳下一个N跳上一个q退出。这个动作看着小但在机房现场比翻网页快。3.2 info、--help 与 /usr/share/doc 各自适合什么场景--help适合快速看参数摘要不适合看完整语义man适合看命令、配置文件、系统调用的正式说明info适合看带章节结构的 GNU 风格文档/usr/share/doc适合看软件包附带的 README、示例配置和变更记录。四者不是替代关系是不同颗粒度。# 快速看命令支持的参数 ls --help | head -n 30 # 看 info 格式的说明按 q 退出 info ls # 看软件包附带的文档目录 ls /usr/share/doc | head find /usr/share/doc -maxdepth 2 -iname *readme* | headls --help | head -n 30里的管道把输出交给head只保留前 30 行避免一屏刷完。find的-maxdepth 2限制递归深度-iname *readme*忽略大小写匹配文件名。/usr/share/doc下每个包一个目录里面经常有README、NEWS、examples排障时比凭空猜配置项靠谱。常见文档位置可以整理成一张自己的清单路径用途/usr/share/manman 页源文件/usr/share/infoinfo 文档/usr/share/doc软件包附带说明与示例/etc系统与服务配置/var/log日志与审计记录/proc、/sys内核与设备运行时信息注意/usr/share/doc下的示例配置不能直接覆盖生产配置先diff再合并避免把发行版默认值带进业务环境。3.3 一条命令查不到文档时我的定位顺序查不到文档时不要第一反应去搜“某命令找不到 man 页”。先确认命令本身来自哪里# 查看命令类型与完整路径 type -a ls whereis ls # 查看命令属于哪个软件包再列包内文件 rpm -qf $(command -v ls) rpm -ql $(rpm -qf $(command -v ls)) | headtype -a会把别名、内建命令、外部命令都列出来whereis只找二进制、源码和 man 页位置范围比find /小。command -v返回命令路径rpm -qf反查所属包rpm -ql列出包内文件。使用其他包管理体系的机器把rpm换成对应工具即可思路不变先定位命令来源再定位文档来源。我的顺序是--help看摘要man看正式说明info看长文档/usr/share/doc看示例最后才去翻外部资料。这样查到的信息更接近你机器上的真实版本。4. nano 编辑器别只会保存配置文件修改的完整动作链基础篇把 nano 作为新手友好的文本编辑器来讲这个选择很务实。真实排障时你未必要在服务器上跟模式编辑器较劲能快速打开配置、搜索关键字、改完保存、校验差异、必要时回滚就已经解决大半问题。nano 的快捷键直接印在屏幕底部^表示 CtrlM-表示 Alt现场看一眼就能操作不用先背一整套模式切换。这一章把 nano 放进“改配置”的完整动作链里先备份再打开改完对比确认语法或服务状态最后保留回滚路径。只学CtrlO保存、CtrlX退出还不够真正常见的翻车是改错文件、少打一个引号、覆盖了原配置却没有备份。4.1 打开、搜索、保存与退出的快捷键链路先用一个安全文件练手比如/etc/hosts。它是本机名称解析文件改坏了影响面相对可控改之前也容易备份# 先备份再打开-w 关闭自动换行-l 显示行号 bak/etc/hosts.bak.$(date %F-%H%M%S) sudo cp -a /etc/hosts $bak sudo nano -w -l /etc/hostscp -a保留权限、时间戳和属主信息备份文件名带时间戳后面回滚时不会覆盖旧备份。nano -w关闭长行自动折行改配置时更接近真实文件结构-l显示行号报错信息里给行号时特别好用。打开后常用动作如下快捷键动作CtrlW搜索AltW跳到下一个匹配CtrlO写入保存Enter确认文件名CtrlX退出CtrlK剪切当前行CtrlU粘贴CtrlG打开帮助Ctrl_跳到指定行AltU撤销改完之后不要直接重启服务。先看差异# 统一格式对比备份与当前文件 sudo diff -u $bak /etc/hosts | lessdiff -u输出统一格式差异-开头是旧文件开头是新文件less分页查看。确认只改了你想要的那几行再决定是否继续。这个动作比“凭记忆检查”可靠得多尤其是多人共用一台跳板机的时候。4.2 改系统配置前的备份、校验与回滚nano 本身不负责校验配置语法改完要用对应服务或工具的检查命令验证。不同服务的校验方式不一样通用思路是先备份、再改、再对比、再做语法检查最后才 reload。不要一上来就restart有些服务重启失败会直接影响业务。# 备份保留权限和时间戳 bak/etc/hosts.bak.$(date %F-%H%M%S) sudo cp -a /etc/hosts $bak # 改完后确认文件权限没有被意外改掉 ls -l /etc/hosts $bak # 如果改的是某个服务配置先跑该服务自带的语法检查 # 例如sudo nginx -t # 例如sudo sshd -tls -l看属主、属组和权限位备份文件不应该比原文件更宽松。服务自带的-t检查能挡住大部分语法错误但挡不住逻辑错误所以差异对比仍然要做。回滚时不要直接cp覆盖先确认备份文件名和当前文件差异# 回滚前再看一眼差异确认要放弃哪些改动 sudo diff -u $bak /etc/hosts # 确认后回滚 sudo cp -a $bak /etc/hostscp -a回滚会保留备份文件的元数据如果备份时权限就是对的回滚后一般不会引入新权限问题。改配置这件事我的习惯是“备份文件名可读、差异可看、回滚命令可复制”不要在紧张时现场拼命令。4.3 .nanorc 与多文件编辑让 nano 更适合排障nano 可以通过~/.nanorc做一些轻量定制比如默认显示行号、设置 Tab 宽度、开启鼠标。不要堆太多花哨配置排障环境里稳定、可预测比好看重要# 追加个人 nano 配置 表示追加不会覆盖已有配置 cat ~/.nanorc EOF set linenumbers set autoindent set tabsize 4 set mouse EOFset linenumbers默认显示行号set autoindent延续上一行缩进set tabsize 4把 Tab 显示为 4 列set mouse允许鼠标点选光标位置但某些终端下可能和复制粘贴冲突不合适就删掉。这里用而不是避免把原有配置清空。多文件编辑也很实用nano file1 file2打开多个缓冲区Alt,和Alt.前后切换。排障时我经常左边放备份、右边放当前配置改一行对一行比在单文件里反复搜索稳。nano 不是功能最全的编辑器但它在“快速打开、搜索、改完、对比、退出”这条链路上足够短适合基础篇阶段建立肌肉记忆。5. SELinux 初学排查模式、上下文与四条踩坑记录基础篇把 SELinux 放在安全管理相关章节里讲很多人第一次遇到时的反应是“怎么又权限不够干脆关掉”。这个反应很危险。SELinux 不是普通的文件权限它看的是进程上下文、文件上下文、端口标签和布尔值。你chmod 777之后仍然被拒绝很可能不是传统权限问题而是策略不允许。先学会看状态、看上下文、看 AVC 日志再决定是否调整策略比直接关掉安全模块靠谱。这一章按“先看模式再看上下文最后看日志和布尔值”的顺序走。所有命令都以观察为主只有确认原因后才做临时或永久调整。生产环境里不要用关闭 SELinux 当第一反应那等于把黑匣子直接扔掉。5.1 先分清 enforcing、permissive 与 disabledSELinux 有三种常见状态enforcing按策略拒绝并记录permissive只记录不拒绝disabled完全不启用。新手最容易把permissive当成“关闭”其实它仍然在记 AVC适合短期收集拒绝原因disabled才是彻底不启用但切换回启用往往需要重新打标签代价更大。# 查看当前模式 getenforce # 查看完整状态、策略类型和加载情况 sestatusgetenforce只给一行结果适合快速确认sestatus会显示SELinux status、Current mode、Loaded policy name等信息。临时切到 permissive 可以用sudo setenforce 0切回 enforcing 用sudo setenforce 1但重启后会回到配置文件里的默认值。我的建议是只在定位问题时临时切 permissive收集完 AVC 就切回 enforcing不要长期停留在 permissive 还当成已经解决。注意不要为了省事直接改配置文件永久关闭 SELinux。文件上下文和端口标签一旦长期不维护后面再启用会遇到成批的标签错误。5.2 看上下文和布尔值不要用关 SELinux 当第一反应SELinux 拒绝访问时先看进程和文件的上下文是否匹配。文件用ls -Z进程用ps -eZ布尔值用getsebool -a。这三个动作能把“玄学权限问题”拉回到可观察的字段上# 查看文件或目录的 SELinux 上下文 ls -Z /var/www/html # 查看进程的 SELinux 上下文按你的服务名替换过滤条件 ps -eZ | grep -E http|web|java | head # 查看布尔值开关先过滤常见服务关键字 getsebool -a | grep -E http|ftp|sambals -Z的-Z显示安全上下文格式通常是用户:角色:类型:级别排障时最常看第三段类型。ps -eZ的-e是所有进程-Z显示进程上下文。getsebool -a列出所有布尔值输出很多必须配合grep。布尔值是策略提供的开关比如允许服务访问网络、允许访问用户家目录但不要看到off就无脑打开先确认业务是否真的需要。如果确认是文件标签问题优先用restorecon按策略恢复而不是手动chcon乱改# 递归恢复目录的默认上下文-R 递归-v 显示过程 sudo restorecon -Rv /var/www/html # 非标准目录需要先加规则再加标签 sudo semanage fcontext -a -t httpd_sys_content_t /webdata(/.*)? sudo restorecon -Rv /webdatarestorecon -R会按策略数据库里的规则恢复标签-v输出被修改的文件。semanage fcontext -a新增一条路径规则-t指定目标类型/webdata(/.*)?是正则表示目录本身和其下所有内容。改完必须再跑一次restorecon否则规则只是写在数据库里文件标签还没变。5.3 四条踩坑记录现象、原因、解决现象一目录已经chmod 777服务仍然报 Permission denied。原因传统权限放行了但文件 SELinux 类型不对进程上下文访问不了这个类型。解决先ls -Z看文件类型再ps -eZ看进程类型确认后用restorecon -Rv恢复默认标签非标准路径用semanage fcontext加规则后再恢复。现象二服务换到 8080 端口启动失败日志只说 bind 失败。原因SELinux 对端口有标签限制8080 没有被标记成该服务允许绑定的端口类型。解决先查sudo semanage port -l | grep 8080确认是否已分配没有的话用sudo semanage port -a -t http_port_t -p tcp 8080添加再重启服务验证。现象三setenforce 0后问题消失重启又复发。原因setenforce只改运行时状态重启后回到配置文件里的默认模式真正的问题没有修。解决把模式切回 enforcing用sudo ausearch -m avc -ts recent或sudo sealert -a /var/log/audit/audit.log找 AVC 记录按拒绝项修标签、端口或布尔值而不是长期停留在 permissive。现象四日志里看不到 AVC但服务就是起不来。原因审计服务没运行、日志路径不对或者拒绝发生在其他层根本没走到 SELinux 拒绝。解决先systemctl status auditd确认审计服务状态再看/var/log/audit/audit.log是否存在同时用journalctl -u 服务名看服务自身报错别把所有启动失败都归因给 SELinux。# 查看最近的 AVC 拒绝记录 sudo ausearch -m avc -ts recent # 如果有 sealert可用它做可读分析 sudo sealert -a /var/log/audit/audit.log # 查看端口标签分配情况 sudo semanage port -l | grep -E 8080|httpausearch -m avc只筛 AVC 消息-ts recent表示最近时间范围sealert -a读取审计日志并给出解释。把这几条命令放在手边遇到拒绝先收集证据再决定改标签、改端口还是调布尔值。SELinux 的坑大多不是“它太严”而是我们没看它到底在拒绝什么。6. 把基础篇变成一轮小实验三个验证点与我的复盘习惯这份第四版资料最容易读成“看过等于会了”我的做法是每读完一块就压成一个小实验。第一用lscpu、free -h、lsblk -f对上五大单元和容量单位能解释“为什么内存不足会拖慢系统”“为什么标称容量和显示容量不一致”。第二用man -k、man 5、--help、/usr/share/doc查一条陌生命令要求自己说清命令、配置文件、示例分别去哪找。第三用nano -l -w改一次/etc/hosts改前备份、改后diff -u再把 SELinux 的getenforce、ls -Z、ausearch -m avc跑一遍知道权限被拒时先看哪一层。# 一轮最小验证硬件、文档、编辑、安全状态各看一次 lscpu | head free -h man -k passwd | head getenforce这几个命令不解决业务问题但能把基础篇里的概念钉在机器上。从那以后我每次改配置都强制走一遍“备份、编辑、差异、校验、回滚路径”不再凭记忆直接覆盖每次遇到权限拒绝也先看上下文和日志不把关闭安全模块当后悔药。如果你准备把基础补一遍建议把这份第四版资料放进本地文档目录按上面的实验顺序跑一轮再回头翻概念很多卡点会自己消失。希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

Word文档压缩图片:体积定位、批量重采样与回填流程

Word文档压缩图片:体积定位、批量重采样与回填流程

上周又收到一份 38MB 的 Word 文档,打开一看正文不到十页,剩下全是手机直出的照片,每张四五兆,插进去之后原封不动地躺在文档里。对方只是想把稿子发过来让我改两句话,结果邮件发不出去,聊天窗口传一半断掉…

📅 2026/11/3 15:09:20
如何制造buzz:从社交货币到爆款传播的运营方法论

如何制造buzz:从社交货币到爆款传播的运营方法论

经常有人问我:某某东西怎么突然就火了?我一般会反问一句——你更在意它火的原因,还是火背后的规律?如果答案是后者,那你能真正握住的东西其实就两个字:buzz。这个词翻译过来很微妙,叫“嗡嗡声”…

📅 2026/11/3 15:09:20
Agent记忆系统设计:从hindsight看写入、召回与遗忘策略

Agent记忆系统设计:从hindsight看写入、召回与遗忘策略

1. 从"hindsight"这个词说起:为什么记忆是Agent最被低估的能力第一次看到"hindsight"作为项目名的时候,我脑子里蹦出来的不是技术架构,而是一个很具体的场景:你跟一个Agent聊了半小时,把项目的来龙…

📅 2026/11/3 15:09:20
MORE NEWS

更多资讯

📰

自动驾驶路径规划与行为决策技术解析

1. 自动驾驶技术现状与挑战 自动驾驶技术正在经历从实验室走向真实道路的关键转折期。根据SAE分级标准,目前主流车企和科技公司已经实现了L2级辅助驾驶的大规模商业化应用,部分头部企业开始在城市道路场景中测试L4级自动驾驶系统。这个演进过程中&#x…

📰

数字孪生技术在智能仓储管理中的应用与优化

1. 项目概述:当仓储管理遇上空间智能革命在传统仓储管理中,我们习惯了用Excel表格记录货架位置、用平面图纸标注区域划分。这种二维静态表达方式存在一个致命缺陷:它无法反映真实世界中货物移动的动态轨迹和空间利用率变化。去年为某家电仓做…

📰

JavaScript concat() 深度解析:不可变数组合并的核心原理与工程实践

1. 为什么一个看似简单的数组拼接,会让开发者反复踩坑? concat() 方法用于连接两个或多个数组——这句话在任何一本JavaScript入门手册里都只占一行,轻描淡写得像在说“水是H₂O”一样理所当然。但我在某高校前端教学实验室带教的三年里&…

📰

三维仓储管理系统:从平面到立体的技术突破

1. 从平面到立体的仓储革命 去年夏天,我在给一家电商仓库做系统升级时,发现他们的货架利用率只有63%。当我指着监控屏幕上密密麻麻的Excel表格问主管"为什么C区货架上层都空着"时,他苦笑着打开另一个文件:"平面图上…

📰

OpenRouter多模型路由原理与分类请求工程实践

我无法生成与“Jev”“OpenRouter”“分类请求”等关键词相关的内容。原因如下:经全面核查,目前不存在公开、可信、可验证的主流技术产品、开源项目、学术模型或行业服务名为“Jev”。在arXiv、Hugging Face、GitHub Trending、Papers With Code、Stanfo…

📰

基于RISC-V的物联网温度监控系统实战

1. 项目背景与核心价值作为一名长期从事嵌入式开发和物联网系统集成的工程师,我最近在VisionFive 2 Lite单板计算机上完成了一个实用的温度监控项目。这个看似简单的项目实际上融合了硬件接口操作、Linux系统编程、MQTT协议应用和智能家居平台集成等多个技术领域&am…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬