资讯动态

鸟哥Linux私房菜第四版精读:权限、磁盘、systemd排查实战

发布时间:2026/10/15 4:13:35 来源:尧图企业网站定制
简介《鸟哥的Linux私房菜-基础篇》第四版是一份面向Linux初学者的入门电子书适合具备基本计算机操作能力、希望系统掌握Linux概念与常用工具的读者也适用于有一定经验的IT技术人员查漏补缺。内容从计算机组成与操作系统原理讲起逐步延伸到man页与info页等文档查看方法、常见实用文档的位置与使用、nano文本编辑器操作以及SELinux安全管理等知识点并配有大量实际操作说明帮助读者培养独立解决常见问题的能力。资源包内共1个PDF文件大小约17.5MB单文件结构便于在电脑或移动设备上直接阅读与检索。目前已有1232人学习下载说明该版本在Linux入门群体中具有较高的参考价值。对于想打牢Linux基础、为后续深入研究类Unix系统做准备的读者这份资料可作为系统学习的主线读物。1. 从一本被翻烂的书说起为什么第四版值得重新过一遍很多人第一次接触 Linux 命令行靠的不是视频课而是一本被翻到书脊开裂的《鸟哥的Linux私房菜-基础篇》。第四版在保留原有体系的前提下把 CentOS 7 之后的环境变化、systemd 的普及、磁盘分区与文件系统的调整都重新梳理了一遍。它解决的不是“怎么装一个系统”这种一次性问题而是让你在遇到权限报错、磁盘满、服务起不来时知道该翻哪一章、敲哪条命令去定位。适合谁刚入行的运维、被派去管服务器的后端、以及想从“会敲几个命令”进阶到“能独立排查”的开发者。这一版最值钱的地方是它把命令行背后的判断逻辑讲透了而不是只给答案。2. 把第四版当操作手册环境准备与最小验证路径2.1 为什么选 CentOS 系而不是 Ubuntu 来跟书第四版的命令和目录结构默认围绕 RHEL/CentOS 体系展开比如yum、firewalld、/etc/sysconfig/下的网络配置。如果你用 Ubuntu 跟练会遇到apt和ufw的差异虽然原理相通但初学阶段频繁切换包管理器会打乱节奏。常见做法是装一个 CentOS 7 或 Rocky Linux 9 的虚拟机分配 2 核 4G、40G 磁盘网络选 NAT。这样书里的systemctl、rpm、fdisk示例都能原样复现。我一般会额外挂一块 10G 的空磁盘专门用来练分区和 LVM避免把系统盘搞崩后重装。# 查看当前系统版本和内核确认跟书环境一致 cat /etc/redhat-release uname -r # 查看磁盘布局确认额外挂载的空盘设备名 lsblk -f # 关闭 SELinux 的强制模式仅练习环境生产慎用 setenforce 0 getenforce逻辑说明/etc/redhat-release确认发行版大版本uname -r看内核是否支持书里提到的特性。lsblk -f能同时看到设备名、文件系统类型和挂载点比fdisk -l更直观。setenforce 0是临时关闭 SELinux避免练习权限时被拦截重启后失效。参数上-f表示显示文件系统信息不加只显示块设备树。2.2 用快照把“后悔药”提前备好跟书练分区、改fstab、调服务翻车概率不低。最省时间的做法不是背命令而是在虚拟机里打快照。每做完一章的练习关机打一个快照命名带上章节号。一旦fstab写错导致系统起不来回滚只要几十秒。这个习惯比任何救援模式都管用。注意快照占磁盘空间练完确认没问题就删掉旧的只保留最近两三个。# 在宿主机上查看虚拟机快照列表以某虚拟化平台命令为例 virsh snapshot-list practice-vm # 创建带章节标记的快照 virsh snapshot-create-as practice-vm ch05-fstab --description 第五章 fstab 练习前 # 回滚到指定快照 virsh snapshot-revert practice-vm ch05-fstab逻辑说明snapshot-create-as的--description方便日后辨认snapshot-revert会丢弃当前状态回到快照点。参数上快照名建议用「章节-内容」格式避免snap1、snap2这种过两周自己都看不懂的命名。如果你用的是桌面虚拟化软件图形界面里找“快照”按钮逻辑一样。2.3 最小验证三条命令确认你跟对了版本书里有些命令在不同小版本间输出格式有差异比如ip addr和ifconfig的字段。开始正式跟练前先跑三条命令确认环境没跑偏。# 确认 systemd 是 init 系统书里服务管理章节依赖它 ps -p 1 -o comm # 确认包管理器是 yum/dnf而不是 apt which yum || which dnf # 确认默认 shell 是 bash书里脚本示例基于 bash echo $SHELL逻辑说明ps -p 1 -o comm只输出 1 号进程的名字systemd说明服务管理方式跟书一致。which yum || which dnf用或运算兼容新旧 CentOS。echo $SHELL确认登录 shell如果是zsh或fish书里部分变量展开和通配符行为会有细微差别建议临时切回bash。参数上-p指定进程号-o指定输出列comm表示只输出命令名不带表头。3. 权限、磁盘、服务第四版里最容易卡住的三个实操点3.1 权限数字背后的判断顺序书里讲chmod和chown时给了不少例子但新手最容易混的是“到底谁说了算”。实际判断顺序是先看进程的有效 UID 是不是文件属主是就按属主权限不是再看是不是属组是就按属组权限都不是才按其他人权限。root 例外它几乎能无视权限位但 SELinux 和文件系统属性如chattr i仍能拦住它。# 创建一个测试文件和目录观察默认权限 touch /tmp/perm_test mkdir /tmp/perm_dir ls -ld /tmp/perm_test /tmp/perm_dir # 修改属主和属组再验证权限判断 chown user1:group1 /tmp/perm_test chmod 640 /tmp/perm_test ls -l /tmp/perm_test # 用另一个用户身份读取观察是否被拒 sudo -u user2 cat /tmp/perm_test逻辑说明ls -ld看目录本身而不是目录内容。chmod 640表示属主读写、属组只读、其他人无权限。sudo -u user2以 user2 身份执行如果 user2 既不是 user1 也不在 group1就会报 Permission denied。参数上-u指定目标用户cat只是用来触发读取动作换成head也一样。3.2 磁盘满时先看 inode 还是容量书里提到df和du但没展开一个经典坑磁盘显示有空间却写不进文件。这通常是 inode 耗尽不是块耗尽。df -i看 inode 使用率df -h看块使用率。如果df -i到 100%而df -h还有余量就是小文件太多把 inode 用完了。常见于缓存目录、邮件队列、日志切分过碎的场景。# 同时查看块和 inode 使用情况 df -h df -i # 定位哪个目录 inode 消耗最多 find /var -xdev -type f | awk -F/ {print /$2/$3} | sort | uniq -c | sort -rn | head # 查看目录下文件数量确认是否异常 ls -f /var/spool/postfix/maildrop | wc -l逻辑说明df -i的-i表示显示 inode 信息。find /var -xdev的-xdev避免跨文件系统awk取前两级目录做统计sort | uniq -c | sort -rn按数量倒序。ls -f的-f表示不排序、不解析颜色直接列目录项比ls -l快很多适合大目录计数。参数上head默认前十行够定位主要消耗者。3.3 systemd 服务起不来时的排查顺序第四版把服务管理从service和chkconfig迁到了systemctl。服务起不来别急着重装按顺序看状态、日志、配置、依赖。# 查看服务状态和最近日志 systemctl status nginx.service journalctl -u nginx.service -n 50 --no-pager # 检查配置文件语法以 nginx 为例 nginx -t # 查看服务依赖和启动顺序 systemctl list-dependencies nginx.service逻辑说明systemctl status给出 Active 状态和最近几行日志journalctl -u按单元过滤-n 50看最近 50 行--no-pager避免进入分页器。nginx -t是应用自带的语法检查不同服务命令不同比如sshd -t、httpd -t。list-dependencies看它依赖谁、谁依赖它端口被占或依赖服务没起都能从这里发现。参数上-u后跟单元名带不带.service都行。4. 避坑与排查跟书练时最容易翻车的五件事4.1 改完 fstab 重启直接进救援模式现象编辑/etc/fstab后重启系统卡在紧急模式提示某个挂载点失败。原因UUID 写错、挂载点目录不存在、文件系统类型不对或者用了nofail却没加。解决进救援模式后mount -o remount,rw /重新挂根注释掉刚加的那行再reboot。预防改完先mount -a测试不报错再重启。4.2 用 chmod -R 777 解决权限后服务反而更不安全现象网页访问报 403有人直接chmod -R 777 /var/www结果能访问了但安全扫描告警。原因777 让所有用户可写Web 服务进程被入侵后可直接改文件。解决属主给运行服务的用户目录 755文件 644需要写的目录单独给 775 并设setgid。预防先ls -l看属主用chown -R user:group修正再按最小权限给。4.3 yum 装包报“无法解析主机”现象yum install卡住然后报错提示无法解析镜像站域名。原因DNS 没配、/etc/resolv.conf被覆盖、或者网络模式选错。解决ping一个公网 IP 确认连通性cat /etc/resolv.conf看有没有 nameserver没有就加一个可用的。预防虚拟机网络用 NAT 时确认 DHCP 下发了 DNS静态 IP 要手动写resolv.conf或改网卡配置里的 DNS1。4.4 脚本里 cd 失败却继续往下跑现象一个备份脚本cd /data/backup失败后后面的rm -rf *在当前目录执行删错了东西。原因没判断cd的退出码也没用set -e。解决cd /data/backup || exit 1或者在脚本开头加set -euo pipefail。预防所有涉及删除、覆盖的命令前先确认路径存在用绝对路径变量加引号。4.5 用 kill -9 停服务导致数据损坏现象数据库服务卡住直接kill -9后重启数据文件损坏。原因-9 不给进程清理和刷盘的机会。解决先systemctl stop或kill -15等几秒确认进程还在再考虑 -9。预防数据库类服务优先用自带管理命令如mysqladmin shutdown、pg_ctl stop -m fast让进程自己收尾。5. 把书读薄用 man 和 --help 建立自己的命令索引跟完第四版真正留在手里的不是那几百条命令而是一套查命令的方法。我自己的习惯是每学一个新命令先man看 SYNOPSIS 和 OPTIONS再用--help快速确认常用参数最后在笔记里只记“这个命令解决什么问题、最常用的三个参数、一个翻车点”。比如find我记的是按时间删日志、按大小找大文件、-exec结尾用\;还是。这样下次遇到问题先想“哪个命令能解决”再去查参数而不是背参数。# 用 man 查看命令的概要、选项和示例 man find # 快速看常用参数适合已经知道命令但忘了选项 find --help # 用 apropos 按关键词搜相关命令适合不知道命令名时 apropos disk usage逻辑说明man是完整手册按q退出/关键词搜索。--help输出比 man 短适合快速扫一眼。apropos搜的是手册页的简短描述disk usage能搜到df、du等。参数上apropos等价于man -k如果提示 nothing appropriate先跑mandb更新索引。再进一步把常用排查动作写成函数或别名减少重复输入。比如我习惯把“看端口、看进程、看日志”三件套做成一个函数传服务名就输出三样信息。这样跟书练完之后日常排查能直接复用不用每次翻历史命令。# 在 ~/.bashrc 里加一个排查函数 check_svc() { local svc$1 echo status systemctl status $svc --no-pager echo listen ss -tlnp | grep $svc || echo no listen port found echo recent log journalctl -u $svc -n 20 --no-pager } # 重新加载配置后使用 source ~/.bashrc check_svc nginx逻辑说明函数接收一个参数作为服务名依次输出状态、监听端口、最近日志。ss -tlnp的-t看 TCP-l看监听-n不解析服务名-p显示进程。grep $svc过滤出相关行没有则提示。参数上local限定变量作用域避免污染全局。这个函数不依赖具体发行版CentOS 和 Ubuntu 都能用只是服务名不同。最后说一个我自己的教训早年跟书练总想一次把一章全做完结果权限、分区、服务混在一起出了问题不知道是哪步导致的。后来改成每章只动一个变量做完立刻验证再打快照。慢就是快。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑