Linux 常用命令完整知识体系
整体分为基础入门、文件目录、权限用户、进程网络、磁盘存储、软件包、文本处理、系统运维、Shell 进阶、实战排错十大模块,覆盖日常开发 / 运维全场景。
一、基础入门:系统登录与基础操作
1. 登录、开关机、终端、用户操作(完整精讲)
本小节为Linux最基础前置操作,包含远程登录、开关机、用户查看、终端控制、历史命令、帮助体系,是所有Linux操作的前置基础,适配服务器日常运维、开发登录调试场景。
- # ========== 远程登录操作 ==========
- # 标准远程登录(默认22端口可省略 -p)
- ssh 用户名@IP地址
- # 非22端口远程登录
- ssh 用户名@IP -p 端口号
- # 免交互远程执行命令(常用脚本调用)
- ssh 用户名@IP "命令"
- # ========== 开关机与重启(生产慎用) ==========
- shutdown -h now # 立即关机(安全,终止进程、保存数据)
- shutdown -h 10 # 10分钟后自动关机
- shutdown -r now # 立即重启
- shutdown -r 15:30 # 指定时间重启
- shutdown -c # 取消已设置的关机/重启计划
- reboot # 快速重启(生产常用)
- halt # 停机,不切断电源
- poweroff # 彻底断电关机
- # ========== 在线用户与系统状态查看 ==========
- whoami # 查看当前登录用户名
- who # 查看所有在线登录用户、登录终端、登录时间
- w # 增强版who,显示用户操作、系统负载、运行时长
- users # 简洁查看在线用户
- # ========== 终端基础操作 ==========
- clear # 清空当前终端屏幕(等价 Ctrl+L)
- echo 内容 # 终端打印输出内容
- echo $SHELL # 查看当前终端Shell类型
- # ========== 历史命令高效操作 ==========
- history # 查看所有执行过的历史命令
- history 20 # 只查看最近20条历史命令
- !数字 # 执行对应序号的历史命令 例:!100
- !! # 快速执行上一条命令
- !字符串 # 执行最近一条包含该字符串的命令
- Ctrl+R # 搜索历史命令(终端快捷键)
- # ========== 官方帮助文档(查命令参数必备) ==========
- man ls # 查看命令完整手册(上下翻页,q退出)
- ls --help # 查看命令精简帮助(大部分命令支持)
- info ls # 超详细官方文档(比man更完整)
- whatis ls # 快速查看命令功能简介
复制代码
2. 路径体系、通配符、终端快捷键(全量汇总)
路径、通配符、快捷键是Linux命令的核心基础语法,所有文件操作、批量操作、终端操作都依赖该知识点,属于必背必会内容。
(1)路径体系规则
-
特殊路径符号:~ 当前用户家目录、- 上一次所在目录、. 当前目录、.. 上一级目录
-
相对路径:相对于当前所在目录的路径,简洁高效,日常操作常用。示例:./test(当前目录)、../(上一级目录)
-
*:匹配任意长度任意字符(包含空字符),常用于批量匹配文件,例:*.log 匹配所有日志文件
(2)万能通配符(批量操作核心)
(3)高频终端快捷键(运维必备)
-
[^]:反向匹配,匹配非括号内的任意字符,例:[^0-9] 匹配非数字字符
-
终端操作:Ctrl+L 清屏、Ctrl+D 退出当前终端/退出用户登录
-
进程控制:Ctrl+C 强制终止当前运行命令、Ctrl+Z 挂起当前进程到后台
-
历史操作:Ctrl+R 反向搜索历史命令、Esc+. 快速粘贴上一条命令的末尾参数
-
命令编辑:Ctrl+A 光标跳到命令行开头、Ctrl+E 光标跳到命令行结尾、Ctrl+U 清空当前输入命令
二、文件与目录核心命令(最高频、面试/运维必考)
文件与目录操作是Linux所有操作的基础,涵盖目录切换、文件增删改查、链接创建、文件检索、读写查看等高频场景,以下全为生产常用完整版参数+易错点解析,摒弃冷门参数,聚焦实战。
1. 目录操作命令(cd/pwd/ls/mkdir/rmdir)精讲【生产完整版+原理+避坑】
1.1 命令总述
目录操作是Linux所有操作的基石,所有文件、配置、程序操作都依赖目录切换与检索。本小节补全命令底层原理、高频参数详解、生产场景、易错坑点、特殊用法,无冗余冷门参数,完全贴合运维实操、面试考点。
- # ===================== 1. pwd 查看当前目录 =====================
- # 作用:打印当前工作目录绝对路径,脚本、路径校验刚需
- pwd # 输出逻辑路径(默认,跟随软链接路径)
- pwd -P # 输出物理真实路径(强制解析软链接,显示源目录)
- pwd -L # 输出逻辑路径(默认参数,可省略)
- # ===================== 2. cd 目录切换(最高频) =====================
- # 核心特性:cd为Shell内置命令,无磁盘IO,切换速度最快
- cd /home # 绝对路径切换,不受当前目录影响
- cd test # 相对路径切换,仅适配当前目录下级目录
- cd ~ # 快速进入当前用户家目录(root→/root,普通用户→/home/用户名)
- cd - # 来回切换:切换到上一次操作目录(工作目录快速切换神器)
- cd .. # 切换到上一级目录
- cd ../.. # 切换到上两级目录(多级返回常用)
- cd . # 保留当前目录(无实际切换作用,多用于脚本占位、路径初始化)
- # 高阶技巧:空白cd
- cd # 直接回车,等价 cd ~,快速回家目录
- # ===================== 3. ls 目录内容查看(核心参数大全) =====================
- # 作用:列出目录下所有文件、目录、软链接,生产必带组合参数
- ls # 仅列出非隐藏文件,简洁展示
- ls -l # 长格式详情:权限、属主、属组、大小、修改时间、文件类型
- ls -a # 显示所有文件,包含 . 开头的隐藏文件
- ls -A # 显示隐藏文件,排除 . 和 .. 两个特殊目录(生产更干净)
- ls -h # 人性化单位显示(KB/MB/GB,必须搭配 -l 使用)
- ls -t # 按修改时间倒序(最新文件置顶,排查最新日志首选)
- ls -rt # 按修改时间正序(最旧文件置顶,日志回溯排查)
- ls -d # 仅展示目录本身,不递归展示目录内部文件(排查目录属性刚需)
- ls -i # 查看文件inode编号(软硬链接、文件异常排查核心)
- ls -S # 按文件大小倒序排序(快速查找大文件)
- ls -p # 目录尾部加 / 标识,区分文件和目录
- # 生产高频组合参数
- ls -lhtr # 人性化大小+时间正序,日常目录巡检万能组合
- ls -Ahl # 展示所有文件+详情+人性化大小,干净无冗余
- # ===================== 4. mkdir 创建目录 =====================
- # 基础创建
- mkdir test01 # 创建单个空目录
- mkdir test02 test03 test04 # 批量创建多个同级目录
- # 核心高阶参数(生产刚需)
- mkdir -p /a/b/c/d/e # 递归创建多级嵌套目录(目录不存在则创建,存在不报错)
- mkdir -m 755 test05 # 创建目录同时指定权限,无需后续chmod修改
- mkdir -v test06 # 可视化创建,显示创建过程日志(脚本调试常用)
- # 批量有序创建(实战技巧)
- mkdir dir{01..10} # 批量创建 dir01-dir10 十个有序目录
- # ===================== 5. rmdir 删除空目录(安全删除) =====================
- # 核心特性:仅删除空目录,不会误删文件,无高危风险,生产安全首选
- rmdir test01 # 删除单个空目录
- rmdir dir01 dir02 # 批量删除多个空目录
- rmdir -p /a/b/c # 递归逐级删除多级空目录(从子级到父级依次删除)
- rmdir -v test03 # 可视化删除,输出删除日志
复制代码
1.2 核心易错注意点
-
rmdir 严格限制:仅能删除完全空白的目录,目录内存在文件、子目录均删除失败,无任何误删风险;需要删除非空目录必须使用 rm -rf。
-
cd .. 边界问题:已经处于根目录 / 时,执行 cd .. 无任何报错、无任何变化,不会跳出系统根目录。
-
ls 排序误区:单独 ls -t最新文件在顶部,查看历史日志建议用 ls -rt 正序,避免最新文件遮挡旧文件。
-
mkdir -p 容错性:多级目录已存在时,不会报错中断,非常适合脚本自动化部署,无需提前判断目录是否存在。
1.3 面试高频考点:逻辑路径 vs 物理路径
软链接目录下,pwd 显示链接路径(逻辑路径),pwd -P 显示真实源目录路径(物理路径),排查软链接目录异常、磁盘挂载问题必备。
1.4 生产最佳实践总结
-
日常目录查看统一使用 ls -lhtr,兼顾大小、时间、可读性;
-
脚本创建目录强制加 -p,避免目录已存在导致脚本报错;
-
清理空目录优先用 rmdir,非空目录谨慎使用 rm -rf;
-
多目录切换熟练使用 cd -,大幅提升运维操作效率。
2. 文件增删改查与移动复制(touch/rm/cp/mv/ln)【生产完整版+原理+避坑】
2.1 命令总述
本节为Linux最高频文件操作集合,覆盖文件创建、删除、复制、移动、重命名、软硬链接。所有命令贴合线上运维、脚本自动化、日志整理场景,补齐官方高频参数、底层特性、生产禁忌、面试核心区别,无冷门参数、无冗余内容。
- # ===================== 1. touch 文件创建 =====================
- # 核心作用:创建空文件 / 更新文件时间戳
- touch test.txt # 文件不存在则创建空文件,存在则更新「访问+修改时间」
- touch file1.log file2.txt # 一次性批量创建多个文件
- touch -c nofile.txt # -c 不创建新文件,仅更新已有文件时间戳(防止生成空文件)
- touch -t 202601011200 test.txt # 指定时间戳:2026-01-01 12:00
- # 实战技巧:批量有序创建文件(脚本/测试刚需)
- touch data{01..10}.txt
- # ===================== 2. rm 文件/目录删除(高危命令) =====================
- # 特性:Linux无回收站,删除默认永久丢失,生产严禁裸删
- rm test.txt # 删除文件,交互式询问 y/n
- rm -f test.txt # 强制删除,不询问、不报错、静默删除(日常主力)
- rm -rf testdir/ # 递归+强制删除目录及所有内容(生产高频,极度谨慎)
- rm -ri testdir/ # 交互式逐级确认删除(安全删未知目录)
- rm -rv testdir/ # 可视化删除,打印每一步删除日志
- # 生产禁忌写法(绝对禁止)
- # rm -rf / 彻底清空根目录
- # rm -rf /* 清空系统所有数据
- # ===================== 3. cp 文件/目录复制 =====================
- # 特性:复制产生新文件,占用磁盘IO,生成独立inode
- cp file.txt /tmp/ # 复制文件到指定目录,同名直接覆盖
- cp file.txt /tmp/newfile.txt # 复制并重命名
- cp -r dir1 /tmp/ # 递归复制目录(复制目录必须带 -r)
- cp -R dir1 /tmp/ # 递归复制,保留软链接本身(不递归跟进源文件)
- cp -p file.txt /tmp/ # 保留原有:权限、属主、时间戳、属性
- cp -rf dir1 /tmp/ # 强制覆盖、静默复制(脚本自动化专用)
- cp -n file.txt /tmp/ # 不覆盖已有文件(安全复制首选)
- # ===================== 4. mv 移动/重命名 =====================
- # 核心特性:同分区移动仅修改路径指针,无磁盘IO、速度极快!
- mv old.txt new.txt # 同目录 = 重命名文件/目录
- mv file.txt /home/ # 跨目录 = 移动文件
- mv dir1 /data/ # 移动整个目录(无需加-r,比cp高效百倍)
- mv -f file.txt /data/ # 强制覆盖不提示
- mv -n file.txt /data/ # 不覆盖已有文件(安全移动)
- mv -v file.txt /data/ # 可视化移动日志
- # ===================== 5. ln 软硬链接创建(面试TOP考点) =====================
- # 软链接(符号链接)= Windows快捷方式
- ln -s /etc/nginx/nginx.conf nginx.conf
- # 硬链接 = 同一文件多入口,共享inode
- ln source.txt hard_link.txt
- # 链接查看
- ls -li # 查看inode、区分软硬链接
复制代码
2.2 核心原理精讲:软硬链接完整区别(面试必考)
-
软链接(ln -s):独立文件、存储路径指向;支持跨分区、跨磁盘、支持目录;源文件删除后链接失效(红标报错);权限继承源文件。
-
硬链接(ln):多个文件名共享同一个inode、同一磁盘数据;不支持跨分区、不支持目录、不能跨设备;删除任意一个链接文件,数据不丢失,所有链接正常使用。
-
生产用途:软链接用于版本切换、日志统一目录、程序路径迁移兼容;硬链接用于文件备份、防止误删数据。
2.3 高频易错点 & 踩坑总结
-
touch 误区:touch 不是单纯创建文件,已有文件会刷新时间戳,如需只创建不更新,使用 touch -c。
-
rm 致命坑:Linux无回收站,rm -rf 删除永久丢失,生产操作目录建议先 ls 确认路径。
-
cp 目录必带-r:不加-r复制目录会直接报错,日常脚本统一用 cp -rf 容错。
-
mv 高效特性:同分区移动不消耗IO,大文件迁移优先mv,跨分区mv等价「cp+rm」。
-
软硬链接禁忌:目录不允许创建硬链接,跨磁盘/跨分区无法创建硬链接。
2.4 生产最佳实践
-
自动化脚本创建文件统一使用 touch -c,避免多余空文件生成;
-
线上删除目录优先先移动到垃圾目录,确认无误再删除,规避误删;
-
复制重要配置文件使用 cp -p 保留权限时间属性,保证服务兼容;
-
多版本软件切换全部使用软链接,灵活切换版本、无需改配置;
-
批量文件操作优先使用 {} 批量语法,高效简洁。
3. 文件内容查看命令(cat/more/less/head/tail)全场景【生产完整版+原理+避坑】
3.1 命令总述
文件内容查看是日志排查、配置校验、文件解析的核心基础,本节涵盖5大高频查看命令,精准区分小文件全量查看、大文件分页查看、头部尾部检索、实时日志监控四大生产场景。补齐全套实用参数、专属操作快捷键、场景选型逻辑、易错坑点,无冗余冷门参数,完全贴合线上运维、面试实战。
- # ===================== 1. cat 全量查看(小文件专属) =====================
- # 核心原理:一次性读取文件所有内容加载到终端,不适合大文件,容易卡顿刷屏
- cat test.txt # 查看文件全部内容
- cat -n test.txt # 显示所有内容+全局行号(报错定位行号必备)
- cat -b test.txt # 显示行号,空行不编号(更整洁,生产首选)
- cat -E test.txt # 每行末尾加$符号,快速排查行尾空格、换行符
- cat -s test.txt # 压缩连续空行,多个空行合并为一行
- # 拓展用法:多文件合并查看
- cat file1.txt file2.txt # 依次查看多个文件内容
- # ===================== 2. more 单向分页查看(中大文件基础分页) =====================
- # 核心特性:单向翻阅,仅支持向下翻页/翻行,看完自动退出
- more app.log # 分页查看文件内容
- more -10 app.log # 自定义每页展示10行
- # 专属操作快捷键
- # 空格 :向下翻一页
- # 回车 :向下翻一行
- # q :立即退出查看
- # Ctrl+F / Ctrl+B :快速翻页
- # ===================== 3. less 全能分页查看(生产首选、功能最强) =====================
- # 核心优势:支持上下翻阅、关键词搜索、行号查看、不会自动退出,适配超大日志文件
- less app.log # 打开文件,全能分页查看
- less -N app.log # 直接显示行号
- # 生产高频快捷键(必背)
- # /关键词 :向下搜索匹配关键词(日志查error核心)
- # ?关键词 :向上搜索匹配关键词
- # n :跳转下一个匹配结果
- # N :跳转上一个匹配结果
- # G :快速跳转到文件末尾
- # 1G :快速跳转到文件开头
- # 上下箭头 :逐行翻阅
- # q :退出查看
- # ===================== 4. head 查看文件头部(检索文件开头信息) =====================
- # 默认展示前10行,适配查看配置文件表头、日志开头规则
- head nginx.conf # 默认查看前10行
- head -n 20 nginx.conf # 自定义查看前20行
- head -n -5 test.txt # 查看全部内容,排除最后5行(小众实用)
- # ===================== 5. tail 查看文件尾部+实时日志监控(运维核心) =====================
- # 核心场景:线上实时监控运行日志、排查实时报错信息
- tail app.log # 默认查看最后10行
- tail -n 30 app.log # 自定义查看最后30行静态内容
- tail -n 100 app.log # 查看末尾100行,适配报错回溯
- # 实时监控核心参数(生产重中之重)
- tail -f app.log # 实时跟踪日志输出
- # 缺陷:日志被切割/删除重建后,监控链路中断,失效停止输出
- tail -F app.log # 强力实时监控(生产唯一推荐)
- # 优势:自动监听文件inode变化,日志切割、删除重建后自动重连,持续监控不中断
- # 组合用法:回溯100行并实时监控
- tail -n 100 -F app.log
复制代码
3.2 核心场景选型规则(生产标准规范)
-
cat:仅用于 10MB以内小文件、配置文件快速全量查看,禁止用于超大日志,避免终端卡顿、内存占用过高。
-
more:适配中等大小文件简单翻阅,功能单一,仅临时使用,生产优先替代为less。
-
less:大文件查看首选,支持搜索、上下翻阅、灵活跳转,是运维查看静态日志、大文件的万能命令。
-
head:专门查看文件开头配置、表头、初始化信息,快速校验文件头部规则。
-
tail:静态回溯用tail -n,线上实时日志监控统一使用 tail -F,规避日志切割导致的监控中断问题。
3.3 高频易错点 & 面试核心考点
-
cat致命误区:大文件使用cat会一次性加载全部内容,瞬间刷屏、占用系统内存,严重时导致终端卡死,生产严禁滥用。
-
tail -f 与 tail -F 核心区别(面试必考):-f 跟随文件inode,文件重建后失效;-F 跟随文件名,自动适配文件重建、切割,稳定性更强。
-
less自动退出问题:less查看文件不会自动退出,需手动输入q退出,适合精细检索;more查看完毕会自动退出。
-
行号参数区别:cat -b 空行不编号、cat -n 所有行均编号,排查代码、配置文件报错优先用-b。
3.4 生产最佳实践总结
-
配置文件校验统一使用 cat -b,整洁展示行号,快速定位语法报错;
-
10MB以上日志文件一律使用 less -N 分页查看,兼顾效率和可读性;
-
线上服务日志实时监控强制使用 tail -F,适配日志切割场景,杜绝监控中断;
-
排查日志历史报错,优先 tail -n 1000 回溯末尾内容,无需全量查看文件;
-
精准检索日志报错,搭配less搜索快捷键,快速定位错误堆栈,排查效率翻倍。
4. 文件精准查找命令(find/locate/which/whereis)高阶精讲【生产完整版+原理+避坑】
4.1 命令总述
文件查找是运维日志清理、文件溯源、配置检索、批量处理的核心刚需。本节涵盖四大查找命令:find精准磁盘遍历、locate快速数据库检索、which命令路径查找、whereis系统文件全量定位。补全高阶筛选参数、批量处理动作、底层原理、命令差异、生产实战场景、面试高频考点,无冗余冷门参数,完全适配线上排错、自动化脚本编写。
- # ===================== 四大查找命令核心定位 =====================
- # find:实时扫描磁盘,精准度最高、功能最全,支持多条件复合筛选、批量操作
- # locate:检索系统数据库,速度极快,存在时间延迟
- # which:仅查找可执行命令的二进制路径
- # whereis:查找命令二进制、配置、手册、源码全路径
- # ===================== 1. find 高阶全量用法(生产核心) =====================
- # 语法:find 查找路径 【筛选条件】 【执行动作】
- # 1.1 按文件名筛选(精准/模糊/忽略大小写)
- find /etc -name "nginx.conf" # 全盘精准查找指定文件
- find /var/log -name "*.log" # 模糊匹配批量查找日志文件
- find ./ -iname "DATA.TXT" # -i 忽略大小写匹配文件
- # 1.2 按文件类型筛选(精准过滤文件/目录/软链接)
- find ./ -type f # 只查找普通文件
- find ./ -type d # 只查找所有目录
- find ./ -type l # 只查找所有软链接文件
- find /dev -type b # 查找块设备文件(磁盘分区)
- # 1.3 按文件大小筛选(日志清理、大文件排查刚需)
- find ./ -size +100M # 查找大于100M的文件
- find ./ -size -10M # 查找小于10M的文件
- find ./ -size 50k # 查找等于50k的文件
- find / -size +1G # 全盘查找1G以上大文件(磁盘爆满排查)
- # 1.4 按时间筛选(文件归档、过期清理核心)
- # mtime:修改时间 atime:访问时间 ctime:属性变更时间
- find ./ -mtime -7 # 近7天修改的文件
- find ./ -mtime +30 # 30天前修改的过期文件
- find ./ -mmin -10 # 10分钟内修改的文件(实时排查)
- # 1.5 按权限/属主筛选(安全巡检、权限排查)
- find ./ -perm 777 # 查找权限为777的高危文件
- find /home -user root # 查找root属主文件
- find ./ -group nginx # 查找nginx属组文件
- # 1.6 多条件复合筛选(高阶用法)
- find ./ -name "*.log" -size +10M # 查找所有大于10M的日志文件
- find ./ -type f -mtime +15 -perm 644 # 15天前修改、权限644的普通文件
- # 1.7 核心高阶:find批量执行动作(生产脚本刚需)
- find /logs -name "*.log" -mtime +7 -delete # 直接删除7天前过期日志
- find ./ -name "*.tmp" -exec rm -f {} \; # 批量删除临时文件
- find /etc -name "*.conf" -exec cp {} /backup/ \; # 批量备份配置文件
- find ./ -type f -exec ls -lh {} \; # 批量展示文件详情
- # ===================== 2. locate 快速检索命令 =====================
- locate nginx.conf # 快速匹配含关键词的所有文件路径
- locate *.log # 批量匹配日志文件
- updatedb # 更新系统检索数据库(核心依赖)
- # ===================== 3. which 命令路径查找 =====================
- which ls # 查看命令二进制可执行路径
- which java # 定位JDK真实安装路径
- which docker # 查找服务命令启动路径
- # ===================== 4. whereis 全方位文件定位 =====================
- whereis nginx # 输出:二进制路径+配置路径+手册路径
- whereis java # 全方位检索程序相关所有文件
- whereis -b nginx # 只查看二进制可执行文件
- whereis -m nginx # 只查看帮助手册文件
复制代码
4.2 四大查找命令底层原理与核心区别(面试必考)
-
find:实时遍历磁盘inode检索,精准无遗漏、无延迟,支持多条件复合筛选、批量操作;缺点是全盘检索速度较慢,适合精准排查、批量处理。
-
locate:检索 /var/lib/mlocate 系统预生成数据库,速度极快;新创建文件未录入数据库则无法检索,存在延迟,需手动执行 updatedb 更新。
-
which:仅遍历系统PATH 环境变量路径,只检索可执行命令,无法查找普通文件、配置文件。
-
whereis:专属系统程序检索,可同时查找二进制文件、配置文件、帮助文档、源码路径,仅适配系统命令/服务,不适合自定义文件查找。
4.3 高频易错点 & 踩坑总结
-
locate延迟坑:新创建的文件、目录不会立刻被检索,必须执行 updatedb 更新数据库,生产排查新文件禁止用locate。
-
find -delete风险:find批量删除无回收站,执行前建议先去掉-delete,用ls确认匹配文件,避免误删系统文件。
-
which检索局限:自定义脚本、不在PATH环境变量中的命令,which无法查到,只能用find全盘检索。
-
时间参数误区:-mtime +7 代表7天前过期文件,不包含近7天;清理日志务必区分正负号,避免误删新日志。
-
exec语法坑:-exec 结尾必须带 {} \;,空格和分号不可省略,否则命令报错。
4.4 生产最佳实践总结
-
日常快速查已知系统命令路径,优先用 which/whereis,高效快捷;
-
批量日志清理、大文件排查、自定义文件检索,统一使用 find,精准可控;
-
服务器巡检、磁盘爆满排查,固定组合:find / -size +100M -type f快速定位大文件;
-
自动化脚本清理过期日志,统一使用 find + -delete 语法,无需嵌套管道,简洁稳定;
-
老旧服务器禁止频繁全盘find / 检索,IO占用极高,容易导致服务器卡顿,需指定精准目录检索。
5. 文件目录拓展实战技巧与避坑总结【生产完整版+高阶技巧+全局避坑】
5.1 模块总述
本小节整合前文所有文件、目录、查找命令的高阶实战技巧、批量操作语法、组合命令、全局致命坑点、生产通用规范。聚焦日常高频实操、脚本自动化、日志运维、批量处理场景,汇总面试高频综合考点,补齐单一命令未覆盖的组合用法、细节禁忌和通用最优实践,是文件目录模块的收尾精华总结。
5.2 核心高频易错坑点(全局避坑)
-
正在写入的日志禁止rm删除:服务正在写入的日志文件,直接rm -rf删除后,磁盘空间不会立即释放,进程仍占用文件句柄,导致磁盘爆满无法排查,必须用cat /dev/null > 文件清空。
-
批量操作{}语法坑:{01..10}为规范两位数命名,{1..10}为单数命名,混用会导致文件排序混乱,生产批量创建统一用补零格式。
-
软链接删除误区:删除软链接时禁止rm -rf 软链接名/(带斜杠),会直接删除源目录所有内容,正确写法:rm -f 软链接名。
-
find延时执行坑:find搭配-delete/exec执行批量操作前,必须先去掉执行动作,仅保留筛选条件预览结果,避免批量误删系统文件。
-
目录复制必带-r参数:cp命令复制目录不加-r直接报错,日常脚本统一使用cp -rf,兼容文件、目录双重场景。
-
mv跨分区本质坑:同分区mv仅修改路径指针、无IO;跨分区mv等价「cp复制+原文件删除」,大文件跨分区移动耗时极高,需提前预留磁盘空间。
5.3 面试高频综合考点
-
为什么生产不用tail -f而用tail -F?:-f跟随inode,日志切割、文件重建后监控中断;-F跟随文件名,自动适配文件变更,持续监控不中断,适配日志轮转场景。
-
软链接和硬链接生产适用场景区别?:软链接用于版本切换、路径兼容、日志归集;硬链接用于本地文件防误删备份,不支持跨分区、目录。
-
磁盘空间爆满但找不到大文件原因?:存在已删除但被进程占用的日志文件,句柄未释放,需重启对应服务或清空文件而非删除文件。
-
批量操作优先用什么语法?:简单批量创建用大括号{},复杂条件批量处理用find+exec,高效稳定适配自动化脚本。
5.4 生产最终最佳实践总结
-
所有线上文件删除遵循先备份、后删除、先预览、后执行原则,高危操作务必留痕;
-
日志运维统一规范:大文件less查看、实时监控tail -F、过期文件find批量清理、活跃文件清空不删除;
-
版本迭代、路径迁移全部使用软链接,灵活切换、无需修改服务配置;
-
自动化脚本文件操作统一加容错参数:mkdir -p、cp -rf、rm -f,避免脚本异常中断;
-
批量文件/目录命名统一规范化,使用{01..n}补零格式,便于检索、排序和批量处理。
- # ===================== 1. 高阶批量创建技巧(测试/脚本刚需) =====================
- # 1.1 有序批量创建文件(01-10规范命名,比1-10更规整)
- touch test{01..10}.txt
- # 1.2 有序批量创建多级目录
- mkdir -p project/{code,log,config,backup}
- # 1.3 混合批量创建(文件+目录一次性生成)
- mkdir dir{1..5} && touch file{1..5}.txt
- # 1.4 指定后缀批量创建日志文件
- touch {error,info,warn}.log
- # ===================== 2. 安全删除与清理实战(生产保命技巧) =====================
- # 2.1 安全清空大文件(禁止直接rm删正在写入的日志)
- cat /dev/null > big.log
- # 2.2 批量清空当前目录所有日志文件(不删除文件,只清空内容)
- find ./ -name "*.log" -exec truncate -s 0 {} \;
- # 2.3 安全删除:先移动备份,确认无误再彻底删除
- mv old_log/ /tmp/trash/
- # rm -rf /tmp/trash/ # 确认无问题后执行
- # 2.4 禁止高危裸删命令
- # 严禁:rm -rf /* 、 rm -rf / 、 rm -rf ./*(根目录下致命操作)
- # ===================== 3. 日志运维专属实战技巧 =====================
- # 3.1 日志实时监控最优组合(生产标准)
- tail -n 200 -F app.log
- # 3.2 排查历史报错:结合筛选快速定位异常
- tail -n 1000 app.log | grep -i error
- # 3.3 大日志查看最优命令,杜绝cat卡死终端
- less -N app.log
- # ===================== 4. 软硬链接生产实战用法 =====================
- # 4.1 软件版本切换(Nginx/Java版本切换神器)
- ln -sf /usr/local/nginx1.24 /usr/local/nginx
- # 4.2 日志统一归集(多目录日志汇总到统一路径)
- ln -sf /var/log/nginx/*.log /data/logs/
- # 4.3 重要文件防误删(硬链接备份)
- ln important.txt important_bak.txt
- # ===================== 5. find批量处理高阶实战(脚本核心) =====================
- # 5.1 批量删除7天前过期日志(生产日志清理标准命令)
- find /data/logs -name "*.log" -mtime +7 -delete
- # 5.2 批量备份所有配置文件到备份目录
- find /etc -name "*.conf" -exec cp {} /data/conf_backup/ \;
- # 5.3 批量修改所有目录权限
- find ./ -type d -exec chmod 755 {} \;
- # ===================== 6. 路径切换高效技巧 =====================
- # 6.1 双向快速切换两个工作目录(高频开发/运维场景)
- cd /data/project && cd -
- # 6.2 快速返回上多级目录简写
- cd ../..
- # 6.3 空白cd快速回家目录
- cd
复制代码
三、用户、用户组、权限体系【生产完整版+原理+避坑+面试精讲】
1. 模块总述
Linux 是多用户、多任务、权限隔离操作系统,用户与权限体系是系统安全、资源隔离、服务权限管控、线上故障排查的核心基石。所有文件、进程、服务、目录都归属特定用户与权限管控,权限配置错误是线上服务启动失败、文件无法读写、安全漏洞的高频原因。
本节完整补全用户/组管理、权限底层原理、普通/特殊/隐藏权限、sudo权限管控、生产避坑、面试核心考点,无冗余冷门参数,全覆盖运维生产与面试场景。
2. 用户与用户组核心管理(系统安全基础)【生产完整版+底层原理+全场景精讲】
2.1 核心模块总述
Linux 系统所有进程、文件、服务的运行都依赖用户身份权限约束,用户与用户组是系统资源隔离、权限分级、安全管控的底层核心。合理的用户管理可以避免root权限滥用、防止越权操作、规避服务提权漏洞。本小节完整补全用户分类、核心配置文件详解、UID/GID机制、全量命令高阶用法、批量管理、生产场景、致命坑点、面试高频考点,完全适配企业运维、服务器安全加固、自动化运维场景。
2.2 底层核心原理:用户分类与UID/GID机制
Linux 所有用户通过 UID(用户唯一ID)、GID(用户组唯一ID) 系统身份识别,系统不识别用户名,仅识别UID/GID,用户名仅为人工可读标识。
-
超级管理员用户(root):UID=0,系统最高权限,拥有系统所有操作权限,可修改、删除、启停任何资源,生产禁止直接登录、禁止业务程序运行。
-
系统用户(服务用户):UID=1-999,无登录权限、无家目录,专属系统服务运行(nginx、mysql、docker),用于服务权限隔离,防止服务被提权后篡改系统文件。
-
普通业务用户:UID≥1000,人工创建,拥有独立家目录、支持登录系统,权限受限,仅可操作自身权限内文件与命令,用于日常运维、业务开发。
用户组机制:每个用户默认拥有唯一主组、可拥有多个附属组,主组为创建文件默认所属组,附属组用于跨组权限复用、多人协作授权。
2.3 三大核心配置文件深度解析(面试必考)
所有用户、组信息永久存储在系统配置文件,所有用户命令本质都是修改这三个文件。
-
/etc/passwd 用户信息文件(全局可读) 格式:用户名:密码占位符x:UID:GID:用户备注:家目录:登录Shell 核心作用:存储用户基础信息,x仅为密码占位,真实密码不存储于此,所有用户均可读取,无敏感信息。
-
/etc/shadow 密码影子文件(仅root可读) 核心作用:存储加密密码、密码有效期、过期时间、锁定状态,系统最高安全文件,普通用户无任何权限读取,防止密码泄露爆破。
-
/etc/group 用户组配置文件 格式:组名:x:GID:附属组成员列表 核心作用:记录所有用户组GID、组内附属用户,实现多用户批量权限统一管控。
2.4 全量高频命令高阶精讲(生产参数全覆盖)
- # ===================== 一、用户创建 useradd 完整高阶用法 =====================
- # 1. 默认创建:自动创建同名主组、自动生成家目录、默认登录bash
- useradd test01
- # 2. 生产标准创建(自定义UID、主组、家目录、登录shell,规范统一)
- useradd -u 1010 -g dev -m -d /home/dev01 -s /bin/bash dev01
- # 参数详解
- # -u 指定固定UID(企业规范:业务用户UID统一1000以上,不重复)
- # -g 指定主组(唯一主组,创建文件默认归属组)
- # -m 强制创建家目录(默认必备,防止无家目录报错)
- # -d 自定义家目录路径
- # -s 指定登录Shell
- # 3. 系统服务用户创建(禁止登录、无家目录,服务专用)
- useradd -u 950 -g nginx -s /sbin/nologin -M nginx
- # -M 不创建家目录,服务用户无需登录目录
- # ===================== 二、用户删除 userdel 安全用法 =====================
- userdel test01 # 仅删除用户账号,保留家目录、残留文件(易产生垃圾文件)
- userdel -r test01 # 生产首选:删除账号+清空家目录+邮箱数据,彻底无残留
- # ===================== 三、用户密码管理 passwd 全场景 =====================
- passwd # root修改自身密码
- passwd dev01 # root强制修改普通用户密码(无需原密码)
- passwd -l dev01 # 锁定用户账号(冻结登录,运维封禁账号必备)
- passwd -u dev01 # 解锁锁定账号,恢复登录权限
- passwd -d dev01 # 清空密码(无密码登录,生产严禁使用,存在安全漏洞)
- # ===================== 四、用户信息修改 usermod 高阶核心(重点避坑) =====================
- # 1. 追加附属组(生产最高频!!!)
- usermod -aG docker,netdev dev01 # -aG 追加多个附属组,不覆盖原有组权限
- # 2. 修改用户主组
- usermod -g ops dev01
- # 3. 修改登录Shell,禁止用户登录系统(离职账号、服务账号加固)
- usermod -s /sbin/nologin dev01
- # 4. 修改UID、家目录
- usermod -u 1011 dev01 # 修改用户UID
- usermod -m -d /home/newdev dev01 # 迁移并修改家目录
- # 致命禁忌:禁止单独使用 usermod -G !会清空原有所有附属组,导致权限丢失
- # ===================== 五、用户组管理 group 全套命令 =====================
- groupadd dev # 创建普通用户组
- groupadd -g 1010 dev # 指定GID创建用户组
- groupmod -n new_dev dev # 修改用户组名称
- groupdel dev # 删除空用户组(组内有用户禁止删除)
- # ===================== 六、用户信息排查命令(排错刚需) =====================
- id # 查看当前用户UID/GID/所有所属组
- id dev01 # 精准查看指定用户身份信息、权限组
- groups # 查看当前用户所有附属组+主组
- whoami # 快速确认当前登录账号
- w # 查看在线用户、登录终端、系统负载、操作时长
- who # 简洁查看在线登录用户
- # ===================== 七、用户切换环境深度用法 =====================
- su dev01 # 切换用户,保留原root环境变量(极易权限错乱)
- su - dev01 # 生产标准:完全切换用户环境,重置家目录、环境变量、工作目录
- # 核心区别:su - 等价完整登录系统,所有权限、环境完全匹配目标用户
复制代码
- # ===================== 1. 用户创建 useradd =====================
- # 基础创建普通用户,自动创建家目录、默认组
- useradd dev
- # 自定义参数创建用户(生产规范用法)
- useradd -u 1001 -g dev -m -s /bin/bash testuser
- # 参数解析
- # -u 指定UID、-g 指定主组、-m 自动创建家目录、-s 指定登录Shell
- # ===================== 2. 用户删除 userdel =====================
- userdel testuser # 仅删除用户,保留家目录数据
- userdel -r testuser # 彻底删除用户+家目录+邮箱数据(生产清理首选)
- # ===================== 3. 密码管理 passwd =====================
- passwd # root修改自身密码
- passwd dev # root修改指定用户密码
- passwd -l dev # 锁定用户(禁止登录,账号冻结)
- passwd -u dev # 解锁锁定用户
- passwd -d dev # 清空用户密码(无密码登录,生产禁止)
- # ===================== 4. 用户信息修改 usermod =====================
- usermod -aG docker dev # 追加附属组(核心!-a 追加不覆盖)
- usermod -g root dev # 修改用户主组
- usermod -s /sbin/nologin dev # 禁止用户登录系统(服务账号专用)
- usermod -u 1002 dev # 修改用户UID
- # ===================== 5. 用户组管理 groupadd/groupdel =====================
- groupadd dev # 创建自定义用户组
- groupdel dev # 删除空用户组
- groupmod -n newdev dev # 修改用户组名称
- # ===================== 6. 用户信息查看(排查刚需) =====================
- id # 查看当前用户UID/GID/所属所有组
- id dev # 查看指定用户详细权限信息
- groups # 查看当前用户所属组列表
- whoami # 查看当前登录用户名
- w/ who # 查看在线用户及操作状态
- # ===================== 7. 用户切换与权限提升 =====================
- su dev # 切换用户,保留原环境变量
- su - dev # 完全切换用户,加载全新环境、家目录(生产标准)
- sudo command # 临时借用root权限执行单条命令
- visudo # 编辑sudo权限配置(唯一规范编辑方式,自带语法校验)
复制代码
2.5 高频致命坑点 & 生产避坑细则
-
usermod 权限丢失致命坑(Top1踩坑):单独使用 usermod -G 组名 会覆盖清空用户原有所有附属组,直接导致业务权限失效、服务启动失败;追加组必须固定使用 -aG。
-
su 切换环境坑:su 用户 不重置环境变量、PATH路径,会出现「身份切换成功但命令执行报错、权限错乱」问题,生产运维、脚本切换用户强制使用 su - 用户。
-
服务用户登录风险:Nginx、MySQL、Redis等系统服务用户,必须配置 /sbin/nologin 禁止登录,若配置/bin/bash会导致恶意人员利用服务账号登录系统,造成安全入侵。
-
userdel 残留隐患:不加-r删除用户,会残留无主无属组文件,此类文件无法被正常权限管理,长期堆积会造成磁盘垃圾、权限漏洞,用户离职清理必须 userdel -r。
-
空用户组删除报错:groupdel 无法删除存在用户的用户组,强制删除会导致用户组权限紊乱,需先迁移用户再删组。
-
UID重复冲突坑:系统不允许重复UID,手动指定UID需提前 id 用户名 校验,UID冲突会导致用户权限错乱、文件归属异常。
2.6 面试高频核心考点
-
root UID和普通用户UID区别? root固定UID=0,拥有最高权限;系统用户UID 1-999,普通用户UID≥1000,系统通过UID区分用户权限等级。
-
-G 和 -aG 核心区别? -G 覆盖式赋值附属组,清空原有组;-aG 追加式新增附属组,保留原有所有权限,生产仅用-aG。
-
su 和 su - 本质区别? su 仅切换用户身份,保留原环境;su - 完整登录,重置所有环境变量、工作目录,是标准切换方式。
-
为什么服务用户禁止登录? 防止服务漏洞被利用提权登录服务器,实现服务权限隔离,最小化安全风险。
-
passwd -l 锁定原理? 在shadow文件中修改密码标识位,禁止账号密码登录,属于临时账号冻结,不影响文件权限。
2.7 生产标准化最佳实践
-
业务用户统一规范:固定UID≥1000、独立主组、家目录自动创建、登录Shell为/bin/bash;
-
所有后台服务统一使用独立系统用户运行,禁止root启动业务,禁止服务账号开启登录权限;
-
用户权限分组管理:运维组、开发组、业务组拆分权限,通过附属组实现批量授权;
-
人员离职账号清理标准:先锁定账号观察7天,确认无业务依赖后,使用 userdel -r 彻底清理;
-
所有用户组追加权限统一使用 usermod -aG,杜绝权限覆盖丢失问题;
-
定期巡检系统用户,清理无主文件、废弃账号、重复UID/GID,加固系统安全。
3. 文件基础权限体系(rwx 核心精讲)【生产完整版+底层逻辑+故障排错】
3.1 模块总述
rwx基础权限是Linux权限体系的核心基石,所有文件、目录、脚本、配置的访问与执行权限均由该体系管控。线上90%的服务启动失败、文件读写报错、权限越权漏洞,均源于rwx权限配置错乱。本节完整补全三段九位权限模型、字符+数值双解析、文件/目录权限差异化逻辑、权限搭配规范、报错故障场景、生产标准配置模板,全覆盖运维实操、故障排查、面试考点。
3.2 权限底层三段九位模型(核心原理)
Linux所有文件/目录默认拥有9位基础权限,分为三段权限主体,优先级从高到低:所有者(u) → 所属组(g) → 其他用户(o),系统严格按照身份匹配权限,匹配到高优先级身份后,不再校验低优先级权限。
三段权限主体释义:
-
u(user 所有者):文件/目录的归属创建用户,拥有最高权限支配权,默认权限优先级最高;
-
g(group 所属组):文件/目录归属的用户组,组内所有用户共享该段权限;
-
o(other 其他用户):既不是所有者、也不在所属组内的系统所有普通用户,权限优先级最低。
-
a(all 所有用户):统一指代 u+g+o 全部主体,用于全局批量修改权限。
3.3 rwx权限字符释义 + 数值换算细则
权限分为读、写、执行三种基础权限,每种权限对应固定数值,权限数值为累加计算,是数字授权的核心依据,生产全量权限配置均基于该规则。
|
权限字符
|
数值
|
权限含义
|
文件作用
|
目录作用
|
|---|
|
r(read)
|
4
|
读权限
|
查看、读取文件内容、复制文件
|
ls 列出目录内文件/子目录名称,无法访问文件内容
|
|
w(write)
|
2
|
写权限
|
修改、编辑、覆盖文件内容,不支持删除文件
|
对目录内文件进行新增、删除、重命名操作,无法修改目录本身
|
|
x(execute)
|
1
|
执行权限
|
运行脚本、二进制程序、可执行文件
|
核心必备权限:cd进入目录、访问目录内文件/子目录、读取文件完整属性
|
|
-(无权限)
|
0
|
无任何权限
|
无法读取、修改、执行文件
|
无法查看、进入、操作目录及内部资源
|
3.4 文件与目录权限本质差异(面试必考+故障核心)
绝大多数权限报错的核心原因:文件和目录的x权限作用完全不同,不能混用配置规则,具体差异化场景如下:
3.5 高频标准权限组合详解(生产通用模板)
生产环境禁止随意配置权限,统一遵循固定组合,适配99%业务场景,杜绝权限漏洞与业务报错:
-
644(rw-r--r--):普通文件默认权限 所有者可读写,组用户、其他用户仅可读; 适配:配置文件、日志文件、文本文件、静态资源,生产最安全通用权限。
-
755(rwxr-xr-x):目录/程序默认权限 所有者可读写执行,组用户、其他用户可读可执行; 适配:业务目录、脚本文件、可执行程序、软件安装目录。
-
700(rwx------):私密文件专属权限 仅所有者拥有所有权限,其他用户无任何权限; 适配:密钥文件、密码配置、隐私证书、数据库配置文件,最高安全级别。
-
600(rw-------):私密文本文件权限 仅所有者可读写,无任何对外开放权限; 适配:账号密码配置、私密日志、核心业务配置文件。
3.6 权限修改双模式实操(符号+数字全覆盖)
3.6.1 符号授权模式(精准局部修改,安全可控)
适合仅修改单一权限、不改动原有其他权限的场景,新手首选,无权限错乱风险。
- # 语法:chmod 权限主体(ugoa)±= 权限(rwx) 文件/目录
- chmod u+x start.sh # 给所有者新增执行权限(脚本必备)
- chmod g-w test.txt # 移除所属组写权限,防止误改
- chmod o-rwx secret.key # 清空其他用户所有权限,保护私密文件
- chmod a+r log.log # 所有用户新增读权限
- chmod g=rx dir/ # 强制设置所属组权限为读+执行,覆盖原有权限
复制代码
3.6.2 数字授权模式(生产主流,简洁高效)
通过权限数值累加直接赋值,一次性覆盖三段所有权限,线上运维、脚本自动化首选。
- # 基础标准授权
- chmod 644 nginx.conf # 普通配置文件标准权限
- chmod 755 /data/nginx # 业务目录标准权限
- chmod 700 ssh.key # 密钥文件私密权限
- chmod 600 user.pass # 密码配置文件权限
- # 递归批量授权(目录全局统一权限)
- chmod -R 755 /home/project/ # 目录及内部所有文件递归赋权
- chmod -R 644 /etc/conf/ # 批量统一配置文件权限
复制代码
3.7 权限修改全量命令(chmod+chown 完整版|生产全参数+避坑+批量运维)
Linux权限修改核心分为两大命令:chmod(修改读写执行权限)、chown(修改文件/目录属主属组),二者搭配实现完整权限管控。本节补全官方高频参数、混合权限赋值、递归批量操作、权限重置、特殊权限叠加、生产易错坑点,覆盖99%权限运维场景,是权限排错、安全加固的核心实操模块。
3.7.1 chmod 权限修改全量用法(rwx普通权限+特殊权限全覆盖)
chmod 仅管控rwx基础权限+SUID/SGID/Sticky特殊权限,不修改文件归属用户/用户组,支持符号授权、数字授权、特殊权限叠加三种模式。
- # ===================== 一、符号授权(精准局部修改,无权限覆盖风险) =====================
- # 语法:chmod [用户身份][±=][权限] 文件/目录
- # 身份:u(所有者)、g(所属组)、o(其他)、a(全部)
- # 动作:+(新增权限)、-(移除权限)、=(强制赋值权限,覆盖原有)
- # 1. 单身份精准改权
- chmod u+x start.sh # 所有者新增执行权限(脚本、程序必备)
- chmod g-w nginx.conf # 移除所属组写权限,防止配置被误改
- chmod o-rwx secret.key # 清空其他用户所有权限,保护私密文件
- chmod g=rx /data/project # 强制给所属组赋值读+执行权限,清空原有多余权限
- # 2. 多身份同时改权(逗号分隔,无空格)
- chmod u+x,g-w,o-r app.sh # 所有者加执行、组去写、其他清空所有权限
- chmod a-w test.txt # 所有用户移除写权限,全局只读
- # 3. 全局统一赋值权限
- chmod a=r test.log # 所有用户仅保留读权限,无写、无执行
- # ===================== 二、数字授权(生产主流,一次性全覆盖权限) =====================
- # 权限数值:r=4、w=2、x=1,三段数值分别对应u/g/o,累加赋值
- chmod 644 *.txt # 批量普通文件标准权限:rw-r--r--
- chmod 755 /data/* # 批量目录/脚本标准权限:rwxr-xr-x
- chmod 700 /root/ssh/* # 私密密钥最高权限:仅所有者全权
- chmod 600 database.pwd # 密码配置文件权限:仅所有者读写
- # ===================== 三、递归批量授权(目录全局统一权限) =====================
- # -R 递归作用于目录内所有文件、子目录(生产高频,谨慎使用)
- chmod -R 755 /home/www/ # 业务目录全局赋予755权限
- chmod -R 644 /etc/nginx/conf.d/ # 批量统一配置文件只读权限
- # 递归授权进阶:区分文件/目录单独赋权(高阶避坑)
- find /data/project -type d -exec chmod 755 {} \; # 所有目录赋755
- find /data/project -type f -exec chmod 644 {} \; # 所有文件赋644
- # ===================== 四、特殊权限叠加(基础+特殊权限组合) =====================
- # 特殊权限数值:SUID=4000、SGID=2000、Sticky=1000
- chmod 4755 /usr/bin/testcmd # 赋予SUID权限,普通用户执行临时拥有所有者权限
- chmod 2755 /data/share # 赋予SGID权限,目录内文件自动继承所属组
- chmod 1777 /tmp/test # 赋予Sticky粘滞位,共享目录防互删文件
复制代码
3.7.2 chown 属主属组修改全量用法(权限归属核心)
chown 专门修改文件/目录的所有者、所属组,不改变rwx权限,服务启动报错、文件权限归属异常,90%可通过chown修复,支持单改属主、单改属组、同时修改、递归批量修改。
- # ===================== 一、基础单文件修改 =====================
- chown nginx test.conf # 仅修改文件所有者为nginx,所属组不变
- chown :nginx test.conf # 仅修改文件所属组为nginx,所有者不变
- chown nginx:nginx test.conf # 同时修改属主、属组为nginx(生产最常用)
- # ===================== 二、递归批量修改目录归属(业务部署刚需) =====================
- chown -R nginx:nginx /var/log/nginx/ # 递归统一nginx日志目录归属
- chown -R mysql:mysql /data/mysql/ # 修复数据库目录权限归属(启动报错必备)
- # ===================== 三、高阶精准修改(避坑优化) =====================
- # 仅修改目录归属,不改动内部文件
- find /data/project -type d -exec chown nginx:nginx {} \;
- # 仅修改文件归属,不改动目录
- find /data/project -type f -exec chown nginx:nginx {} \;
- # ===================== 四、特殊场景:同步归属权限 =====================
- chown --reference=src.txt dest.txt # 参考src文件权限,同步dest的属主属组
复制代码
3.7.3 权限重置与故障修复命令(排错专属)
针对权限错乱、递归误改、系统文件权限异常等故障,提供标准化重置命令,适配服务器权限修复、业务报错急救场景。
- # 1. 目录权限全局标准重置
- find /data/business -type d -exec chmod 755 {} \; -exec chown 业务用户:业务组 {} \;
- # 2. 配置文件全局标准重置
- find /etc/xxx -type f -exec chmod 644 {} \; -exec chown root:root {} \;
- # 3. 私密文件权限强制重置
- chmod 600 *.key *.pwd *.secret
- chmod 700 /root/.ssh/
- # 4. 清空所有特殊权限(修复提权漏洞)
- chmod 0755 文件名 # 清零SUID/SGID/Sticky,仅保留基础rwx权限
复制代码
3.7.4 核心参数详解与生产避坑准则
-
-R 递归参数致命坑:直接chmod -R 755 目录 会统一修改目录+文件权限,导致静态文件拥有x执行权限,存在篡改漏洞;生产优先用find区分文件/目录单独赋权。
-
chown 空参数误区:chown 不加组名仅改属主、不加用户名仅改属组,格式必须严格区分 用户:组,冒号不可缺失。
-
权限赋值=与±区别:chmod g=rx 强制覆盖权限,chmod g+rx 叠加权限,权限错乱修复必须用赋值模式。
-
系统目录禁止乱改权限:/etc、/usr、/root、/bin 等系统核心目录,禁止递归chmod/chown,极易导致系统瘫痪、命令失效。
3.7.5 生产标准权限修复模板(直接套用)
- # 业务站点目录标准权限修复(Nginx/Apache通用)
- find /usr/local/nginx/html -type d -exec chmod 755 {} \;
- find /usr/local/nginx/html -type f -exec chmod 644 {} \;
- chown -R nginx:nginx /usr/local/nginx/html
- # 服务日志目录标准权限修复
- find /var/log/nginx -type d -exec chmod 755 {} \;
- find /var/log/nginx -type f -exec chmod 644 {} \;
- chown -R nginx:nginx /var/log/nginx
- # 密钥SSH目录安全权限修复(防登录漏洞)
- chmod 700 /root/.ssh
- chmod 600 /root/.ssh/id_rsa
- chown -R root:root /root/.ssh
复制代码
- # ===================== 1. chmod 修改权限(符号/数字两种方式) =====================
- # 符号权限:精准修改单一权限,不影响原有权限
- chmod u+x test.sh # 所有者增加执行权限
- chmod g-w test.txt # 所属组去除写权限
- chmod o-rwx test.txt # 其他用户清空所有权限
- chmod a+r test.txt # 所有用户增加读权限
- # 数字权限:生产主流、简洁高效
- chmod 644 test.txt # u=rw- g=r-- o=r-- 普通文件默认权限
- chmod 755 testdir # u=rwx g=rx o=rx 目录默认权限
- chmod 700 secret.key # 仅所有者可读写执行,私密文件专属
- # 递归修改目录所有文件权限(批量运维刚需)
- chmod -R 755 /data/project
- # ===================== 2. chown 修改属主属组 =====================
- chown root:nginx test.conf # 同时修改所有者为root、所属组为nginx
- chown nginx test.conf # 仅修改所有者
- chown :nginx test.conf # 仅修改所属组
- # 递归批量修改目录属主属组
- chown -R nginx:nginx /var/log/nginx
复制代码
3.8 高频权限报错与故障排错(生产核心)
-
故障1:目录有rw权限,无法访问内部文件 根因:目录缺少x准入权限,rw仅能查看目录文件名,无法进入访问内容; 解决方案:chmod +x 目录名 补充执行权限。
-
故障2:脚本文件无法执行,提示Permission denied 根因:脚本文件无x执行权限,普通文件默认644无执行权限; 解决方案:chmod +x 脚本名.sh 赋予执行权限。
-
故障3:其他用户可修改公共配置文件 根因:文件权限大于644,开放了其他用户写权限; 解决方案:统一重置为 644 标准权限。
-
故障4:递归授权后系统目录权限错乱 根因:滥用chmod -R 根目录/系统目录,批量覆盖系统默认权限; 解决方案:禁止对/etc、/usr、/root等系统目录递归授权。
3.9 生产避坑细则 & 最佳实践
-
严格区分文件/目录权限:静态文件禁止755权限(存在篡改风险),目录禁止644权限(无法正常访问);
-
杜绝777高危权限:全局开放所有用户读写执行权限,极易被恶意提权、篡改文件,生产零容忍;
-
递归-R谨慎使用:批量授权前确认路径,仅对业务自定义目录使用,严禁操作系统核心目录;
-
私密资源最小权限:密钥、密码、隐私配置统一使用700/600权限,仅管理员可访问;
-
公共业务目录规范:业务运行目录755、配置文件644、日志文件644,统一标准化权限,规避未知报错。
3.10 面试高频核心考点汇总
-
目录只有rw没有x会怎样? 无法cd进入目录、无法读取内部文件内容、无法执行任何操作,权限完全失效;
-
644和755分别适配什么文件? 644适配所有静态文本、配置、日志文件;755适配目录、脚本、可执行程序;
-
文件w权限和目录w权限区别? 文件w权限修改内容,不删除文件;目录w权限管控内部文件增删改,不修改目录本身;
-
为什么生产禁止777权限? 所有用户可任意读写执行、篡改文件、植入恶意程序,存在严重安全漏洞。
4. 特殊权限与隐藏权限(进阶安全管控·全量精讲)
基础rwx权限仅能满足常规文件目录管控,Linux 额外提供SUID、SGID、Sticky三大特殊权限,以及chattr/lsattr文件系统隐藏权限,用于解决普通权限无法实现的精细化管控、安全防篡改、共享目录防误删、普通用户提权等核心场景。该模块是服务器安全加固、漏洞排查、高阶运维、高薪面试的核心考点,所有内容均为生产实战可用的完整规范,补齐全网通用简略知识点。
4.1 系统三大特殊权限 SUID/SGID/Sticky(原理+参数+场景+避坑)
三大特殊权限独立于rwx基础权限,叠加在九位基础权限之上,对应专属数值,可与基础权限组合使用,核心用于临时权限提升、目录权限继承、共享文件安全防护,生产需严格管控,避免恶意提权漏洞。
|
特殊权限
|
专属数值
|
适用对象
|
核心作用原理
|
生产适用场景
|
|---|
|
SUID
|
4000
|
仅二进制可执行文件
|
普通用户执行该文件时,临时继承文件所有者权限,执行过程中脱离自身权限约束,程序结束权限恢复
|
普通用户修改自身密码、特定系统命令提权
|
|
SGID
|
2000
|
可执行文件/目录
|
文件:执行时临时继承文件所属组权限;目录:目录内所有新建文件/目录自动继承目录所属组
|
多人协作目录统一权限、团队文件共享授权
|
|
Sticky粘滞位
|
1000
|
仅目录
|
目录内所有文件,仅文件所有者、root用户可删除/修改,其他用户无权限篡改他人文件
|
公共共享目录、临时目录防误删、防恶意篡改
|
系统特殊权限 SUID/SGID/Sticky(面试高频)
基础rwx之外的高级权限,用于特殊权限提升与目录安全管控,对应数值:SUID=4、SGID=2、Sticky=1
- # 1. SUID 特殊权限(文件专属)
- # 作用:普通用户执行该文件时,临时拥有文件所有者权限
- chmod u+s /usr/bin/passwd # passwd命令默认带SUID,普通用户可改自己密码
- # 2. SGID 特殊权限(文件/目录均可)
- # 作用:目录内新建文件自动继承目录所属组
- chmod g+s /data/share
- # 3. Sticky 粘滞位(仅目录专属,/tmp默认权限)
- # 作用:目录内文件仅文件所有者/root可删除,他人无法误删
- chmod o+t /tmp
复制代码
4.2 Ext文件系统隐藏权限(企业安全加固必备)
隐藏权限优先级高于普通rwx权限,即使是root用户也会被限制,常用于重要配置、日志文件防篡改、防删除。
- # 查看文件隐藏权限
- lsattr /etc/nginx/nginx.conf
- # +i 不可变权限(最高安全级别)
- chattr +i /etc/passwd # 锁定文件:任何人(root)无法修改、删除、重命名
- chattr -i /etc/passwd # 解除锁定
- # +a 追加权限(日志文件专属)
- chattr +a /var/log/nginx.log # 仅允许追加写入,禁止修改、删除、覆盖
- chattr -a /var/log/nginx.log # 解除追加锁定
复制代码
4.3 特殊权限生产场景与避坑
-
SUID安全风险:非系统命令禁止配置SUID,会导致普通用户提权,引发系统安全漏洞。
-
Sticky位核心用途:多人共享目录必须配置粘滞位,防止用户互相删除文件。
-
chattr锁文件刚需场景:系统关键配置文件(passwd、hosts、nginx.conf)可加+i锁定,防止误改、病毒篡改。
-
日志文件专属+a权限:业务日志文件加a权限,保障日志正常写入,杜绝日志被清空或删除。
5. Sudo权限精细化管控(生产核心·全量精讲)
5.1 模块总述与核心价值
sudo是Linux权限分级管控、最小权限落地、安全运维的核心机制,核心解决两大生产痛点:一是规避root账号直接登录、全员持有root密码的安全风险;二是给普通用户精准分配临时提权权限,仅开放工作所需命令,不泄露完整系统权限。该模块是企业服务器安全加固、人员权限管控、自动化脚本运行的刚需核心,全覆盖运维实操、安全合规、面试高频考点。
核心特性:普通用户无需知晓root密码,可临时执行授权的管理员命令,权限可精准到「单命令、多命令、免密、指定主机、限定参数」,支持精细化管控与日志审计。
5.2 Sudo底层运行原理与权限校验机制
-
身份校验逻辑:用户执行sudo命令时,系统读取/etc/sudoers配置文件,校验当前用户是否拥有对应命令的提权权限,校验通过则临时切换为root权限执行命令,执行完毕立即回收权限。
-
权限隔离特性:sudo授权为临时单次权限,仅针对当前执行命令生效,不会永久切换用户身份、不会泄露root权限,安全性远高于su切换root。
-
日志审计机制:所有sudo执行操作会自动记录到/var/log/secure安全日志,包含操作用户、执行命令、操作时间、主机IP,可全程溯源,满足企业安全合规要求。
-
配置优先级:/etc/sudoers主配置 > /etc/sudoers.d/目录下自定义配置(企业推荐拆分配置,便于权限管理)。
5.3 核心配置规范与合法编辑方式(生产硬性要求)
绝对禁止使用vi/vim直接编辑/etc/sudoers!该文件拥有系统最高权限校验机制,直接编辑无语法校验,配置语法错误会导致所有用户sudo权限瘫痪、无法提权修复系统故障。
- # 唯一合法编辑命令:自带语法校验、保存自动检测错误
- visudo
- # 拓展:编辑sudoers.d自定义配置(企业最佳实践,拆分权限、便于维护)
- visudo /etc/sudoers.d/dev-user
- # 语法校验命令(修改后手动校验,规避隐性错误)
- visudo -c
- # 查看当前用户所有sudo授权权限、权限限制、免密状态
- sudo -l
- sudo -ll # 详细模式,展示完整授权规则
复制代码
5.4 Sudo配置语法全解(核心模板)
标准配置语法:用户/组 主机=(切换身份) 授权命令列表 [免密参数]
-
用户/组:单个用户直接写用户名,用户组需加%前缀(例:%dev)
-
主机:允许执行sudo的主机IP/主机名,ALL代表所有主机
-
切换身份:(ALL)代表可切换所有用户,(root)代表仅切换root
-
授权命令:绝对路径命令(精准管控),ALL代表所有root权限
-
免密参数:NOPASSWD: 免密执行,无需输入用户密码
5.5 全场景生产授权模板(直接落地使用)
5.5.1 超级管理员授权(全权运维)
- # 允许dev用户所有主机、所有root权限,执行需输自身密码
- dev ALL=(ALL) ALL
- # 免密全权授权(自动化运维账号专用,禁止普通运维使用)
- admin ALL=(ALL) NOPASSWD: ALL
复制代码
5.5.2 精细化单类命令授权(最小权限核心场景)
- # 1. 仅授权Nginx服务启停、重载、查看状态
- dev ALL=(ALL) /usr/bin/systemctl start nginx,/usr/bin/systemctl stop nginx,/usr/bin/systemctl restart nginx,/usr/bin/systemctl status nginx
- # 2. 仅授权网络排查命令
- dev ALL=(ALL) /usr/bin/ping,/usr/bin/curl,/usr/bin/ss,/usr/bin/netstat
- # 3. 仅授权日志查看、文件查询命令(禁止删除/修改高危操作)
- dev ALL=(ALL) /usr/bin/less,/usr/bin/tail,/usr/bin/head,/usr/bin/find -name *
复制代码
5.5.3 批量授权用户组(团队统一权限)
- # 给dev组所有用户授权开发常用运维命令
- %dev ALL=(ALL) /usr/bin/systemctl status *,/usr/bin/tail *,/usr/bin/curl,/usr/bin/ip
复制代码
5.5.4 免密精细化授权(脚本专属)
- # 仅免密执行指定备份脚本,禁止其他免密操作
- script ALL=(ALL) NOPASSWD: /root/backup.sh,/root/clean_log.sh
复制代码
5.5.5 受限参数授权(极致安全管控)
- # 仅允许修改指定配置文件,禁止修改其他系统配置
- dev ALL=(ALL) /usr/bin/vim /etc/nginx/nginx.conf,/usr/bin/vim /etc/nginx/conf.d/*.conf
复制代码
5.6 高频致命坑点与生产避坑细则
-
visudo唯一原则:严禁直接编辑/etc/sudoers,语法错误会导致sudo全局失效,无任何提权途径,严重需重启服务器救援模式修复。
-
命令必须写绝对路径:禁止写相对路径命令(如systemctl、ls),容易被恶意篡改环境变量,实现提权漏洞,生产必须通过which 命令获取绝对路径授权。
-
慎用ALL全权限:普通运维、开发用户禁止配置ALL=(ALL) ALL,完全等同于root权限,存在极大误操作、安全入侵风险。
-
免密权限严控范围:NOPASSWD仅用于自动化脚本、监控账号,人工运维账号禁止全局免密,防止服务器被恶意操作。
-
sudoers.d配置权限规范:自定义配置文件必须权限为440 root:root,权限过大会导致配置失效、权限泄露。
-
权限叠加坑:多个配置规则冲突时,后配置规则覆盖前规则,精细化授权需单独拆分配置,避免权限错乱。
5.7 常见故障排错(生产高频)
故障1:sudo: command not found:未安装sudo工具或环境变量异常,执行yum install sudo -y / apt install sudo -y修复。
故障2:用户不在sudoers文件中:当前用户未被授权sudo权限,需在sudoers配置中添加用户/组授权规则。
故障3:sudo语法错误,提示parse error:配置文件存在语法错误,执行visudo -c校验并修复错误。
故障4:授权命令无法执行,提示权限不足:命令未写绝对路径、或配置规则未生效,重新校验命令路径、重启shell会话。
故障5:免密配置失效,仍需输密码:NOPASSWD规则后置被普通权限规则覆盖,调整配置顺序,免密规则放下方。
5.8 生产标准化最佳实践
-
配置拆分管理:禁止所有权限写在主配置文件,按用户/团队拆分/etc/sudoers.d/独立配置,便于权限迭代、注销、排查。
-
严格遵循最小权限:只授权用户工作必需的单条命令,杜绝模糊授权、全局授权,从根源规避安全风险。
-
区分人工与脚本账号:人工运维账号密码提权,自动化脚本账号精准免密提权,权限场景分离。
-
定期权限巡检:定期查看sudo授权列表、安全日志,清理离职用户、冗余权限,加固系统安全。
-
禁止root远程登录:生产服务器关闭root SSH远程登录,所有运维操作通过普通用户sudo提权实现,规避root账号爆破风险。
5.9 面试高频核心考点
-
为什么不能直接编辑/etc/sudoers? 无语法校验,配置错误会导致sudo全局瘫痪,无法提权修复系统故障,visudo自带语法校验,是唯一合法编辑方式。
-
sudo和su的核心区别? su是完整切换root身份,需root密码,权限完全放开;sudo是临时提权,无需root密码,权限可精细化管控、全程日志审计,安全性更高。
-
sudo授权为什么要用绝对路径? 防止环境变量劫持提权漏洞,恶意用户可篡改相对路径命令,执行恶意程序获取root权限。
-
NOPASSWD免密权限适用场景? 仅用于自动化部署、监控脚本、定时任务等无人值守场景,人工运维禁止全局免密。
-
sudo权限日志如何溯源? 所有sudo操作记录在/var/log/secure,可查询操作用户、时间、命令、主机,支持安全审计。
5.10 核心配置与实战
5.10 核心配置与企业实战(全场景落地)
本小节聚焦企业真实sudo配置落地、权限审计、故障实战、高阶场景配置,补全前文简略内容,所有配置可直接生产复用,解决日常权限管控、自动化运维、多人协作权限问题,是sudo模块最终实战闭环。
5.10.1 基础必备配置(生产通用模板)
严格遵循「最小权限原则」,区分管理员、普通运维、开发人员三类账号权限,杜绝权限泛滥。
- # 核心编辑命令(唯一合法方式,严禁vim直接改文件)
- visudo
- # 自定义配置文件拆分(企业最佳实践,权限隔离、便于维护)
- visudo /etc/sudoers.d/ops-auth
- # 配置语法校验(修改后必执行,规避语法报错)
- visudo -c
- # 1. 超级管理员账号(运维负责人,完整权限)
- admin ALL=(ALL:ALL) ALL
- # 2. 普通运维账号(仅系统运维权限,无高危篡改权限)
- ops ALL=(ALL) /usr/bin/systemctl,/usr/bin/journalctl,/usr/bin/ss,/usr/bin/lsof,/usr/bin/top,/usr/bin/free
- # 3. 开发账号(仅日志查看、服务状态查询,禁止启停服务、改配置)
- dev ALL=(ALL) /usr/bin/tail,/usr/bin/less,/usr/bin/head,/usr/bin/curl,/usr/bin/ping,/usr/bin/ip
复制代码
5.10.2 高频免密配置(自动化专属,生产刚需)
免密sudo仅用于定时任务、CI/CD自动化部署、监控脚本、备份脚本,人工账号禁止全局免密,防止恶意操作。
- # 1. 专属脚本免密执行(精准授权,最小权限)
- robot ALL=(ALL) NOPASSWD: /root/auto-backup.sh,/root/log-clean.sh,/usr/local/monitor/start.sh
- # 2. 定时任务常用命令免密(无需人工干预)
- cron-user ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx,/usr/bin/mkdir,/usr/bin/rm
- # 3. 全局免密(仅测试环境使用,生产环境严禁配置)
- test-user ALL=(ALL) NOPASSWD: ALL
复制代码
5.10.3 用户组批量授权(团队统一权限管理)
企业多人团队运维,优先通过用户组授权,无需逐个配置用户,权限迭代、人员离职更便捷。
- # 1. 运维组全权运维
- %ops-group ALL=(ALL) ALL
- # 2. 开发组受限授权(仅查询、日志排查权限)
- %dev-group ALL=(ALL) /usr/bin/tail,/usr/bin/less,/usr/bin/grep,/usr/bin/curl,/usr/bin/ping
- # 3. 测试组专属服务权限(仅管控测试环境服务)
- %test-group ALL=(ALL) /usr/bin/systemctl start tomcat,/usr/bin/systemctl stop tomcat,/usr/bin/systemctl status tomcat
复制代码
5.10.4 精细化参数受限授权(极致安全管控)
高阶安全配置,限制用户仅能操作指定文件、指定参数,杜绝权限溢出,适配核心生产环境。
- # 1. 仅允许编辑指定Nginx配置文件,禁止修改其他系统配置
- ops ALL=(ALL) /usr/bin/vim /etc/nginx/nginx.conf,/usr/bin/vim /etc/nginx/conf.d/*.conf
- # 2. 仅允许重启指定业务服务,禁止操作数据库、系统服务
- dev ALL=(ALL) /usr/bin/systemctl restart app-service,/usr/bin/systemctl status app-service
- # 3. 仅允许备份指定目录,无删除、修改权限
- backup-user ALL=(ALL) /usr/bin/tar zcvf /data/backup/*.tar.gz /data/project/
复制代码
5.10.5 sudo权限查询与审计实战
日常运维必备,快速核查用户权限、溯源操作记录,满足企业安全合规巡检要求。
- # 1. 查看当前用户所有sudo授权权限(简洁模式)
- sudo -l
- # 2. 查看完整权限详情、授权规则、免密状态(详细模式)
- sudo -ll
- # 3. 查看指定用户权限
- sudo -l -U dev
- # 4. 溯源所有sudo操作日志(核心审计)
- # 查看安全日志(CentOS/Rocky)
- grep sudo /var/log/secure
- # 查看系统日志(Ubuntu/Debian)
- grep sudo /var/log/auth.log
- # 5. 统计今日sudo操作记录
- grep sudo /var/log/secure | grep "$(date +%d/%b)"
复制代码
5.10.6 生产高频故障实战修复
汇总线上90%sudo权限故障,提供标准化修复方案,快速排错。
- # 故障1:用户不在sudoers文件中
- # 解决方案:visudo 新增用户/组授权,或加入wheel附属组(CentOS)
- usermod -aG wheel ops
- # 故障2:sudo语法报错、权限失效
- # 解决方案:校验语法并修复
- visudo -c
- # 故障3:免密配置不生效,仍需输入密码
- # 根因:普通权限规则覆盖免密规则
- # 解决方案:将NOPASSWD配置放到sudoers文件末尾,优先级最高
- # 故障4:sudoers.d自定义配置不生效
- # 根因:配置文件权限异常
- # 解决方案:强制标准化权限
- chmod 440 /etc/sudoers.d/*
- chown root:root /etc/sudoers.d/*
- # 故障5:sudo命令提示权限不足、授权命令无法执行
- # 根因:使用相对路径授权
- # 解决方案:查询命令绝对路径,重新授权
- which systemctl
- # 替换为绝对路径配置 /usr/bin/systemctl
复制代码
5.10.7 生产最终sudo安全规范(强制执行)
-
配置规范:统一拆分/etc/sudoers.d/独立配置,禁止所有权限写入主配置文件,便于权限迭代清理;
-
权限规范:严格最小权限原则,人工账号禁止ALL全权、禁止全局免密,仅自动化账号开放精准免密;
-
编辑规范:100%使用visudo编辑,修改后必执行语法校验,杜绝语法错误导致sudo瘫痪;
-
审计规范:每周巡检sudo授权列表、操作日志,清理离职用户、冗余权限;
-
安全规范:生产服务器关闭root远程登录,所有运维操作通过普通用户sudo提权实现。
6. 全模块面试汇总 & 生产最终规范
6.1 面试高频核心考点
-
文件权限与目录权限区别? 文件x权限是执行权限,目录x权限是进入/访问权限,目录无x权限无法正常使用。
-
usermod -G 和 -aG区别? -G 覆盖原有附属组,-aG 追加不覆盖,生产追加组必须用-aG。
-
chattr +i 和 +a区别? +i 完全锁定不可修改,+a 仅允许追加,日志文件专用+a。
-
SUID/Sticky作用? SUID临时提权,Sticky防共享目录文件误删。
6.2 生产统一权限规范(全维度落地·强制执行)
本规范适配CentOS/Rocky/Ubuntu全系列Linux生产服务器,统一文件、目录、用户、特殊权限、Sudo、系统目录权限标准,杜绝权限错乱、安全漏洞、服务启动异常,为企业运维标准化、安全加固、故障规避提供统一依据,所有规则均可直接落地执行。
6.2.1 文件权限统一标准(生产零争议规范)
-
普通静态文件:业务配置、日志、文本、脚本源码、静态资源统一 644(rw-r--r--),仅所有者可编辑,其他用户只读,禁止开放写权限,杜绝篡改风险。
-
可执行文件/业务脚本:sh/bash/python可运行脚本、程序启动文件统一 755(rwxr-xr-x),保障执行权限,最小化开放权限范围。
-
私密核心文件:密钥、证书、数据库密码文件、SSH私钥、账号配置统一 600(rw-------),仅root/所属用户可读写,其他用户无任何访问权限。
-
系统核心配置文件:passwd、shadow、hosts、sudoers等系统文件,保持系统默认权限,禁止随意修改、放宽权限。
-
日志专属文件:业务运行日志统一644,核心审计日志可追加 chattr +a 隐藏权限,仅允许追加写入,禁止删除、清空、篡改。
-
高危权限禁令:生产环境严禁出现777、666全局开放权限,一经发现立即整改,此类权限存在恶意提权、文件篡改、服务器入侵重大漏洞。
6.2.2 目录权限统一标准(服务运行必备)
-
普通业务目录:站点目录、程序目录、日志目录、备份目录统一 755(rwxr-xr-x),保障用户可进入、可读取、程序可正常读写运行。
-
私密权限目录:SSH目录、密钥存储目录、核心配置目录统一 700(rwx------),仅管理员可访问操作,杜绝越权查看。
-
多人共享协作目录:团队共用业务目录,默认755权限+开启Sticky粘滞位(1777),仅文件所有者、root可删除/修改文件,防止用户互删数据。
-
系统核心目录禁令:/、/etc、/usr、/root、/bin、/sbin 等系统根目录及核心目录,禁止递归修改权限、禁止放宽默认权限,避免系统瘫痪、命令失效。
6.2.3 用户与用户组权限规范(安全隔离标准)
-
root账号管控:生产环境关闭root远程SSH登录,禁止业务程序以root身份启动,禁止日常运维直接使用root账号操作,规避权限滥用风险。
-
服务用户规范:Nginx、MySQL、Redis、Docker等所有服务,必须创建独立系统用户(UID1-999),配置/sbin/nologin禁止登录,无家目录,仅用于服务运行,实现权限隔离。
-
普通运维/开发用户:业务用户UID统一≥1000,按需分配附属组权限,严格遵循最小权限原则,不随意赋予root、wheel等高权限组。
-
用户清理规范:离职、废弃用户统一使用 userdel -r 彻底删除,同步清理家目录、残留文件、权限配置,杜绝无主文件、冗余权限漏洞。
-
用户组规范:按业务、团队划分用户组,通过组批量授权,禁止单个用户零散授权,权限迭代、人员更替统一通过组管理。
6.2.4 特殊权限与隐藏权限规范(安全加固标准)
-
SUID/SGID权限管控:仅系统默认必要命令保留SUID权限,自定义业务文件、目录禁止配置SUID/SGID,定期扫描清理非法提权权限,杜绝恶意提权漏洞。
-
Sticky粘滞位强制规范:所有公共共享目录、临时文件目录必须配置粘滞位,防止跨用户文件误删、篡改。
-
隐藏权限加固:系统核心配置、业务关键配置文件统一配置 chattr +i 不可变权限,防止误改、病毒篡改、恶意修改;日志文件统一配置chattr +a追加权限。
-
特殊权限清零规范:业务文件、目录权限错乱时,优先清零SUID/SGID/Sticky特殊权限(chmod 0xxx),再重置基础rwx权限,避免权限叠加异常。
6.2.5 Sudo权限精细化规范(最小权限落地)
-
编辑规范:100%使用visudo编辑权限配置,禁止直接vim修改/etc/sudoers,修改后必做语法校验,杜绝sudo全局瘫痪。
-
权限拆分规范:采用/etc/sudoers.d/拆分配置,按用户、团队、业务拆分独立配置文件,禁止所有权限写入主配置文件。
-
授权规范:所有sudo授权必须使用命令绝对路径,禁止相对路径,杜绝环境变量劫持提权漏洞;严格按需授权,禁止普通用户配置ALL全权权限。
-
免密权限规范:NOPASSWD免密仅用于自动化脚本、定时任务、监控账号,人工运维账号禁止全局免密,需密码验证提权,留存操作溯源。
-
权限审计规范:每周巡检sudo授权列表、/var/log/secure安全日志,清理冗余权限、离职用户权限,全程操作可溯源审计。
6.2.6 批量授权运维规范(避坑标准)
-
禁止滥用chmod -R:不直接对业务目录递归统一权限,优先通过find命令区分文件、目录单独赋权,避免静态文件被赋予执行权限,产生安全漏洞。
-
标准批量赋权模板:业务目录统一执行「目录755、文件644」标准化授权,配套chown统一属主属组,适配所有业务场景。
-
权限重置规范:权限错乱、递归误改后,立即执行标准化权限重置脚本,恢复文件、目录默认规范权限,快速修复服务异常。
6.2.7 权限巡检常态化规范
-
每日排查服务器777/666高危权限文件,一键扫描清理违规权限;
-
每周核查用户列表、sudo授权、特殊权限文件,清理冗余、违规配置;
-
新业务上线前,强制校验文件目录权限、用户运行权限,符合规范方可上线;
-
所有权限修改、授权操作留痕记录,便于故障排查、安全审计。
四、文本三剑客:grep sed awk(文本处理核心)
1. grep 过滤匹配(日志检索/文本筛选核心·生产完整版)
1.1 命令总述
grep 是Linux文本过滤、日志排查、内容检索的核心高频命令,核心作用是从文件、管道输出中匹配筛选符合规则的文本行,支持基础字符匹配、正则表达式匹配、递归检索、反向过滤、高亮匹配等全场景功能。是日常运维报错排查、配置检索、日志分析、脚本筛选的刚需工具,本节摒弃冷门参数,聚焦生产高频用法、正则实战、踩坑细节与面试核心考点。
1.2 核心高频基础参数(生产必背)
- # 基础精准匹配
- grep "error" app.log # 匹配包含error的所有行(区分大小写)
- grep -i "warn" app.log # -i 忽略大小写匹配(warn/WARN/Warn全部匹配)
- grep -v "info" app.log # -v 反向匹配,过滤掉包含info的行(排查报错屏蔽冗余日志)
- grep -n "timeout" app.log # -n 显示匹配行的行号(精准定位报错代码/日志行)
- grep -c "success" app.log # -c 统计匹配到的总行数(统计成功请求数、报错次数)
- grep -o "http://.*" app.log # -o 只输出匹配到的内容,不输出整行(精准提取指定字段)
- grep -q "fail" app.log # -q 静默匹配,不输出内容,仅返回执行状态(脚本判断专用)
- # 高亮显示匹配内容(终端可视化,默认开启)
- grep --color=auto "error" app.log
- # 匹配前后行查看(报错上下文排查刚需)
- grep -A5 "Exception" app.log # -A n 显示匹配行及后5行(After)
- grep -B5 "Exception" app.log # -B n 显示匹配行及前5行(Before)
- grep -C5 "Exception" app.log # -C n 显示匹配行及前后5行(Context,上下文完整排查)
复制代码
1.3 递归检索与多文件匹配(全局排查必备)
- # 递归检索目录下所有文件(全局排查配置/日志)
- grep -r "port=8080" /etc/ # -r 递归检索/etc下所有文件,匹配包含8080端口的内容
- grep -R "root" /home/ # -R 递归检索,包含软链接文件(-r不跟进软链接)
- # 多文件批量匹配
- grep "404" access.log error.log # 同时匹配多个文件的404报错记录
- grep -l "debug" *.log # -l 只显示匹配成功的文件名(筛选含指定内容的文件)
- grep -L "debug" *.log # -L 只显示未匹配的文件名(筛选无指定内容的干净文件)
复制代码
1.4 正则表达式高阶匹配(精准筛选核心)
grep 默认支持基础正则,egrep 等价 grep -E 支持扩展正则,无需转义,适配复杂文本筛选场景。
- # 基础正则匹配
- grep "^2026" app.log # ^ 匹配行首:筛选2026年开头的日志行
- grep "log$" app.log # $ 匹配行尾:筛选以log结尾的文本行
- grep "[0-9]" app.log # 匹配任意数字
- grep "[a-zA-Z]" app.log # 匹配任意大小写字母
- grep "[^0-9]" app.log # 匹配非数字字符(反向区间匹配)
- # 扩展正则(egrep/grep -E 专用,生产复杂筛选首选)
- egrep "error|warn|fail" app.log # 匹配包含error或warn或fail的行(多条件或匹配)
- grep -E "timeout|retry" app.log # 等价egrep,无需转义竖线
- egrep "1[0-9]{2}" app.log # 匹配100-199数字(正则区间+次数匹配)
- egrep "^$" app.log # 匹配空行(清理文本空行刚需)
- # 精准匹配整词
- grep -w "root" /etc/passwd # -w 整词匹配,仅匹配独立root单词,不匹配root123、superroot
复制代码
1.5 生产高频组合实战命令(日志排查刚需)
- # 1. 过滤报错日志并显示上下文,定位异常堆栈
- grep -C10 "Exception" app.log
- # 2. 忽略大小写筛选所有报错,屏蔽冗余info日志
- grep -i "error|fail|timeout" app.log | grep -v "info"
- # 3. 统计当日报错总次数
- grep -ic "error" app.log
- # 4. 批量检索配置文件中所有端口配置
- grep -r "listen" /etc/nginx/
- # 5. 过滤非空行内容(清理文本冗余空行)
- grep -v "^$" test.txt
- # 6. 脚本中判断文件是否包含指定内容(静默匹配)
- if grep -q "enable" config.ini;then echo "配置已开启";fi
复制代码
1.6 高频易错坑点与生产避坑
-
大小写匹配坑:默认区分大小写,排查日志时优先加 -i 参数,避免遗漏大写ERROR、WARN报错。
-
正则转义坑:普通grep使用|、()、{}需加转义符\,推荐统一用grep -E/egrep,无需转义,语法更简洁。
-
递归检索软链接坑:grep -r 不跟进软链接文件,需要检索软链接源文件必须用 grep -R。
-
整词匹配误区:直接匹配root会匹配衍生单词,精准匹配独立用户/单词必须加 -w 参数。
-
静默参数坑:脚本判断场景必须用 -q 静默模式,无冗余输出,仅通过命令返回值判断结果,避免日志输出污染。
1.7 面试高频核心考点
-
grep -r 和 -R 区别? -r 递归检索目录,不跟进软链接文件;-R 递归检索且跟进软链接,读取源文件内容。
-
grep 和 egrep 区别? grep默认基础正则,特殊符号需转义;egrep(grep -E)支持扩展正则,|、()、{}无需转义,适配复杂匹配。
-
-A/-B/-C 参数作用? 分别匹配后行、前行、前后上下文行,是日志报错定位完整堆栈信息的核心参数。
-
如何过滤文件空行? 使用 grep -v "^$" 文件名,反向匹配并过滤所有空行。
- grep "error" log.txt # 匹配包含error行
- grep -i "warn" # 忽略大小写
- grep -v "info" # 反向匹配
- grep -n "timeout" # 显示行号
- grep -r "port" /etc/ # 递归目录检索
- egrep "a|b" file # 扩展正则
复制代码
2. sed 流编辑器(替换、删除、新增)【生产完整版+原理+高阶实战+避坑精讲】
2.1 命令总述与核心原理
sed(Stream Editor)流式编辑器,是Linux批量文本编辑、配置修改、内容替换、行处理的核心工具,区别于vim交互式编辑,sed为非交互式逐行处理,默认仅处理输出内容、不修改原文件,适配大文件处理、批量配置变更、脚本自动化修改,无文件卡顿问题,是运维自动化、日志处理、配置迭代的刚需核心命令。
核心运行机制:逐行读取文件内容至模式空间 → 匹配规则执行编辑操作 → 输出处理后内容 → 清空模式空间,循环处理所有行,全程不加载完整文件,超大文件处理效率远超可视化编辑器。
核心优势:支持批量替换、精准增删指定行、正则匹配、批量文件修改、脚本无交互执行,适配线上批量改配置、日志脱敏、内容规整等高频生产场景。
2.2 核心参数与基础语法(生产必背)
- # sed 标准语法
- # sed [参数] '匹配规则+编辑操作' 文件名
- # 核心高频参数
- sed -n '操作' file # -n 静默模式,只输出匹配处理的行(默认输出所有行)
- sed -i '操作' file # -i 直接修改原文件(生产核心,慎用!)
- sed -e 规则1 -e 规则2 # 多规则叠加执行,支持一次执行多个编辑动作
- sed -r '规则' file # -r 支持扩展正则,无需转义特殊符号()|{}
- sed -f 脚本文件 file # 读取sed脚本文件执行批量编辑规则
- # 关键补充:-i 备份参数(生产高危操作必备)
- sed -i.bak 's/old/new/g' file # 修改原文件,同时生成file.bak备份文件,出错可回滚
复制代码
2.3 核心操作精讲:替换(生产最高频)
替换是sed最核心用法,支持基础字符串替换、全局替换、正则替换、指定行替换、分组替换,适配配置批量修改、内容脱敏、IP/端口迭代变更场景。
- # 基础替换语法:s/原内容/新内容/修饰符
- # 修饰符:g全局、n指定行、i忽略大小写
- # 1. 基础单行替换(只替换每行第一个匹配内容)
- sed 's/8080/8090/' nginx.conf
- # 2. 全局替换(整行所有匹配内容全部替换,生产必备g参数)
- sed 's/127.0.0.1/0.0.0.0/g' hosts
- # 3. 忽略大小写替换
- sed 's/error/success/gi' app.log
- # 4. 指定行范围替换(仅第5行替换 / 2-10行批量替换)
- sed '5s/enable/disable/g' config.ini
- sed '2,10s/localhost/192.168.1.100/g' nginx.conf
- # 5. 匹配关键词行替换(只替换包含指定内容的行)
- sed '/port/s/80/443/g' nginx.conf
- # 6. 正则分组替换(高阶脱敏、内容截取核心)
- # 匹配手机号并脱敏,保留前3后4位
- sed -r 's/(1[0-9]{2})[0-9]{4}([0-9]{4})/\1****\2/g' user.txt
- # 7. 特殊符号替换(斜杠/、点.无需转义,可自定义分隔符#@)
- sed 's#/usr/local/old#/usr/local/new#g' path.conf
- # 8. 直接修改原文件+备份(生产规范操作)
- sed -i.bak 's/debug/info/g' log.conf
复制代码
2.4 行操作:删除、插入、追加、替换整行
精准针对文件行维度操作,支持清空空行、删除指定行、首尾行新增内容、指定位置插入配置,适配配置文件规整、冗余内容清理、批量补全配置场景。
- # ========== 1. 删除操作 d ==========
- sed '3d' file.txt # 删除第3行
- sed '2,5d' file.txt # 删除2-5行
- sed '10,$d' file.txt # 删除第10行到末尾所有行
- sed '/^$/d' file.txt # 删除所有空行(文本规整刚需)
- sed '/#/d' file.txt # 删除所有含注释的行
- sed '/error/d' app.log # 删除含指定关键词的行
- # ========== 2. 追加操作 a(匹配行后新增内容) ==========
- sed '2a max_conn=1024' nginx.conf # 第2行后追加一行配置
- sed '/port/a timeout=60' nginx.conf # 匹配port行,后方追加超时配置
- sed '$a # end of config' file.txt # 文件末尾追加注释
- # ========== 3. 插入操作 i(匹配行前新增内容) ==========
- sed '1i # new config 2026' config.ini # 文件第一行插入头部注释
- sed '/listen/i # 端口配置' nginx.conf # 匹配行前方插入说明
- # ========== 4. 整行替换 c(覆盖替换整行内容) ==========
- sed '5c server_port=8090' config.ini # 第5行整行替换为新内容
- sed '/enable/c enable=false' service.conf # 匹配行直接覆盖整行
复制代码
2.5 高阶实用功能(生产脚本刚需)
- # 1. 多规则批量编辑(一次执行多个操作)
- sed -e 's/80/443/g' -e '/ssl/a ssl_on=true' nginx.conf
- # 2. 静默输出指定行内容(等同于精准截取文本)
- sed -n '10,20p' app.log # 只打印10-20行内容(p打印匹配行)
- sed -n '/error/p' app.log # 只输出含error的行,过滤冗余内容
- # 3. 批量修改目录下所有文件内容(全局配置迭代)
- sed -i 's/old_domain/new_domain/g' /etc/nginx/*.conf
- # 4. 注释指定行(配置临时禁用刚需)
- sed '30s/^/#/' config.ini # 第30行行首添加#注释
- sed '30s/^#//' config.ini # 取消第30行注释
- # 5. 空白行、冗余注释一键清理
- sed -e '/^$/d' -e '/^#/d' config.ini
复制代码
2.6 高频致命坑点与生产避坑细则
-
-i参数高危坑:sed -i 直接修改原文件,无回收站、无法撤回,生产修改配置必须先加.bak备份,验证无误后再删除备份文件。
-
替换缺失g参数坑:不加g仅替换每行第一个匹配内容,批量全局修改必须带g,否则出现内容替换不完整问题。
-
正则转义坑:默认sed为基础正则,(){}|等特殊符号需转义,复杂正则统一加-r参数,简化语法避免报错。
-
空行删除误区:/^$/仅匹配纯空行,含空格的伪空行需用 sed '/^[[:space:]]*$/d' 彻底清理。
-
批量文件修改坑:批量修改多配置文件前,先去掉-i参数预览输出结果,确认无误再执行真实修改,避免批量改错配置。
-
行匹配范围坑:$代表文件末尾,匹配行区间需注意文件行数边界,避免误删末尾有效配置。
2.7 生产最佳实践与高频组合命令
-
配置文件批量迭代:统一使用 sed -i.bak 先备份后修改,杜绝配置丢失、服务故障;
-
文本内容规整:固定组合 sed -e '/^[[:space:]]*$/d' -e '/^#/d' 清理空行与冗余注释;
-
临时禁用配置:优先用sed行首加#注释,而非直接删除配置,便于后续恢复;
-
复杂内容替换、字段脱敏,统一使用-r扩展正则+分组替换,精准可控;
-
大文件内容修改全程用sed,禁止vim打开编辑,避免文件卡顿、内存溢出。
2.8 面试高频核心考点
-
sed -i 和 -i.bak 区别? -i直接修改原文件无备份,风险极高;-i.bak修改同时生成备份文件,支持故障回滚,生产必备。
-
sed替换g参数作用? 不加g仅替换每行第一个匹配字符,g代表全局替换,批量修改必须携带。
-
a和i操作区别? a是匹配行后方追加内容,i是匹配行前方插入内容,位置完全相反。
-
如何批量清理文件所有空行? 使用 sed '/^[[:space:]]*$/d' 文件名,兼容纯空行、含空格伪空行。
-
sed和vim编辑区别? sed流式逐行非交互式编辑,适合批量、脚本、大文件处理;vim交互式编辑,适合单文件精细化手动修改。
3. awk 列处理、统计(日志分析神器)【生产完整版+原理+高阶统计+日志实战+避坑精讲】
3.1 命令总述与核心原理
awk 是Linux列级文本处理、数据统计、日志分析的终极神器,相较于grep行过滤、sed行替换,awk主打字段拆分、数据提取、逻辑判断、数值运算、分组统计、报表输出,是运维日志分析、数据清洗、批量统计、脚本数据处理的核心工具。
核心运行机制:逐行读取文本 → 按分隔符拆分多列字段 → 匹配条件执行自定义逻辑 → 运算统计并格式化输出,支持变量、循环、数组、条件判断,具备轻量编程语言特性,处理超大日志文件效率极高。
核心生产场景:Nginx/业务日志流量统计、接口请求耗时分析、IP访问频次排序、数据筛选去重、批量字段提取、服务器资源数据汇总报表。
3.2 核心语法与基础参数(生产必背)
- # awk 标准通用语法
- # awk [参数] 'BEGIN{初始化逻辑} 条件{执行动作} END{收尾统计逻辑}' 文件名
- # 核心高频参数
- awk -F ":" '{print $1}' file.txt # -F 指定字段分隔符(默认空格/制表符)
- awk -v num=10 '{print $1+num}' file # -v 自定义外部变量,传入awk逻辑
- awk 'NR>10' file.txt # NR 行号,筛选指定行数据
- awk -f awk脚本文件.awk file.txt # 读取awk脚本批量执行复杂逻辑
- # 核心内置变量(生产高频)
- # $0 整行所有内容
- # $1~$n 第1/2/n列字段
- # NR 当前处理行号(全局总行数)
- # NF 当前行字段总列数(自动统计列数)
- # FILENAME 当前处理文件名
- # FS 自定义输入分隔符(等价-F)
- # OFS 自定义输出分隔符(默认空格)
复制代码
3.3 基础列处理:字段提取与格式化输出
主打精准提取文本列、自定义输出格式,适配配置解析、日志字段截取、数据规整场景,是日常最简高频用法。
- # 1. 默认空格分隔:提取第1、3列字段
- awk '{print $1,$3}' access.log
- # 2. 自定义分隔符:解析冒号分隔文件(passwd、hosts等)
- awk -F ":" '{print "用户名:"$1,"UID:"$3}' /etc/passwd
- # 3. 自定义输出分隔符(替换默认空格为逗号/竖线)
- awk -F ":" -v OFS="|" '{print $1,$3,$7}' /etc/passwd
- # 4. 提取最后一列、倒数第二列(适配不确定列数文本)
- awk '{print $NF}' file.txt # 最后一列
- awk '{print $(NF-1)}' file.txt # 倒数第二列
- # 5. 输出整行内容(等价cat,用于数据筛选前置)
- awk '{print $0}' file.txt
- # 6. 过滤空行并输出有效内容
- awk 'NF>0' file.txt
复制代码
3.4 条件筛选与逻辑判断(精准数据过滤)
支持行号、字段数值、字符串匹配、多条件组合筛选,精准过滤目标日志、异常数据,替代多层grep筛选,命令更简洁精准。
- # 1. 行号筛选:只处理10-100行数据
- awk 'NR>=10 && NR<=100 {print $0}' file.txt
- # 2. 数值条件筛选:第三列数值大于1000的行(请求量、耗时筛选)
- awk '$3>1000 {print $0}' log.txt
- # 3. 字符串精准匹配:第一列为指定IP的访问日志
- awk '$1=="192.168.1.100" {print $0}' access.log
- # 4. 模糊匹配:包含error异常的日志行
- awk '/error|Exception/ {print $0}' app.log
- # 5. 反向匹配:过滤空行、注释行
- awk '!/^#/ && NF>0 {print $0}' config.ini
- # 6. 多条件组合:IP为指定段且请求耗时大于500ms
- awk '$1~/^10.0.0/ && $NF>500 {print $1,$NF}' access.log
- # 7. 三元运算简化输出(条件判断赋值)
- awk '$3>200 ? print "异常请求" : print "正常请求"' log.txt
复制代码
3.5 数值运算与批量统计(核心能力)
awk核心优势:支持逐行累加、求平均值、最大值、最小值、计数统计,无需嵌套多层命令,一站式完成数据汇总。
- # 1. 基础计数:统计有效数据总行数
- awk 'NF>0 {count++} END{print "有效总行数:",count}' log.txt
- # 2. 字段累加:统计所有请求总耗时
- awk '{sum+=$NF} END{print "请求总耗时:",sum,"ms"}' access.log
- # 3. 求平均值:计算平均请求耗时
- awk '{sum+=$NF;count++} END{print "平均耗时:",sum/count,"ms"}' access.log
- # 4. 最值统计:筛选最大/最小请求耗时
- awk 'BEGIN{max=0;min=999999} {if($NF>max) max=$NF;if($NF<min) min=$NF} END{print "最大耗时:",max,"最小耗时:",min}' access.log
- # 5. 条件统计:统计4xx/5xx异常请求总数
- awk '$9~/^4|^5/ {err++} END{print "异常请求总数:",err}' access.log
- # 6. 多维度统计:同时输出总请求、异常请求、正常请求
- awk '{total++} $9~/^4|^5/ {err++} END{ok=total-err;print "总请求:"total,"正常请求:"ok,"异常请求:"err}' access.log
复制代码
3.6 数组分组统计(日志分析核心·面试/生产Top1)
awk数组是日志分析的核心,可实现IP分组计数、接口访问频次、状态码统计、域名访问量排序,替代sort+uniq组合,效率更高、逻辑更清晰。
- # 1. 统计各IP访问次数(日志分析刚需)
- awk '{ip[$1]++} END{for(i in ip) print ip[i],"次",i}' access.log
- # 2. 统计各接口请求频次(按接口路径分组)
- awk '{uri[$7]++} END{for(u in uri) print uri[u],"次",u}' access.log
- # 3. 统计HTTP状态码分布(200/404/500占比)
- awk '{code[$9]++} END{for(c in code) print c,"状态码:",code[c],"次"}' access.log
- # 4. 统计单个IP总请求耗时、平均耗时
- awk '{ip[$1]++;sum[$1]+=$NF} END{for(i in ip) print i,"请求数:"ip[i],"总耗时:"sum[i],"平均耗时:"sum[i]/ip[i]}' access.log
- # 5. 异常IP批量统计(仅输出访问量大于100次的IP,排查攻击)
- awk '{ip[$1]++} END{for(i in ip) if(ip[i]>100) print ip[i],"高访问IP:",i}' access.log
复制代码
3.7 生产高频实战完整案例(直接复用)
- # 案例1:Nginx日志TOP10高频访问IP(排查CC攻击、异常访问)
- awk '{ip[$1]++} END{for(i in ip) print ip[i],i}' access.log | sort -nr | head -10
- # 案例2:统计当日所有5xx服务器异常请求,输出TOP10异常接口
- awk '$9~/^5/ {uri[$7]++} END{for(u in uri) print uri[u],u}' access.log | sort -nr | head -10
- # 案例3:筛选请求耗时超过1s的慢接口,精准排查性能瓶颈
- awk '$NF>1000 {print $1,$7,$9,$NF}' access.log
- # 案例4:统计接口请求平均耗时、最大耗时、总请求数
- awk 'BEGIN{max=0;sum=0;count=0} {count++;sum+=$NF;if($NF>max) max=$NF} END{print "总请求:"count,"总耗时:"sum,"平均耗时:"sum/count,"最大耗时:"max}' access.log
- # 案例5:过滤有效配置,输出纯净配置文件(清理注释、空行)
- awk 'NF>0 && !/^#/ {print $0}' nginx.conf > nginx_clean.conf
- # 案例6:批量提取系统所有普通用户(UID≥1000)
- awk -F ":" '$3>=1000 {print $1,$3}' /etc/passwd
- # 案例7:统计定时任务执行日志,筛选失败任务
- awk '/error|fail/ {task[$0]++} END{for(t in task) print t}' cron.log
复制代码
3.8 高频易错坑点与生产避坑细则
-
分隔符匹配坑:默认仅识别空格/制表符,逗号、冒号、竖线分隔文本必须手动加-F指定分隔符,否则字段提取错乱。
-
数组遍历无序坑:awk数组遍历for(i in arr)默认无序,统计后需搭配sort排序,才能得到TOP排名。
-
空行空字段坑:日志存在空行、残缺行时,需加NF>0过滤有效行,避免空数据参与统计导致结果异常。
-
数值类型坑:字段含特殊字符、字母时无法运算,需先筛选纯数字行,否则统计结果为0或报错。
-
BEGIN/END执行时机坑:BEGIN仅在读取文本前执行一次(初始化变量),END仅在所有行处理完执行一次(汇总输出),逐行逻辑必须写在外部。
-
多分隔符坑:文本同时含空格、逗号、冒号等混合分隔符,需用-F "[,: ]"正则匹配多分隔符。
3.9 生产最佳实践总结
-
简单行过滤用grep、行替换用sed,字段提取、数据统计、日志分析优先用awk,一站式处理无需管道嵌套多层命令。
-
批量日志统计固定套路:字段分组数组统计 + 结尾遍历输出 + sort排序,适配所有访问日志分析场景。
-
复杂数据处理优先用awk变量预初始化,避免重复计算,提升大日志文件处理效率。
-
生产统计必加数据过滤:空行、注释、残缺数据提前过滤,保证统计结果精准无误。
-
混合分隔符、不规则文本,统一使用正则分隔符,适配复杂日志格式。
3.10 面试高频核心考点
-
NR和NF的区别? NR是当前处理全局行号,NF是当前行拆分后的字段总列数,常用于过滤空行、规整文本。
-
awk BEGIN和END作用? BEGIN用于初始化变量、设置分隔符,前置执行;END用于所有数据处理完成后汇总统计、输出结果。
-
awk数组统计原理? 以目标字段为数组下标,逐行累加计数,最终遍历数组实现分组统计,是日志TOP排名的核心原理。
-
awk相较于sort+uniq的优势? 一站式完成筛选、分组、统计,无需多层管道,效率更高、支持多维度复合统计,逻辑更简洁。
-
如何解决awk统计排序无序问题? awk仅负责统计,输出结果后搭配sort -nr数值倒序排序,实现TOP排名。
4. 文本处理配套小工具(生产高频完整版)
以下工具是 grep/sed/awk 文本三剑客的黄金配套工具,主打文本截取、排序去重、内容对比、字数统计、字段拼接,是日志清洗、数据规整、文本分析的必备组合,运维脚本、数据处理、日志排查高频复用,补全全量参数、实战场景与避坑要点。
4.1 cut 精准字段截取(固定列文本拆分神器)
核心作用:针对分隔符规整文本精准截取指定列、指定字符区间,适配密码文件、日志、配置文件固定格式提取,简单字段截取优先用cut,比awk更简洁高效。
- # 核心语法:cut [参数] 文件名
- # 1. 按分隔符截取列(最常用)
- cut -d ":" -f1 /etc/passwd # -d指定分隔符:,-f1截取第1列(提取所有用户名)
- cut -d " " -f1,3 /var/log/access.log # 截取空格分隔的第1、3列字段
- cut -d "," -f2-5 data.csv # 截取逗号分隔的2-5列区间(适配csv表格文本)
- # 2. 按字符位置截取(固定长度文本)
- cut -c1-10 test.txt # 截取每行前10个字符
- cut -c5- test.txt # 截取第5字符到行尾
- # 3. 进阶参数
- cut -s file.txt # 静默模式,不输出无分隔符的残缺行
- cut --complement -f1 test.txt # 反向截取,排除第1列,输出剩余所有列
复制代码
4.2 sort 文本排序(数据规整核心)
核心作用:对文本行、数字、字母、IP、日志数据进行正序/倒序排序,默认按字典序排序,生产需手动适配数字、特殊场景排序规则。
- # 基础排序
- sort test.txt # 默认字典序正序(字母、字符排序)
- sort -r test.txt # -r 反向倒序排序
- # 核心生产参数(高频必用)
- sort -n num.txt # -n 纯数字排序(解决字典序10<2的问题)
- sort -nr num.txt # 数字倒序,适配TOP排名统计
- sort -k2 -n test.txt # -k 指定按第2列数字排序
- sort -t "," -k3 -nr data.csv # 逗号分隔,按第3列数字倒序排序
- # 去重排序
- sort -u test.txt # 排序并自动去除重复行
复制代码
4.3 uniq 去重统计(日志计数刚需)
核心原理:仅统计相邻重复行,必须搭配sort排序使用,否则无法统计全局重复数据,是IP访问量、接口频次、报错次数统计核心工具。
- # 基础去重
- uniq test.txt # 去除相邻重复行,保留单行
- # 核心生产参数
- uniq -c # -c 统计重复次数(最核心参数)
- uniq -d # 只输出重复的行
- uniq -u # 只输出唯一不重复的行
- # 生产标准组合(全局去重统计,必背)
- sort access.log | uniq -c # 先排序再统计全局重复数据
- sort -nr | uniq -c | sort -nr # 排序+计数+二次倒序,实现TOP排名
复制代码
4.4 wc 文本统计(行数/字数/字节数)
核心作用:快速统计文本行数、单词数、字节大小,适配日志行数统计、配置项计数、文件大小校验场景。
- # 核心参数
- wc -l test.txt # -l 统计文本总行数(生产最高频)
- wc -w test.txt # -w 统计文本单词数(空格分隔)
- wc -c test.txt # -c 统计文件字节大小
- wc -L test.txt # -L 统计文本最长行的字符长度
- # 实战组合用法
- grep "error" app.log | wc -l # 统计日志报错总条数
- ls | wc -l # 统计当前目录文件总数
复制代码
4.5 diff & patch 文件对比与补丁更新
核心作用:diff对比两个文件差异,精准定位配置变更、代码修改内容;patch可批量应用补丁文件,实现配置、代码快速迭代更新。
- # diff 文件差异对比
- diff old.conf new.conf # 常规对比,输出差异行
- diff -u old.conf new.conf # -u 统一格式对比(清晰展示上下文,生产首选)
- diff -r dir1 dir2 # -r 递归对比两个目录下所有文件差异
- diff -q file1 file2 # -q 仅判断文件是否不同,不展示详情
- # patch 补丁更新
- diff -u old.txt new.txt > update.patch # 生成补丁文件
- patch old.txt update.patch # 应用补丁,更新文件内容
- patch -R old.txt update.patch # 回滚补丁,恢复原文件
复制代码
4.6 tr 字符替换与删除(简单文本清洗)
核心作用:批量替换、删除、压缩重复字符,专注单字符维度处理,适合大小写转换、空格清理、特殊字符过滤,轻量场景替代sed。
- # 字符替换
- tr "a-z" "A-Z" < test.txt # 小写全部转大写
- tr " " "\n" < test.txt # 空格替换为换行
- # 字符删除
- tr -d "0-9" < test.txt # -d 删除所有数字字符
- tr -d "\r" < win.txt > linux.txt # 去除windows换行符,适配Linux格式
- # 压缩重复字符
- tr -s " " < test.txt # -s 压缩多个连续空格为单个空格
复制代码
4.7 高频组合实战(生产直接复用)
- # 1. 统计TOP10高频访问IP(日志分析标配)
- awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
- # 2. 清洗文本:去空行、去重复、规整排序
- grep -v "^$" test.txt | sort -u
- # 3. 统计配置文件有效配置行数(过滤空行、注释)
- grep -v "^#" nginx.conf | grep -v "^$" | wc -l
- # 4. 批量转换文本小写、清理多余空格
- tr "A-Z" "a-z" < data.txt | tr -s " "
- # 5. 对比新旧配置差异,只输出变更内容
- diff -u nginx.old.conf nginx.new.conf
复制代码
4.8 核心避坑要点(生产必看)
-
uniq核心坑:uniq仅识别相邻重复行,单独使用无法统计全局重复数据,必须先执行sort排序再去重统计。
-
sort排序坑:默认字典序排序,数字10会判定小于2,统计数值、流量、次数必须加-n数字排序参数。
-
cut分隔符坑:仅支持单一固定分隔符,不规则混合分隔符文本,优先使用awk处理。
-
tr功能局限:仅支持单字符处理,不支持字符串批量替换、多行匹配,复杂替换必须用sed。
-
diff对比坑:默认格式杂乱,生产对比配置、文件差异统一用diff -u格式,上下文清晰、便于复盘。
- cut -d: -f1 /etc/passwd # 截取列
- sort -n num.txt # 数字排序
- uniq -c # 去重并计数
- wc -l file # 统计行数
- wc -w # 单词数
- diff a b # 文件对比
复制代码
五、进程、系统资源、任务调度
1. 进程查看(全量精讲:生产参数+原理+指标解析+避坑+面试)
1.1 模块总述
进程是Linux系统资源调度的最小单元,所有服务、脚本、程序运行均依托进程存在。进程查看是服务排查、端口占用、资源溢出、僵尸进程清理、异常进程查杀的核心前置操作。本小节补全ps/top/pstree/pidof/pgrep全套命令、参数详解、指标含义、生产选型、高频坑点与面试考点,摒弃冷门参数,完全贴合线上运维排错场景。
1.2 静态进程查看 ps(快照式查看,固定瞬间进程状态)
ps 为静态快照查看命令,读取当前系统瞬间进程状态,无实时刷新,适合精准检索进程、查看进程参数、PID、资源占用、运行用户,是排查进程是否存在的核心命令。
- # 两大生产万能组合(必背,全覆盖进程信息)
- ps -ef # 标准全量查看:父PID、启动用户、完整命令、进程状态
- ps aux # 资源维度查看:CPU/内存占比、进程状态、常驻内存、虚拟内存
- # ===================== 参数详解 =====================
- # ps -ef 核心字段
- # UID 进程所属用户
- # PID 进程唯一ID(查杀、管控核心标识)
- # PPID 父进程ID(排查进程父子关系、僵尸进程必备)
- # STIME 进程启动时间
- # TIME 进程占用CPU总时长
- # CMD 进程启动完整命令
- # ps aux 核心字段(运维排错重点)
- # USER 进程运行用户
- # PID 进程ID
- # %CPU CPU占用百分比
- # %MEM 物理内存占用百分比
- # VSZ 虚拟内存占用
- # RSS 实际物理内存占用
- # STAT 进程状态(核心排查字段,下文详解)
- # START 进程启动时刻
- # TIME CPU累计占用时间
- # COMMAND 进程启动命令
- # ===================== 精准检索进程(生产高频) =====================
- ps -ef | grep nginx # 检索指定服务所有进程
- ps aux | grep java # 过滤Java进程,排查服务运行状态
- ps -ef | grep -v grep # 过滤grep自身进程,纯净输出结果
- # ===================== 进阶精准查看 =====================
- ps -p 12345 # 查看指定PID进程详细信息
- ps -L 12345 # 查看进程下所有线程(线程排查必备)
- ps aux --sort=-%cpu # 按CPU占用倒序排序,快速定位高负载进程
- ps aux --sort=-%mem # 按内存占用倒序排序,排查内存溢出进程
复制代码
1.3 进程状态 STAT 精讲(面试/排错核心)
ps aux 输出的 STAT 状态码是进程异常排查的关键,不同状态对应进程运行、阻塞、休眠、僵尸等状态,重点区分高频异常状态。
-
R(Running):运行态,进程正在CPU执行或等待CPU调度,正常活跃状态。
-
S(Sleeping):可中断休眠态,进程等待资源、IO、信号,绝大多数常规服务进程常态。
-
D(Disk Sleep):不可中断休眠态,进程阻塞在磁盘IO、挂载读写,无法被kill终止,大概率磁盘故障、挂载异常。
-
Z(Zombie):僵尸进程,子进程退出、父进程未回收资源,进程残留占用PID,无业务运行,长期堆积会耗尽系统PID资源。
-
T(Stopped):暂停态,进程被挂起、暂停运行(Ctrl+Z触发),后台休眠暂停。
-
额外标识:Ss主进程、S+前台进程、Sl多线程进程、<高优先级进程、N低优先级进程
1.4 动态进程监控 top(实时资源监控,性能排查核心)
top 为动态实时监控工具,默认3秒刷新一次,实时展示全局进程CPU、内存、负载、状态变化,是排查服务器卡顿、CPU飙高、内存溢出的核心命令。
- # 基础实时监控
- top # 全局进程动态监控
- top -d 1 # 1秒刷新一次(高频排查刚需)
- top -p 12345 # 仅监控指定PID进程动态
- top -u nginx # 仅查看指定用户的所有进程
- # ===================== top 交互快捷键(生产必背) =====================
- # P 按CPU占用倒序排序(默认)
- # M 按内存占用倒序排序
- # N 按PID倒序排序
- # T 按进程运行时间排序
- # 1 展开所有CPU核心负载
- # f 自定义展示字段
- # k 输入PID直接查杀进程
- # q 退出监控界面
- # shift+h 展示线程层级信息
- # ===================== 核心系统指标解读 =====================
- # load average: 1分钟、5分钟、15分钟系统负载
- # 单核CPU:负载≤1正常;多核CPU:负载≤核心数为正常
- # %Cpu(s):us用户进程、sy系统进程、id空闲CPU(id过低代表CPU满载)
- # Mem:总内存、已用、空闲、缓存占用
- # Swap:交换分区使用(Swap占用升高代表物理内存不足,严重卡顿)
复制代码
1.5 增强版进程监控 htop(极简高效,生产首选)
htop 是 top 的增强升级版,界面可视化、支持鼠标操作、颜色区分进程、操作快捷键更丰富,无需复杂交互,运维日常监控优先使用,系统默认未安装,需手动yum/apt安装。
- # 安装命令
- yum install htop -y # CentOS/Rocky
- apt install htop -y # Ubuntu/Debian
- # 基础用法
- htop # 可视化动态进程监控
- htop -u nginx # 筛选指定用户进程
复制代码
1.6 进程树查看 pstree(父子进程关系排查)
pstree 以树形结构展示进程父子嵌套关系,精准排查僵尸进程溯源、服务子进程堆积、进程挂靠异常,清晰展示主进程与衍生子进程的层级关系。
- # 基础用法
- pstree # 展示全量进程树
- pstree -p # 显示所有进程PID(核心参数,精准定位进程)
- pstree -u # 显示进程所属用户
- pstree nginx # 仅展示nginx服务进程树,过滤冗余进程
复制代码
1.7 精准获取进程 PID(pidof/pgrep 高效检索)
替代 grep 检索,专门用于快速获取进程PID、批量筛选进程,适配脚本自动化、批量查杀进程场景,输出更纯净、无冗余干扰。
- # pidof:精准获取进程PID(纯PID输出,适配脚本)
- pidof nginx # 输出nginx所有进程PID
- pidof java # 获取Java服务进程PID
- # pgrep:进阶进程筛选(支持模糊匹配、用户筛选)
- pgrep nginx # 仅输出进程PID
- pgrep -l nginx # 同时输出PID+进程名称(生产首选)
- pgrep -u root # 筛选root用户所有进程PID
- pgrep -f "test.jar" # 模糊匹配完整进程命令,精准定位自定义脚本进程
复制代码
1.8 高频易错坑点与生产避坑细则
-
ps 检索冗余坑:grep 检索进程会自带grep自身进程,需加 grep -v grep 过滤,避免误判进程常驻。
-
D态进程不可杀坑:处于D不可中断IO状态的进程,kill -9 无法终止,需排查磁盘挂载、硬盘故障,重启服务器方可恢复。
-
僵尸进程处理坑:Z态僵尸进程无需杀进程,需重启对应父进程回收资源,直接杀僵尸进程无效。
-
top负载误区:load average 负载数值无绝对阈值,需匹配CPU核心数,多核服务器负载高不一定过载,需结合id空闲CPU综合判断。
-
pidof精准性坑:pidof 仅精准匹配进程名,自定义复杂启动命令的进程,需用 pgrep -f 模糊检索。
1.9 生产最佳实践与面试高频考点
-
进程排查选型规范:静态检索用ps、动态监控用top/htop、查父子关系用pstree、脚本取PID用pgrep/pidof。
-
CPU飙高排查流程:top定位高CPU进程 → ps -p 查看进程详情 → 排查程序日志定位异常。
-
内存溢出排查流程:top按M排序 → 定位高内存进程 → 查看线程占用、分析内存泄漏。
-
僵尸进程面试考点:成因是子进程退出后父进程未调用wait()回收资源;危害是占用PID、消耗系统资源;解决方案是重启父进程。
-
D态进程面试考点:不可中断IO阻塞,多为磁盘、NFS挂载、硬件IO异常,无法通过kill命令终止。
- ps -ef # 全量进程
- ps aux # CPU内存占用
- top # 实时资源监控
- htop # 增强版top(需安装)
- pstree # 进程树
- pidof nginx # 获取进程PID
- pgrep java
复制代码
2. 进程控制【生产完整版+信号原理+前后台调度+批量管控+避坑面试精讲】
2.1 模块总述
进程控制是Linux运维服务启停、异常进程查杀、后台任务托管、程序保活、批量进程管控的核心能力。区别于进程查看,本模块聚焦进程的干预、调度、终止、后台托管全操作,包含进程信号底层原理、前后台任务切换、优雅/强制杀进程、批量进程管控、nohup守护进程、生产高危坑点、面试核心考点,所有内容贴合线上服务运维、脚本自动化、故障应急场景。
2.2 进程信号核心原理(面试必考、杀进程底层逻辑)
Linux进程管控本质是向进程发送信号,kill/pkill等命令均为信号发送工具,不同信号对应不同进程处理逻辑,是区分优雅终止、强制终止的核心。
- # 查看所有进程信号列表
- kill -l
- # 三大生产核心信号(必背)
- # 1. SIGTERM 15 默认优雅终止信号
- # 作用:通知进程收尾、保存数据、关闭连接、释放资源后退出
- # 特点:可控、安全、不会丢失业务数据,生产首选默认信号
- kill -15 PID # 等价 kill PID
- # 2. SIGKILL 9 强制终止信号
- # 作用:系统强制回收进程,进程无权限、无时间收尾,直接销毁
- # 特点:暴力终止,容易丢失数据、产生僵尸进程、文件损坏
- # 适用场景:进程卡死、无响应、15信号无法终止的异常进程
- kill -9 PID
- # 3. SIGINT 2 中断信号
- # 作用:等同于终端 Ctrl+C,终止前台运行进程
- # 仅对前台活跃进程生效,后台进程无法接收该信号
- # 小众实用信号
- # SIGSTOP 19 暂停进程(挂起进程,不销毁、不释放资源)
- # SIGCONT 18 恢复暂停进程,继续运行
- # SIGHUP 1 重载配置、重启进程(Nginx/Tomcat热重载核心)
复制代码
2.3 进程终止全量命令(精准/批量/优雅/强制)
覆盖单进程精准查杀、按程序名批量查杀、筛选条件查杀,区分安全终止与强制终止场景,补齐生产选型规范与禁忌。
- # ========== 1. 精准PID进程查杀(单进程管控首选) ==========
- kill 12345 # 默认15信号,优雅终止进程(生产优先)
- kill -15 12345 # 显式优雅终止,等待进程资源释放、数据落地
- kill -9 12345 # 强制杀死卡死/无响应进程(谨慎使用)
- # ========== 2. 按程序名批量查杀(批量运维刚需) ==========
- pkill nginx # 批量优雅终止所有nginx进程
- pkill -9 java # 批量强制杀死所有java进程(应急收尾)
- pkill -f "test.jar" # 模糊匹配进程命令,精准查杀自定义脚本进程
- # ========== 3. 进阶批量查杀组合(生产高频) ==========
- # 筛选进程并优雅批量终止
- pgrep -f "app.jar" | xargs kill -15
- # 筛选卡死异常进程强制查杀
- pgrep -f "error_app" | xargs kill -9
- # ========== 4. 进程暂停与恢复 ==========
- kill -19 PID # 暂停进程运行(挂起,资源保留)
- kill -18 PID # 恢复暂停进程继续运行
复制代码
2.4 前后台进程调度(终端任务托管核心)
解决终端关闭任务中断、前台命令阻塞窗口问题,实现任务后台运行、脱离终端托管,是脚本、服务、压测任务运行的基础。
- # ========== 1. 后台运行符号 &(临时后台运行) ==========
- ./test.sh & # 脚本后台运行,终端可继续操作
- # 缺陷:关闭终端、断开远程连接,进程会自动终止(SIGHUP信号退出)
- # ========== 2. 后台任务查看与切换 ==========
- jobs # 查看当前终端所有后台任务
- jobs -l # 查看后台任务+对应PID(精准管控)
- fg 1 # 将编号1的后台任务切换到前台运行
- bg 1 # 将编号1的暂停任务,放入后台继续运行
- # ========== 3. 前台任务快速挂起 ==========
- # 快捷键 Ctrl+Z
- # 作用:暂停当前前台运行任务,自动放入后台暂停状态
复制代码
2.5 守护进程 nohup(生产后台服务标准)
nohup 核心作用:屏蔽SIGHUP信号,脱离终端运行,关闭远程终端、断开连接后,进程持续后台运行,是生产脚本、轻量服务后台托管标准方案。
- # 生产标准后台启动命令(万能模板,直接复用)
- nohup java -jar app.jar > app.log 2>&1 &
- # 命令逐段解析
- # nohup:屏蔽终端退出信号,进程脱离终端常驻后台
- # > app.log:标准输出日志写入日志文件
- # 2>&1:错误输出重定向到标准输出,统一存入日志文件
- # 末尾&:启动时直接放入后台运行
- # 进阶用法:不输出日志(极简后台运行)
- nohup ./run.sh > /dev/null 2>&1 &
- # 注意:nohup默认生成nohup.out空日志,指定输出路径可避免冗余文件
复制代码
2.6 核心底层区别与选型规范
-
& 和 nohup & 核心区别:单独&仅后台运行,依赖终端会话,断连即终止;nohup & 彻底脱离终端,永久后台常驻,不受会话影响。
-
kill -15 与 kill -9 选型原则:常规进程停止、服务重启统一用15优雅终止;进程卡死、僵尸进程残留、无响应异常进程,才使用9强制查杀。
-
pkill 与 kill+pgrep 区别:pkill简洁适合批量同名进程查杀;pgrep精准匹配,适合自定义复杂进程、精准筛选查杀。
2.7 高频致命坑点 & 生产避坑细则
-
禁止滥用kill -9:强制杀进程会导致数据未落地、文件句柄未释放、配置丢失、数据库事务中断,引发服务启动异常、文件损坏,生产优先15优雅终止。
-
nohup日志阻塞坑:nohup不重定向日志时,默认持续写入nohup.out,长期运行会导致日志文件无限膨胀、占用磁盘空间,必须手动指定日志路径或黑洞输出。
-
后台任务终端依赖坑:jobs命令仅查看当前终端后台任务,新开终端无法查看其他终端后台任务,常驻服务必须用nohup/systemd托管。
-
批量杀进程误杀坑:pkill模糊匹配易误杀同名无关进程,批量操作前必须先用pgrep预览进程列表,确认无误再执行查杀。
-
僵尸进程无法kill -9:僵尸进程为已退出残留进程,无运行逻辑,kill -9无法销毁,必须重启父进程回收资源。
2.8 面试高频核心考点
-
kill -15和kill -9的核心区别与生产场景?15为优雅终止,进程自主收尾释放资源、保存数据,安全无副作用,适用于常规启停;9为强制销毁,进程无收尾机会,易造成数据丢失,仅用于卡死异常进程。
-
为什么nohup后台进程关闭终端不会退出?nohup屏蔽了SIGHUP挂断信号,脱离终端会话独立运行,不受终端关闭、断连影响,实现常驻后台。
-
Ctrl+C和Ctrl+Z区别?Ctrl+C发送SIGINT信号,直接终止前台进程;Ctrl+Z挂起进程,暂停运行并放入后台,进程仍占用资源。
-
如何彻底结束后台nohup进程?需先用ps/pgrep获取PID,执行kill -15优雅终止,仅关闭终端无法停止进程。
2.9 生产最佳实践万能组合
- # 1. 服务标准启停(优雅终止+重启)
- pgrep -f app.jar | xargs kill -15 && nohup java -jar app.jar > app.log 2>&1 &
- # 2. 异常进程应急查杀(预览+强制终止)
- pgrep -f "error_task" # 预览确认进程
- pgrep -f "error_task" | xargs kill -9
- # 3. 批量清理后台暂停任务
- jobs | grep Stopped | awk '{print $1}' | xargs kill -9
- # 4. 轻量脚本永久后台运行(无日志冗余)
- nohup ./task.sh > /dev/null 2>&1
复制代码- kill -9 PID # 强制杀死进程
- kill -15 PID # 优雅终止
- pkill java # 按程序名杀进程
- & # 后台运行
- jobs # 查看后台任务
- fg 1 # 后台切前台
- bg 1 # 暂停任务后台运行
- nohup ./run.sh & # 脱离终端后台运行
复制代码
3. 系统负载、内存、磁盘 IO【生产全量精讲+指标解读+排错流程+避坑面试】
3.1 模块总述
系统负载、内存、磁盘IO是服务器性能排查、卡顿溯源、资源瓶颈定位、线上故障排错的三大核心维度。90%的服务器响应慢、服务超时、接口卡顿、进程阻塞问题,均源于CPU负载过高、内存溢出、磁盘IO打满。本小节补全全套监控命令、核心指标底层含义、生产标准排查流程、高频坑点、性能调优规范与面试核心考点,完全适配企业运维、性能优化、故障应急场景。
3.2 系统CPU负载监控(uptime/top)核心解读
CPU负载代表CPU等待运行的任务总数,并非CPU使用率,是判断系统任务拥堵、调度瓶颈的核心指标,多核服务器必须结合核心数判断,是新手最易误解的知识点。
- # 1. 快速查看系统负载(最简核心命令)
- uptime
- # 输出字段解析:
- # 14:30:00 当前系统时间
- # up 30days 服务器运行时长
- # 2 users 当前在线用户数
- # load average: 0.25, 0.40, 0.35
- # 依次为:1分钟、5分钟、15分钟平均负载
- # 2. 负载高低判断标准(生产通用规范)
- # 单核CPU:负载 <1 正常,1~1.5 轻微拥堵,>2 严重过载卡顿
- # 多核CPU(N核):负载 <N 正常,N~1.2*N 负载偏高,>1.5*N 严重过载
- # 负载趋势:1min>5min>15min 代表负载持续升高,需紧急排查
- # 负载趋势:1min<5min<15min 代表负载逐步回落,系统恢复正常
复制代码
3.3 内存资源监控(free)原理+指标精讲
内存是服务运行的核心资源,内存不足会导致OOM进程被杀、服务闪退、系统卡顿、Swap频繁占用,本节精准区分缓存/可用内存/交换分区,纠正新手内存计算误区。
- # 查看内存、Swap使用情况(-h 人性化单位,生产必带)
- free -h
- # 核心字段解析(生产重点)
- # total:总内存大小
- # used:已使用内存(进程运行+缓存+缓冲区)
- # free:完全空闲内存(系统预留,不代表可用内存)
- # shared:共享内存
- # buff/cache:文件缓存、目录缓存、磁盘读写缓冲区
- # available:真正可用内存(生产判断内存余量唯一标准!)
- # Swap交换分区核心说明
- # Swap:硬盘虚拟内存,物理内存不足时,系统将闲置进程数据存入磁盘
- # 风险:Swap一旦持续占用,磁盘IO会飙升,系统严重卡顿、服务超时
- # 生产规范:正常服务器Swap使用率应趋近于0
- # 内存过载判断标准
- # 1. available持续过低,接近耗尽
- # 2. Swap占用持续升高(核心告警指标)
- # 3. 系统日志出现OOM killer进程杀死记录
复制代码
3.4 全局系统状态监控(vmstat)性能基线排查
vmstat是系统全局体检工具,一站式监控CPU、内存、磁盘IO、进程、系统调度状态,无需多命令切换,适合快速定位整机性能瓶颈。
- # 语法:vmstat 刷新间隔秒数 刷新次数
- vmstat 1 # 每秒刷新一次,持续监控(排错首选)
- vmstat 1 10 # 每秒刷新,共输出10次后退出
- # 核心关键字段解读(故障定位核心)
- ## 1. 进程字段
- # r:等待CPU运行的任务数(就绪队列,对应CPU负载)
- # b:不可中断阻塞进程数(D态进程,磁盘IO阻塞核心指标)
- ## 2. 内存字段
- # swpd:已使用Swap大小(数值持续上涨=内存不足)
- # free:空闲内存
- # buff:缓冲区
- # cache:文件缓存
- ## 3. IO字段
- # bi:磁盘读数据量
- # bo:磁盘写数据量
- # bi/bo持续过高 = 磁盘IO打满瓶颈
- ## 4. CPU字段
- # us:用户进程CPU占比(业务程序占用)
- # sy:系统内核CPU占比
- # id:空闲CPU(id持续趋近于0=CPU满载)
- # wa:IO等待CPU占比(wa过高=磁盘IO瓶颈,CPU空闲但等磁盘读写)
复制代码
3.5 磁盘IO专项监控(iostat)读写性能排查
磁盘IO是高频隐形性能瓶颈,CPU、内存充足但服务卡顿,90%为磁盘IO打满。iostat专门监控磁盘读写速度、IO等待、设备繁忙度,精准定位磁盘瓶颈。
- # 每秒刷新一次磁盘IO状态
- iostat 1
- # 核心关键指标(生产排错必看)
- # %util:磁盘设备繁忙百分比(核心指标)
- # 100%util:磁盘IO完全打满,所有读写请求阻塞,服务严重卡顿
- # avgqu-sz:IO请求队列长度,队列越长,拥堵越严重
- # 字段说明
- # tps:每秒IO读写次数
- # rMB/s:每秒读取数据量
- # wMB/s:每秒写入数据量
- # 磁盘IO瓶颈判定标准
- # 1. %util长期90%~100%
- # 2. wa(IO等待CPU占比)持续大于20%
- # 3. 业务接口响应缓慢、日志写入卡顿、文件操作超时
复制代码
3.6 网络流量监控(sar)带宽/报文排查
sar是系统综合统计工具,重点用于实时网络流量监控、历史性能回溯,排查带宽跑满、报文异常、网络拥堵问题。
- # 每秒刷新一次网络设备流量
- sar -n DEV 1
- # 关键字段解析
- # rxpck/s:每秒接收报文数
- # txpck/s:每秒发送报文数
- # rxkB/s:每秒接收流量
- # txkB/s:每秒发送流量
- # 网络异常判定
- # 流量持续打满带宽上限 = 带宽瓶颈
- # 报文数异常飙升 = 存在异常请求、CC攻击、日志疯狂输出
复制代码
3.7 生产标准性能排查流程(卡顿/超时万能排查链路)
第一步:全局初判 执行 uptime 查看负载,判断系统整体拥堵状态,区分瞬时波动和持续过载。
第二步:CPU瓶颈定位top 按P排序,查看高CPU进程,确认是业务程序耗CPU还是系统内核耗CPU。
第三步:内存校验free -h 查看available可用内存、Swap占用,判断是否内存不足、OOM风险。
第四步:IO瓶颈定位iostat 1 查看磁盘%util利用率、wa IO等待,确认磁盘是否打满阻塞。
第五步:网络校验sar -n DEV 1 排查带宽、报文是否异常,排除网络瓶颈。
第六步:全局汇总vmstat 1 综合核对进程、IO、CPU状态,锁定最终瓶颈根源。
3.8 高频致命坑点与生产避坑细则
-
负载与CPU使用率混淆坑:负载高不代表CPU占用高,负载是等待任务数,大量IO阻塞会导致负载飙升、CPU空闲,切勿盲目杀进程。
-
内存空闲误区:Linux系统会默认利用空闲内存做buff/cache缓存,free空闲内存小是正常现象,判断内存余量只看available。
-
Swap占用致命坑:Swap一旦持续上涨,优先排查内存泄漏,而非重启服务器,临时解决方案可执行swapoff -a && swapon -a释放缓存。
-
磁盘util误区:机械硬盘容易100%util卡顿,固态硬盘IO性能更强,若SSD仍100%util,大概率是程序疯狂读写小文件。
-
vmstat b队列异常:b列阻塞进程数持续大于0,代表存在大量D态不可中断IO进程,需排查磁盘挂载、NFS、硬盘故障。
3.9 面试高频核心考点
-
系统负载过高可能的原因? CPU密集进程占用、大量任务排队、磁盘IO阻塞、网络IO拥堵、僵尸进程堆积。
-
为什么内存充足但系统依然卡顿? 磁盘IO打满、CPU IO等待过高、网络带宽耗尽,属于IO瓶颈,非资源容量瓶颈。
-
Swap频繁使用的危害? 磁盘读写速度远低于物理内存,会导致服务响应超时、接口卡顿、进程阻塞、业务异常。
-
iostat中wa指标含义? CPUIO等待时间占比,wa过高说明CPU大量时间等待磁盘读写,核心瓶颈为磁盘IO。
-
Linux cache占用大量内存需要清理吗? 不需要,是系统优化机制,内存空闲时自动缓存文件,提升读写速度,内存不足时系统会自动回收。
3.10 生产最佳实践总结
-
日常巡检固定组合:uptime && free -h && iostat,快速核验整机性能状态;
-
性能卡顿优先排查IO瓶颈,多数线上卡顿均为磁盘/网络IO阻塞,而非CPU内存不足;
-
线上服务器禁止长期占用Swap,需配置合理内存阈值告警,提前规避OOM风险;
-
小文件频繁读写场景,重点监控磁盘util和IO队列,避免磁盘IO打满引发批量超时;
-
性能问题排查遵循「先全局、后局部,先资源、后程序」的原则,快速定位瓶颈。
- uptime # 开机时间、1/5/15分钟负载
- free -h # 内存/交换分区使用率查看
- vmstat 1 # 系统全局状态每秒刷新(CPU/内存/IO综合监控)
- iostat 1 # 磁盘IO实时负载监控
- sar -n DEV 1 # 网络流量实时监控
- swapoff -a && swapon -a # 临时刷新Swap缓存
复制代码
- uptime # 开机时间、1/5/15分钟负载
- free -h # 内存/交换分区
- vmstat 1 # 系统全局状态每秒刷新
- iostat 1 # 磁盘IO负载
- sar -n DEV 1 # 网络流量监控
复制代码
4. 定时任务 crontab【生产完整版+语法精讲+实战场景+避坑面试】
4.1 模块总述
crontab 是 Linux 系统原生自带、无额外部署、稳定可靠的定时任务工具,是运维自动化的核心基础,广泛用于日志定期清理、数据定时备份、脚本周期执行、服务巡检、定时同步数据等生产场景。本节完整补全crontab底层语法、全量操作命令、特殊符号用法、系统级定时任务、生产高频场景、致命坑点与面试核心考点,覆盖99%线上定时任务需求。
4.2 核心语法标准(必背)
crontab 统一语法格式:分 时 日 月 周 执行命令/脚本,六段参数缺一不可,严格遵循「从左到右:分钟→小时→日期→月份→星期→任务」规则。
- # 标准语法格式
- # 分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-7) 执行任务
- # 周0和7均代表周日
- # 基础示例:每天凌晨3点执行备份脚本
- 0 3 * * * /root/backup.sh
复制代码
4.3 全量用户操作命令
crontab 区分当前用户任务和系统全局任务,普通用户仅能编辑自身定时任务,root可管理所有用户任务。
- # 1. 编辑当前用户定时任务(核心命令)
- crontab -e # 编辑定时任务,不存在则新建,自带语法校验
- # 2. 查看当前用户所有定时任务
- crontab -l # 罗列所有已配置的定时任务
- # 3. 清空当前用户所有定时任务(高危!生产慎用)
- crontab -r # 直接清空全部任务,无确认提示、不可恢复
- crontab -ir # 带确认提示删除,安全删除首选
- # 4. 管理指定用户定时任务(仅root权限可用)
- crontab -u nginx -l # 查看nginx用户的定时任务
- crontab -u dev -e # 编辑普通用户dev的定时任务
- crontab -u dev -r # 清空指定用户定时任务
复制代码
4.4 五大特殊符号精讲(批量/周期定时核心)
特殊符号是实现复杂定时逻辑的关键,生产90%的灵活定时场景均依赖以下符号组合。
-
* 星号:代表「每一个单位」,全周期执行。例:分钟位* 代表每分钟、小时位* 代表每小时。
-
- 减号:代表「连续区间」。例:小时位8-18 代表8点到18点连续执行。
-
, 逗号:代表「离散多个时间点」。例:分钟位0,10,20 代表每小时的0分、10分、20分执行。
-
/ 斜杠:代表「间隔周期」,实现轮询执行。例:*/5 代表每5个单位执行一次。
-
# 井号:注释符号,配置备注、禁用无效任务,被注释的任务不会执行。
- # 特殊符号实战示例
- */5 * * * * /root/test.sh # 每5分钟执行一次
- 0 8-18 * * * /root/run.sh # 每天8点-18点,整点执行
- 0 0,6,12,18 * * * /root/sync.sh # 每天0点、6点、12点、18点执行
- 0 2 * * 1-5 /root/work.sh # 每周一到周五凌晨2点执行
复制代码
4.5 生产高频定时场景(直接复用)
汇总运维日常刚需定时任务,覆盖日志清理、数据备份、巡检、同步、重启等核心场景,可直接复制使用。
- # 1. 每日凌晨3点清理7天前日志(生产日志清理标配)
- 0 3 * * * find /var/log -name "*.log" -mtime +7 -delete
- # 2. 每小时同步系统时间(解决时间偏差问题)
- 0 * * * * /usr/sbin/chronyc -a makestep
- # 3. 每周日凌晨2点全量数据备份
- 0 2 * * 0 /root/data_backup.sh
- # 4. 工作日(周一至周五)9点自动重启Nginx
- 0 9 * * 1-5 systemctl restart nginx
- # 5. 每10分钟检测服务状态,异常自动重启
- */10 * * * * /root/service_check.sh
- # 6. 每月1号凌晨4点清理系统垃圾文件
- 0 4 1 * * rm -rf /tmp/* /var/tmp/*
- # 7. 每天12点、18点自动同步业务数据
- 0 12,18 * * * /root/data_sync.sh
复制代码
4.6 定时任务日志排查(排错核心)
定时任务执行失败、无效果时,优先查看专属日志,定位脚本报错、权限不足、路径错误等问题。
- # centos/rocky 定时任务日志路径
- tail -f /var/log/cron
- # ubuntu/debian 定时任务日志路径
- tail -f /var/log/syslog
- # 自定义任务日志(生产最佳实践,必加)
- 0 3 * * * /root/backup.sh >> /var/log/backup_cron.log 2>&1
- # 释义:任务执行日志追加写入指定文件,错误日志统一输出,便于排错
复制代码
4.7 系统级定时任务(全局配置)
除用户级crontab,系统提供全局定时配置文件,适合配置系统通用定时任务,仅root可编辑。
- # 系统全局定时配置文件
- /etc/crontab
- # 系统自带定时目录(无需手动配置,放入脚本自动执行)
- /etc/cron.hourly/ # 每小时自动执行
- /etc/cron.daily/ # 每天自动执行
- /etc/cron.weekly/ # 每周自动执行
- /etc/cron.monthly/ # 每月自动执行
复制代码
4.8 高频致命坑点(生产必避)
-
路径缺失坑(Top1踩坑):crontab 无完整环境变量,执行脚本必须写绝对路径,相对路径会直接执行失败,所有命令、脚本、配置均需全路径。
-
周日冲突坑:日期和星期同时配置会触发「或逻辑」,而非且逻辑,容易导致定时任务提前执行,精准定时建议只配日期或只配星期。
-
无日志排错难:默认无任务执行日志,失败无提示,所有生产定时任务必须配置日志输出,否则无法排查异常。
-
crontab -r 误删坑:清空命令无二次确认,极易误删所有定时任务,生产禁止直接使用,优先备份任务配置。
-
脚本权限不足:定时执行脚本需提前加执行权限 chmod +x 脚本名,否则任务静默失败。
-
并发重复执行:短周期定时任务(每分钟/每5分钟),若脚本执行耗时过长,会产生并发进程,需加锁控制避免重复执行。
4.9 面试高频核心考点
-
crontab 日期和星期同时生效规则? 两者是「或关系」,满足任意一个条件即执行,不是同时满足,容易导致定时逻辑错乱。
-
为什么终端能执行的脚本,crontab执行失败? crontab环境变量不完整、不识别相对路径,必须使用绝对路径,且需独立配置脚本所需环境变量。
-
如何避免定时任务并发执行? 可通过文件锁、进程PID判断,保证同一时间仅有一个脚本进程运行。
-
crontab 0和7的区别?分钟/星期字段中,0和7均代表周日,无区别,周一至周五为1-5,周六为6。
4.10 生产最佳实践总结
-
所有定时任务统一使用绝对路径,强制配置日志输出,方便异常排查;
-
配置前先测试脚本手动可执行,再写入crontab,避免语法、脚本报错;
-
定期备份crontab配置:crontab -l > /root/cron_backup.txt,防止误删丢失;
-
短周期高频任务添加并发锁,避免进程堆积、资源占用过高;
-
废弃任务禁止直接删除,优先注释保留,便于后续复盘核对。
- crontab -e # 编辑定时任务
- crontab -l # 查看定时任务
- crontab -ir # 安全删除定时任务(带确认)
- tail -f /var/log/cron # 查看定时执行日志
- crontab -u 用户名 -l # 查看指定用户定时
复制代码- crontab -e # 编辑当前用户定时
- crontab -l # 查看定时任务
- crontab -r # 清空定时
- # 格式:分 时 日 月 周 命令
- 0 3 * * * /root/backup.sh
复制代码
六、网络命令(运维排查必备)
1. 网卡、IP、路由【生产完整版+原理+排错+避坑精讲】
1.1 模块总述
网卡、IP地址、路由是Linux网络通信的底层核心,所有外网访问、内网互通、服务端口监听、跨机器通信、网关跳转、网络不通故障,均围绕该模块展开。本小节摒弃过时命令,以ip系列命令(现代Linux标准)为主、传统ifconfig/route为辅,补全网卡配置、IP增减、网关路由、静态路由、路由优先级、网络故障排查、高频坑点与面试考点,完全适配生产网络配置、网络异常排错、服务器组网场景。
1.2 网卡基础信息查看(核心实操)
Linux 网卡命名规范:传统eth0/eth1,现代服务器多为ens33/enp0s3等物理网卡名,lo为本地回环网卡(127.0.0.1),仅本机内部通信。
- # 1. 全量网卡信息查看(现代首选,替代ifconfig,信息最全)
- ip addr
- # 关键字段解析
- # LINK:网卡物理状态(UP=网卡启用、DOWN=网卡禁用)
- # INET:IPv4地址/子网掩码
- # INET6:IPv6地址
- # LOOPBACK:回环网卡,永不宕机
- # BROADCAST:广播地址
- # 2. 简洁查看本机所有IP(运维快速核查首选)
- hostname -I
- # 3. 查看网卡物理硬件信息(MAC地址、网卡型号、速率)
- ip link
- ip link show ens33 # 查看指定网卡详细链路信息
- # 4. 传统兼容命令(老旧系统可用)
- ifconfig # 查看网卡IP、掩码、MAC、收发数据包
- ifconfig ens33 up # 启用网卡
- ifconfig ens33 down # 禁用网卡
复制代码
1.3 网卡启停与IP动态/静态配置(生产核心)
支持临时IP配置(重启失效)和永久网卡配置,适配临时网络调试、固定业务IP场景,区分CentOS/Ubuntu配置路径。
- # ========== 1. 网卡启停操作(临时生效) ==========
- ip link set ens33 up # 启用网卡
- ip link set ens33 down # 禁用网卡
- # ========== 2. 临时配置IP(重启/重启网络失效,调试专用) ==========
- ip addr add 192.168.1.100/24 dev ens33 # 给ens33网卡临时添加IP
- ip addr del 192.168.1.100/24 dev ens33 # 删除网卡临时IP
- # 临时配置广播地址
- ip addr add 192.168.1.100/24 broadcast 192.168.1.255 dev ens33
- # ========== 3. 重启网络服务(生效配置) ==========
- # CentOS7+/Rocky
- systemctl restart network
- # Ubuntu/Debian
- systemctl restart networking
- # 通用重载网络配置
- nmcli reload
复制代码
1.4 路由体系核心原理(面试必考、网络通断底层)
路由的核心作用:控制服务器数据包的出站转发路径,服务器访问不同网段、外网、跨机房通信,均依赖路由规则匹配,路由配置错误是网络不通、外网无法访问、内网断连的核心原因。
路由匹配优先级:精确路由 > 网段路由 > 默认路由
-
默认路由(0.0.0.0/0):所有未知网段的数据包,统一转发到默认网关,是服务器上网的核心路由
-
静态网段路由:指定固定网段走指定网关,适配跨机房、专线、内网多网段互通场景
-
直连路由:服务器网卡本机所在网段,自动生成,无需手动配置,优先级最高
1.5 路由全量实操命令(生产全覆盖)
- # ========== 1. 路由表查看(生产首选) ==========
- ip route show # 查看完整路由表(现代标准)
- route -n # 数字格式查看路由,不解析域名,排查更快
- # 路由字段解读
- # Destination:目标网段
- # Gateway:下一跳网关地址
- # Genmask:子网掩码
- # Flags:路由标识(U=路由生效、G=默认网关)
- # ========== 2. 默认网关配置(上网核心) ==========
- # 临时添加默认网关(重启失效)
- ip route add default via 192.168.1.1 dev ens33
- # 删除默认网关
- ip route del default
- # ========== 3. 静态路由配置(跨网段互通刚需) ==========
- # 指定网段走固定网关(访问10.0.0.0/8网段,走192.168.1.2网关)
- ip route add 10.0.0.0/8 via 192.168.1.2 dev ens33
- # 删除指定静态路由
- ip route del 10.0.0.0/8
- # 本机路由:指定IP走本地网卡(内网互通优化)
- ip route add 192.168.1.0/24 dev ens33
- # ========== 4. 路由清空与重置(故障应急) ==========
- ip route flush all # 清空所有路由,重置网络路由规则
复制代码
1.6 永久网卡与路由配置(企业规范)
临时配置仅适用于调试,生产业务服务器必须配置永久静态IP+固定路由,避免重启后网络失效。
CentOS/Rocky 永久网卡配置
配置文件路径:/etc/sysconfig/network-scripts/ifcfg-ens33
- # 核心配置参数
- TYPE=Ethernet
- BOOTPROTO=static # 静态IP(dhcp为动态获取)
- NAME=ens33
- DEVICE=ens33
- ONBOOT=yes # 开机自启网卡
- IPADDR=192.168.1.100 # 静态IP
- NETMASK=255.255.255.0 # 子网掩码
- GATEWAY=192.168.1.1 # 默认网关
- DNS1=223.5.5.5 # DNS服务器
复制代码
Ubuntu 永久网卡配置
配置文件路径:/etc/netplan/00-installer-config.yaml
- network:
- ethernets:
- ens33:
- addresses: [192.168.1.100/24]
- gateway4: 192.168.1.1
- nameservers:
- addresses: [223.5.5.5,8.8.8.8]
- version: 2
复制代码
1.7 高频网络故障排查流程(生产万能链路)
-
第一步:核查网卡状态ip addr 确认网卡UP状态、IP配置是否正常
-
第二步:核查路由网关ip route 确认默认网关存在、网段路由无误
-
第三步:内网连通性测试 ping 同网段服务器、ping 网关,排查内网链路
-
第四步:外网连通性测试 ping 公网IP、ping 域名,区分网络不通/DNS故障
-
第五步:端口链路排查 检查防火墙、网卡物理链路、交换机端口状态
1.8 高频易错坑点与生产避坑细则
-
网卡UP无IP坑:网卡状态为UP但无IP,大概率是BOOTPROTO配置异常、DHCP服务失效,静态IP需手动配置地址。
-
多网卡路由冲突:服务器多网卡场景下,默认网关只能配置一个,多网关会导致路由紊乱、外网断断续续。
-
临时配置失效坑:ip addr/ip route临时配置,重启网络、重启服务器均会失效,业务环境必须配置永久参数。
-
路由优先级误区:直连网段路由优先级最高,手动静态路由无法覆盖直连路由,跨网段互通需精准配置下一跳网关。
-
子网掩码配置错误:掩码不匹配会导致跨IP段无法互通、数据包丢包,生产统一使用24位掩码(255.255.255.0)规范配置。
1.9 面试高频核心考点
-
ifconfig和ip命令的区别? ifconfig是老旧命令、功能有限、部分新系统已弃用;ip是Linux官方新一代网络命令,整合网卡、IP、路由所有功能,参数更全、效率更高。
-
默认路由的作用? 服务器所有无法匹配本地网段的数据包,统一转发到默认网关,实现外网跨网段通信,无默认路由则服务器仅能内网互通。
-
多网卡服务器为什么不能配置多个默认网关? 多默认网关会导致路由表冲突,系统无法识别出站链路,引发网络丢包、访问不稳定、外网不通问题。
-
网卡DOWN状态的原因? 物理链路断开、网卡禁用、开机自启关闭、网络服务异常、虚拟机网卡模式故障。
1.10 生产最佳实践总结
-
生产服务器统一使用静态IP配置,禁止DHCP动态获取,避免IP变动导致业务异常;
-
网络排查优先用 ip addr + ip route 组合,快速定位网卡、IP、路由问题;
-
多网段组网场景,精准配置静态路由,不随意修改默认网关,保证网络稳定性;
-
网卡配置修改后立即重启网络服务并核查路由表,提前规避重启后网络失效风险;
-
统一配置公共DNS(阿里223.5.5.5/谷歌8.8.8.8),避免域名解析失败。
- ip addr / ifconfig # 查看网卡IP
- ip route / route -n # 路由表
- hostname -I # 本机IP
- hostname # 主机名
复制代码
2. 连通性、DNS【生产完整版+原理+排错+避坑面试】
2.1 模块总述
连通性测试与DNS解析是网络排错的前置核心步骤,90%的外网访问失败、域名打不开、接口超时、服务器跨网通信异常问题,均出在链路连通故障或DNS解析异常。本小节完整补全ping、路由追踪、DNS解析、域名缓存、hosts优先级、解析故障排错全流程,区分内网/公网、临时/永久DNS配置,补齐生产高频坑点与面试核心考点,完全适配线上网络故障快速排查场景。
2.2 链路连通性测试(ping)精准精讲
ping基于ICMP协议,是检测网络链路通断、延迟、丢包、网络拥堵的基础命令,可精准区分物理链路故障、网关故障、外网故障,生产禁止无脑长ping,需结合参数精准排查。
- # 1. 基础连通性测试(默认无限发包,Ctrl+C终止)
- ping www.baidu.com
- ping 223.5.5.5
- # 2. 生产标准测试(指定发包次数,自动退出,脚本/巡检刚需)
- ping -c 4 www.baidu.com # 发送4个数据包后自动终止(Linux通用)
- ping -c 4 192.168.1.1 # 测试内网网关连通性
- # 3. 限定超时时间、间隔时间(精准排查网络延迟)
- ping -c 5 -W 2 www.baidu.com # 发包5次,单次超时2秒,超时判定故障
- ping -i 0.5 www.baidu.com # 缩短发包间隔为0.5秒,快速压测链路稳定性
- # 4. 后台静默ping测试(长期监测链路稳定性)
- ping -c 1000 www.baidu.com > ping_log.txt 2>&1 &
- # 5. 仅查看连通结果(脚本判断专用)
- ping -c 1 IP/域名 && echo "链路正常" || echo "链路中断"
复制代码
2.3 路由链路追踪(traceroute/mtr)定位丢包节点
ping仅能判断终端通断,链路卡顿、延迟高、间歇性丢包需通过路由追踪定位故障节点,区分是内网链路、运营商网关、外网节点故障,是复杂网络排错核心工具。
- # 1. 基础路由追踪(全程网关跳转路径)
- traceroute www.baidu.com
- # 2. 生产精准追踪(忽略反向解析,加速排查)
- traceroute -n www.baidu.com # 只显示IP,不解析域名,避免卡顿
- # 3. 全能链路检测(mtr 生产首选,比traceroute精准百倍)
- # 结合ping+路由追踪,统计每一跳丢包率、延迟,定位故障网关
- mtr -c 100 www.baidu.com # 发送100包,统计链路丢包
- mtr -n -c 50 223.5.5.5 # 无解析+50次发包,快速定位丢包节点
复制代码
2.4 DNS解析核心命令(nslookup/dig)精准排错
DNS解析故障分为:域名无法解析、解析超时、解析错误、缓存污染、DNS服务器故障,两大核心命令分工明确,nslookup简洁快速,dig解析详细,适配不同排查场景。
- # ========== 1. nslookup 快速解析(日常排查首选) ==========
- # 基础域名解析,查看默认DNS、解析IP
- nslookup www.baidu.com
- # 指定DNS服务器解析(排查DNS服务器故障核心)
- nslookup www.baidu.com 223.5.5.5 # 用阿里DNS单独解析
- nslookup www.baidu.com 8.8.8.8 # 用谷歌DNS单独解析
- # 反向解析(IP查域名)
- nslookup 14.215.177.38
- # ========== 2. dig 详细解析(深度排错、运维高阶) ==========
- # 完整解析过程、耗时、DNS服务器、解析记录类型
- dig www.baidu.com
- # 精简解析结果(只看最终IP,生产快速核查)
- dig +short www.baidu.com
- # 指定DNS服务器解析
- dig @223.5.5.5 www.baidu.com
- # 解析特定记录类型(企业域名排查刚需)
- dig www.baidu.com A # 解析IPv4 A记录
- dig www.baidu.com AAAA # 解析IPv6记录
- dig www.baidu.com CNAME # 解析别名记录
- dig www.baidu.com MX # 解析邮件服务器记录
复制代码
2.5 DNS核心配置与生效规则(生产必懂)
Linux DNS解析遵循本地优先、DNS服务器兜底规则,核心配置文件决定解析优先级,是解决解析异常的底层关键。
-
本地hosts文件:/etc/hosts,最高解析优先级,强制指定域名对应IP,优先于所有DNS服务器解析
-
DNS配置文件:/etc/resolv.conf,系统默认DNS服务器配置文件,存储公共DNS地址
-
解析优先级顺序:/etc/hosts 本地解析 > resolv.conf 公共DNS解析
- # 1. 临时修改DNS(立即生效,重启网络失效)
- echo "nameserver 223.5.5.5" > /etc/resolv.conf
- echo "nameserver 8.8.8.8" >> /etc/resolv.conf
- # 2. 永久DNS配置(CentOS/Rocky)
- # 编辑网卡配置文件,添加DNS参数
- vim /etc/sysconfig/network-scripts/ifcfg-ens33
- DNS1=223.5.5.5
- DNS2=8.8.8.8
- # 3. 永久DNS配置(Ubuntu)
- vim /etc/netplan/00-installer-config.yaml
- nameservers:
- addresses: [223.5.5.5,8.8.8.8]
- # 4. 本地hosts强制解析(临时域名映射、测试环境刚需)
- vim /etc/hosts
- # 格式:IP 域名
- 180.101.49.11 www.baidu.com
复制代码
2.6 DNS缓存清理(解析异常核心解决方案)
系统、服务会缓存DNS解析结果,修改DNS/hosts后不生效,90%是缓存未刷新导致,不同系统缓存清理方式不同。
- # CentOS7+/Rocky 清理DNS缓存
- systemctl restart nscd
- # Ubuntu/Debian 清理DNS缓存
- systemctl restart systemd-resolved
- # 手动清空本地hosts缓存(通用)
- cat /dev/null > /etc/hosts
- # 测试DNS缓存是否生效
- # 第一次解析慢,第二次快速返回即为缓存生效
- time dig www.baidu.com
复制代码
2.7 网络连通&DNS故障标准化排错流程
第一步:基础链路校验 ping 网关、ping 内网IP,排查物理链路、网卡、网关故障
第二步:区分故障范围 ping 公网IP(223.5.5.5)通、ping 域名不通,判定为DNS解析故障;公网IP也不通,判定为链路故障
第三步:核查DNS配置 查看resolv.conf是否有有效DNS服务器,替换阿里/谷歌公共DNS测试
第四步:排查本地hosts 检查/etc/hosts是否存在错误域名映射,导致解析异常
第五步:刷新DNS缓存 重启DNS服务、清空缓存,重新解析域名
第六步:精准链路追踪 mtr排查链路丢包节点,解决延迟高、间歇性超时问题
2.8 高频致命坑点&生产避坑细则
-
hosts优先级误区:本地hosts解析优先级高于公共DNS,测试环境修改hosts后,线上域名解析会被强制覆盖,上线前务必清理无效hosts配置。
-
DNS单节点故障:只配置单个DNS服务器,会导致DNS服务宕机后所有域名无法解析,生产必须配置双DNS冗余。
-
ping域名失败≠网络中断:大概率是DNS解析故障,而非链路故障,需通过ping公网IP快速区分,切勿盲目重启网络。
-
缓存不更新坑:域名IP变更后,服务器会缓存旧解析结果,导致访问异常,必须手动刷新DNS缓存或重启解析服务。
-
ICMP被拦截误区:部分公网服务器、防火墙会禁止ICMP协议,ping超时不代表业务不通,需用curl/telnet测试端口业务连通性。
2.9 面试高频核心考点
-
域名解析优先级顺序? 本地/etc/hosts > 系统DNS缓存 > /etc/resolv.conf配置的公共DNS服务器。
-
ping IP通、ping域名不通的原因? DNS服务器配置错误、DNS服务宕机、域名解析缓存异常、hosts配置错误。
-
nslookup和dig的区别? nslookup命令简洁,适合快速校验解析结果;dig输出完整解析链路、耗时、报文信息,适合深度排错。
-
为什么需要配置双DNS? 单DNS存在单点故障,主DNS宕机后,备用DNS可自动接管,保证域名解析持续可用。
-
ICMP协议被禁止的影响? 无法ping通服务器,但不影响HTTP、TCP业务端口通信,需通过端口测试判断业务状态。
2.10 生产最佳实践总结
-
所有生产服务器统一配置阿里DNS(223.5.5.5)+谷歌DNS(8.8.8.8)双冗余,杜绝DNS单点故障;
-
域名解析异常优先清空DNS缓存、核查hosts配置,无需重启服务器;
-
网络卡顿、间歇性超时,优先用mtr排查链路丢包节点,精准定位内网/外网故障;
-
公网业务排查不依赖ping结果,最终以curl、端口连通性测试为准,规避ICMP拦截问题;
-
测试环境hosts映射用完及时清理,避免上线后解析错乱影响业务。
- ping -c 4 www.baidu.com # 指定次数连通性测试
- traceroute -n www.baidu.com # 无解析路由追踪
- mtr -c 50 www.baidu.com # 链路丢包精准排查
- nslookup 域名 # 快速DNS解析
- dig +short 域名 # 精简解析IP结果
- cat /etc/hosts # 查看本地域名映射
- cat /etc/resolv.conf # 查看系统DNS配置
- systemctl restart nscd # 清空DNS缓存
复制代码
- ping IP/域名
- ping -c 4 www.baidu.com
- traceroute www.baidu.com # 路由追踪
- nslookup / dig 域名 # DNS解析
- host baidu.com
复制代码
3. 端口、连接查看【生产完整版+状态解析+排错避坑+面试精讲】
3.1 模块总述
端口与网络连接排查是服务端口冲突、端口占用、连接爆满、接口超时、TCP异常故障的核心排查手段。Linux 主流两大工具:ss(系统原生、速度快、推荐首选)、netstat(经典兼容、老牌运维常用),搭配 lsof 精准定位端口占用进程。本节完整补全监听端口、已建立连接、连接状态、进程绑定、端口扫描、高并发连接排查、生产坑点、面试核心考点,覆盖99%线上端口与连接异常场景。
3.2 核心前置知识:TCP连接状态(面试必考)
所有网络连接均遵循TCP状态机,线上卡顿、连接超时、服务拒绝连接,本质都是连接状态异常,核心状态如下:
-
LISTEN:监听状态,端口正常开启,等待客户端连接(服务正常启动标志)
-
ESTABLISHED:已建立有效连接,正在正常数据传输(业务活跃连接)
-
TIME_WAIT:连接主动关闭后等待释放状态,短期残留正常,数量暴涨会导致端口耗尽
-
CLOSE_WAIT:被动关闭未释放,严重异常,大量存在代表服务未主动关闭连接、连接泄漏
-
SYN_SENT/SYN_RECV:握手阶段异常,大概率网络拦截、端口未放行、服务过载
3.3 ss 命令(生产首选,替代netstat,高性能)
ss 是 Linux 新一代网络连接查看工具,无需遍历内核链表,查询速度远超netstat,高并发服务器排查首选,参数精简高效。
- # ===================== ss 核心高频命令 =====================
- # 1. 查看所有TCP监听端口(生产最常用)
- ss -lntp
- # 参数详解
- # l:仅展示监听端口(服务端口)
- # n:数字端口显示,不解析域名,排查更快
- # t:仅筛选TCP连接(业务主流)
- # p:展示对应绑定进程名/PID
- # 2. 查看所有已建立TCP连接(排查在线用户、活跃请求)
- ss -antp
- # 3. 查看UDP端口/连接
- ss -lnup
- # 4. 查看所有socket连接(包含本地、域套接字)
- ss -a
- # 5. 统计各类连接状态数量(瓶颈排查核心)
- ss -ant | awk '{print $1}' | sort | uniq -c
- # 6. 筛选指定端口连接
- ss -antp | grep :80
- ss -antp | grep :443
- # 7. 筛选指定状态连接(异常排查刚需)
- ss -antp | grep TIME_WAIT
- ss -antp | grep CLOSE_WAIT
复制代码
3.4 netstat 命令(经典兼容,老旧系统适配)
netstat 是传统网络排查命令,兼容性极强,新系统默认未预装,需手动安装,功能与ss基本一致,适合老旧服务器运维排查。
- # ===================== netstat 经典全套用法 =====================
- # 1. 查看所有监听端口、绑定进程(端口排查标配)
- netstat -lntp
- # 2. 查看所有TCP全网连接
- netstat -antp
- # 3. 查看UDP端口与连接
- netstat -lunp
- # 4. 持续刷新连接状态(实时监控连接波动)
- netstat -antp -c 1
- # 5. 统计TCP连接状态,快速定位连接溢出瓶颈
- netstat -ant | awk '{print $6}' | sort | uniq -c
- # 6. 筛选指定端口、指定进程连接
- netstat -antp | grep 80
- netstat -antp | grep nginx
复制代码
3.5 lsof 精准定位端口/文件占用(解决端口冲突神器)
lsof 可精准查询「哪个进程占用指定端口/文件」,解决端口冲突、端口占用无法启动服务、文件被占用无法删除等高频问题。
- # ===================== lsof 端口/进程排查 =====================
- # 1. 精准查看80端口被哪个进程占用(端口冲突必备)
- lsof -i :80
- # 2. 查看所有网络端口占用情况
- lsof -i
- # 3. 筛选TCP/UDP端口占用
- lsof -i TCP
- lsof -i UDP
- # 4. 查看指定进程所有占用端口与文件
- lsof -p 进程PID
- # 5. 递归查看目录被哪些进程占用(磁盘文件占用排查)
- lsof +D /data/
复制代码
3.6 端口连通性测试(telnet/nc/curl)
端口监听正常不代表外网可通,需通过客户端命令测试端口连通性,排查防火墙、端口放行、链路拦截问题。
- # ===================== 端口连通性全场景测试 =====================
- # 1. telnet 单端口连通测试(简洁快速)
- telnet 192.168.1.100 80 # 测试80端口是否通
- # 连通成功显示Connected,失败显示Connection refused/超时
- # 2. nc 全能端口测试(生产首选,功能最强)
- nc -zv 192.168.1.100 80 # z:仅扫描不传输数据,v:可视化详情
- nc -zv www.baidu.com 443
- # 3. 批量端口扫描(区间扫描,排查端口开放情况)
- nc -zv 192.168.1.100 1-1000
- # 4. curl 业务端口测试(HTTP/HTTPS服务专属)
- curl -I http://192.168.1.100:80 # 仅返回响应头,快速校验服务可用性
- curl https://www.baidu.com
复制代码
3.7 高频端口异常故障排查流程(生产万能)
问题1:服务启动失败,提示端口被占用
-
执行 lsof -i :端口号 定位占用进程PID
-
确认进程无用,执行 kill -9 PID 强制释放端口
-
重启服务,规避端口冲突
问题2:端口监听正常,但外网无法访问
-
核查服务监听地址:是否监听 0.0.0.0(全网段),仅监听127.0.0.1则仅本机可访问
-
检查防火墙端口放行规则
-
测试本机curl访问、跨机telnet访问,区分本地服务问题与网络拦截问题
问题3:服务卡顿、连接超时、并发卡顿
-
执行 ss -ant | awk '{print $1}' | sort | uniq -c 统计连接状态
-
大量 TIME_WAIT:内核端口回收过慢,需优化内核参数
-
大量 CLOSE_WAIT:程序连接泄漏,代码未释放连接,需重启服务、修复代码
3.8 高频致命坑点 & 生产避坑细则
-
监听地址误区:端口监听在 127.0.0.1 仅本机访问,外网无法连通,业务服务必须监听 0.0.0.0 全网段。
-
TIME_WAIT 正常性误区:少量TIME_WAIT为正常机制,单机上万堆积会耗尽临时端口,导致新连接无法建立。
-
CLOSE_WAIT 高危隐患:不存在正常业务场景,100%是程序连接未主动关闭,长期堆积会导致服务连接爆满、卡死宕机。
-
netstat 性能坑:高并发服务器禁止频繁执行netstat,遍历内核链表会占用大量CPU,优先使用ss命令。
-
端口占用残留坑:进程异常被杀后,端口会存在短暂TIME_WAIT残留,无法立即重启服务,需等待系统自动回收或临时换端口调试。
3.9 面试高频核心考点
-
ss和netstat的区别? ss基于内核tcp_diag模块,查询速度快、性能高,适配高并发场景;netstat遍历所有socket,速度慢、资源占用高,仅兼容老旧系统。
-
CLOSE_WAIT产生原因?如何解决? 客户端关闭连接,服务端未调用close释放连接,导致连接悬挂;临时解决重启服务,根治需优化代码连接释放逻辑。
-
TIME_WAIT作用?为什么需要等待? 主动关闭方等待2MSL时间,确保对方接收完所有报文,避免残留数据包干扰新连接,保证TCP连接可靠性。
-
端口监听正常但无法访问的原因?仅监听本地回环地址、防火墙未放行端口、云服务器安全组未开放、路由拦截。
3.10 生产最佳实践总结
-
日常端口、连接排查统一使用ss命令,替代老旧netstat,高效低耗;
-
端口冲突、占用问题固定用 lsof -i :端口 精准定位进程,快速排障;
-
线上服务异常卡顿,优先统计TCP连接状态,区分是连接泄漏还是端口耗尽;
-
所有业务服务必须监听0.0.0.0全网段,禁止仅监听本地回环地址;
-
高并发服务器定期监控TIME_WAIT数量,必要时优化内核端口回收参数。
- ss -lntp # 查看所有TCP监听端口(首选)
- ss -antp # 查看所有已建立TCP连接
- ss -ant | awk '{print $1}' | sort | uniq -c # 统计连接状态
- lsof -i :80 # 精准查询端口占用进程
- nc -zv IP 端口 # 端口连通性测试
- curl -I 域名/IP:端口 # 校验HTTP服务可用性
- telnet IP 端口 # 基础端口通断测试
复制代码- netstat -lntp # 监听端口+进程
- ss -lntp # 替代netstat,更快
- lsof -i :80 # 查看80端口占用
- curl www.xxx.com # 访问http接口
- wget url # 下载文件
- telnet IP 端口 # 端口连通测试
- nc -zv IP 1-1000 # 批量端口扫描
复制代码
4. 防火墙【全系列精讲:firewalld/iptables/ufw|生产配置+规则持久化+避坑面试】
4.1 模块总述
Linux防火墙是服务器网络安全的核心屏障,核心作用为端口放行、IP访问管控、流量拦截、安全防护,90%的外网端口无法访问、服务被恶意扫描、非法IP接入问题均与防火墙规则配置异常相关。当前主流防火墙分为三大体系:CentOS/Rocky主流的firewalld、通用底层iptables、Ubuntu专属ufw,本节全覆盖生产常用配置、持久化规则、启停管控、高危坑点、面试核心考点,适配所有Linux发行版运维场景。
4.2 firewalld 精讲(CentOS7+/Rocky 默认防火墙|生产首选)
firewalld为动态防火墙,支持规则实时生效、无需重启服务,具备区域规则、临时/永久配置、富规则管控特性,配置简单、兼容性强,是企业服务器主流防火墙方案。
4.2.1 基础启停与状态查看
- # 查看防火墙运行状态
- systemctl status firewalld
- # 开机自启/关闭自启
- systemctl enable firewalld
- systemctl disable firewalld
- # 启停重启服务
- systemctl start firewalld
- systemctl stop firewalld
- systemctl restart firewalld
- # 查看防火墙所有规则(核心排查命令)
- firewall-cmd --list-all
- # 仅查看已放行端口
- firewall-cmd --list-ports
- # 查看放行服务
- firewall-cmd --list-services
复制代码
4.2.2 核心端口放行与删除规则(生产高频)
区分临时规则(重启失效)和永久规则(持久化保存),生产业务必须配置永久规则。
- # 1. 永久放行单个端口(TCP协议最常用)
- firewall-cmd --add-port=80/tcp --permanent
- firewall-cmd --add-port=443/tcp --permanent
- firewall-cmd --add-port=22/tcp --permanent
- # 2. 永久放行端口区间(批量开放端口)
- firewall-cmd --add-port=3306-3308/tcp --permanent
- # 3. 删除已放行端口(关闭端口访问权限)
- firewall-cmd --remove-port=80/tcp --permanent
- # 4. 放行系统预设服务(快捷配置,无需写端口)
- firewall-cmd --add-service=http --permanent
- firewall-cmd --add-service=https --permanent
- firewall-cmd --remove-service=http --permanent
- # 重点:所有永久规则配置后,必须重载生效
- firewall-cmd --reload
复制代码
4.2.3 高级富规则(精准IP管控|生产安全加固必备)
富规则支持单IP/网段精准授权、拒绝指定IP访问,解决全局放行端口的安全漏洞,是服务器安全加固核心配置。
- # 1. 仅允许指定IP访问22端口(SSH安全加固,禁止全网访问)
- firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' port protocol='tcp' port='22' accept"
- # 2. 拒绝指定恶意IP访问所有端口
- firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='xxx.xxx.xxx.xxx' reject"
- # 3. 允许指定IP访问3306数据库端口(禁止外网数据库暴露)
- firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='10.0.0.0/8' port protocol='tcp' port='3306' accept"
- # 4. 删除指定富规则
- firewall-cmd --permanent --remove-rich-rule="对应规则内容"
- # 重载规则生效
- firewall-cmd --reload
复制代码
4.2.4 防火墙默认区域与全局配置
- # 查看默认区域
- firewall-cmd --get-default-zone
- # 修改默认区域为public(生产标准)
- firewall-cmd --set-default-zone=public
- # 开启/关闭防火墙(全局拦截)
- firewall-cmd --set-default-zone=block # 拦截所有流量
- firewall-cmd --set-default-zone=public # 恢复常规放行
复制代码
4.3 iptables 精讲(底层通用防火墙|全发行版兼容)
iptables是Linux内核原生防火墙,属于底层规则框架,firewalld本质是iptables的上层封装,功能更强大、适配性更广,适合精细化流量管控、自定义复杂规则场景。
4.3.1 基础查看与启停
- # 安装iptables(新系统默认未装)
- yum install iptables-services -y
- # 关闭firewalld,启用iptables(二选一,避免冲突)
- systemctl stop firewalld && systemctl disable firewalld
- systemctl start iptables && systemctl enable iptables
- # 查看所有规则(默认过滤表)
- iptables -L -n
- # 清空所有规则(调试专用,生产谨慎)
- iptables -F
复制代码
4.3.2 核心放行与拦截规则
- # 1. 放行指定TCP端口
- iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- iptables -A INPUT -p tcp --dport 443 -j ACCEPT
- iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- # 2. 放行指定IP所有访问权限
- iptables -A INPUT -s 192.168.1.100/32 -j ACCEPT
- # 3. 拒绝指定IP访问
- iptables -A INPUT -s 恶意IP -j DROP
- # 4. 放行本地回环网卡(必须配置,否则本地服务异常)
- iptables -A INPUT -i lo -j ACCEPT
- # 5. 允许已建立的连接持续通行(生产必备)
- iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- # 6. 默认拒绝所有未放行端口(全局拦截)
- iptables -P INPUT DROP
复制代码
4.3.3 规则持久化(核心重点)
iptables默认规则临时生效,重启失效,必须手动保存持久化。
- # CentOS/Rocky 保存规则
- service iptables save
- # 规则文件路径(永久存储)
- /etc/sysconfig/iptables
复制代码
4.4 ufw 精讲(Ubuntu/Debian 专属防火墙|简洁高效)
ufw是Ubuntu系统轻量化防火墙,命令简洁、上手简单,专为桌面/服务器轻量化场景设计,是Debian系系统标配防火墙。
4.4.1 基础启停与状态
- # 查看防火墙状态
- ufw status
- # 开启/关闭防火墙
- ufw enable
- ufw disable
- # 重置所有规则(清空配置)
- ufw reset
复制代码
4.4.2 核心端口与IP管控规则
- # 查看防火墙状态
- ufw status
- # 开启/关闭防火墙
- ufw enable
- ufw disable
- # 重置所有规则(清空配置)
- ufw reset
复制代码
4.5 生产高频易错坑点(必避)
-
规则不生效坑:firewalld配置永久规则后,必须执行firewall-cmd --reload重载,否则规则不生效;临时规则重启服务直接失效。
-
双防火墙冲突坑:firewalld和iptables、ufw和iptables不可同时启用,会导致规则冲突、端口拦截异常、服务访问错乱。
-
SSH端口误封致命坑:远程服务器操作防火墙时,务必先放行22端口再重载规则,否则直接断开远程连接,无法重新登录。
-
规则持久化误区:iptables/ufw默认规则临时生效,未手动保存的配置,重启服务器全部丢失。
-
全局拦截风险:设置默认拒绝所有流量后,必须提前放行22、业务端口,否则服务器彻底断连。
-
云服务器双重防护坑:阿里云/腾讯云服务器,防火墙规则需配合云平台安全组,仅配置系统防火墙、未放行安全组端口,依然无法外网访问。
4.6 面试高频核心考点
-
firewalld临时规则和永久规则区别? 临时规则实时生效、重启服务/服务器失效;永久规则写入配置文件,需reload重载,永久保存。
-
firewalld和iptables的关系? iptables是内核底层防火墙框架,firewalld是上层动态封装工具,简化配置、支持动态更新,无需重启服务。
-
为什么端口监听正常但外网无法访问? 大概率是防火墙未放行端口、云服务器安全组未开放、默认策略拦截流量。
-
富规则的作用? 实现精准IP网段管控,区别全局端口放行,仅授权指定IP访问敏感端口(3306、22),提升服务器安全性。
4.7 生产最佳实践总结
-
CentOS/Rocky系列统一使用firewalld,配置简单、动态生效、稳定性强,优先放弃原生iptables复杂配置;
-
所有远程服务器优先加固SSH安全,仅放行内网固定IP访问22端口,禁止全网开放;
-
数据库、Redis等敏感服务端口,禁止全局放行,必须通过防火墙富规则/IP白名单管控;
-
所有防火墙规则配置后,立即测试业务连通性,避免重载规则导致服务断连;
-
云服务器采用「系统防火墙+云安全组」双重防护,最小化开放端口,杜绝恶意扫描攻击。
- # ========== firewalld(CentOS/Rocky) ==========
- firewall-cmd --list-all # 查看所有规则
- firewall-cmd --add-port=80/tcp --permanent # 永久放行端口
- firewall-cmd --add-service=http --permanent # 放行预设服务
- firewall-cmd --permanent --add-rich-rule=xxx # 配置IP白名单
- firewall-cmd --reload # 重载规则生效
- # ========== iptables(通用底层) ==========
- iptables -L -n # 查看规则
- iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 放行端口
- service iptables save # 持久化规则
- # ========== ufw(Ubuntu/Debian) ==========
- ufw status # 查看状态
- ufw allow 80/tcp # 放行端口
- ufw allow from 192.168.1.0/24 # 放行网段
复制代码
- # CentOS7+/Rocky firewalld
- firewall-cmd --list-ports
- firewall-cmd --add-port=80/tcp --permanent
- # Ubuntu ufw
- ufw allow 22
- # iptables底层
- iptables -L -n
复制代码
七、磁盘、挂载、压缩解压
1. 磁盘分区挂载【生产完整版+分区实操+永久挂载+故障排错+面试精讲】
1.1 模块总述
磁盘分区、格式化与挂载是Linux服务器磁盘扩容、数据存储、分区管理的核心实操能力,是运维日常磁盘爆满排查、新磁盘挂载、分区扩容、数据迁移的必备技能。Linux 所有磁盘数据必须通过挂载点访问,无挂载的裸磁盘无法读写使用。本节完整补全磁盘查看、分区创建、格式化、临时/永久挂载、UUID挂载、挂载卸载避坑、开机挂载故障、面试核心考点,全覆盖生产实操场景。
1.2 磁盘硬件与使用状态查看(排查刚需)
实操磁盘操作前,必须先核查服务器磁盘列表、分区状态、磁盘使用率、挂载情况,避免误操作系统盘。
- # ========== 1. 整体磁盘使用率排查(日常巡检首选) ==========
- df -h # 人性化显示所有分区挂载、使用率、剩余空间、挂载点
- df -i # 查看分区inode使用率(inode爆满导致磁盘有空间无法写入)
- df -Th # 显示分区文件系统类型(xfs/ext4)+ 使用率
- # ========== 2. 文件夹大小排查(磁盘爆满定位) ==========
- du -sh * # 查看当前目录所有文件夹/文件总大小,快速定位大文件
- du -h --max-depth=1 # 只统计一级目录,简洁高效
- du -sh /var/log/ # 精准查看指定目录占用大小
- # ========== 3. 磁盘硬件与分区列表查看 ==========
- lsblk # 简洁查看所有磁盘、分区、挂载点、磁盘大小(新手首选)
- fdisk -l # 详细列出所有磁盘设备、分区类型、扇区、大小、分区信息
- blkid # 查看所有分区UUID、文件系统类型(永久挂载核心参数)
- # 磁盘设备命名规范
- # /dev/sda 第一块磁盘、/dev/sdb 第二块磁盘
- # /dev/sda1 第一磁盘第一个分区、sda2第二个分区
复制代码
1.3 磁盘分区创建(fdisk实操,MBR分区)
新磁盘无分区、无文件系统,需先创建分区才能格式化挂载,fdisk适用于小于2TB磁盘、MBR分区格式,适配绝大多数生产服务器。
- # 1. 进入磁盘分区编辑界面(以/dev/sdb新磁盘为例)
- fdisk /dev/sdb
- # 2. 分区交互操作指令(核心必背)
- n # 新建分区
- p # 选择主分区(默认首选)
- 1 # 分区编号1
- 回车默认 # 起始扇区默认
- 回车默认 # 结束扇区默认(占用整块磁盘)
- w # 保存分区并退出
- # 3. 刷新分区表(无需重启生效)
- partprobe /dev/sdb
- # 4. 核查新分区是否创建成功
- lsblk /dev/sdb
复制代码
1.4 磁盘格式化(文件系统创建)
分区创建完成后,需格式化生成文件系统,Linux主流文件系统为xfs(CentOS7+默认)、ext4(通用稳定),生产按需选择。
- # ========== 1. xfs格式化(CentOS/Rocky默认,大文件高性能) ==========
- mkfs.xfs /dev/sdb1
- # ========== 2. ext4格式化(通用稳定,兼容性最强) ==========
- mkfs.ext4 /dev/sdb1
- # ========== 3. 格式化核心参数 ==========
- -f # 强制格式化(覆盖原有文件系统,谨慎使用)
- -L 磁盘名 # 自定义磁盘标签,便于识别
- # 格式化后核查文件系统类型
- blkid /dev/sdb1
复制代码
1.5 临时挂载与卸载(临时生效,重启失效)
临时挂载适用于临时数据存储、磁盘调试、临时扩容场景,服务器重启后挂载失效。
- # 1. 创建挂载目录(挂载点必须是空目录,专属磁盘挂载)
- mkdir -p /data
- # 2. 临时挂载分区
- mount /dev/sdb1 /data
- # 3. 核查挂载是否成功
- df -h
- lsblk
- # 4. 磁盘卸载(迁移/下线磁盘必备)
- umount /data # 通过挂载点卸载(推荐,不易出错)
- umount /dev/sdb1 # 通过分区设备卸载
- # 卸载报错解决:设备忙,先查询占用进程并结束
- fuser -m /data
- kill -9 占用PID
复制代码
1.6 永久挂载配置(/etc/fstab,生产核心)
生产业务磁盘必须配置永久挂载,避免重启服务器后挂载丢失、业务数据异常,优先使用UUID挂载,规避磁盘盘符错乱问题。
1.6.1 fstab文件格式详解
文件路径:/etc/fstab,开机自动挂载配置文件,格式:设备/UUID 挂载点 文件系统 挂载参数 备份标记 自检标记
- # 第一步:获取分区UUID(永久挂载唯一标识)
- blkid /dev/sdb1
- # 第二步:编辑fstab配置文件
- vim /etc/fstab
- # 两种挂载写法(生产优先UUID写法)
- # 写法1:UUID永久挂载(推荐,盘符变更不影响)
- UUID=xxxx-xxxx-xxxx-xxxx /data xfs defaults 0 0
- # 写法2:设备路径挂载(不推荐,多磁盘易盘符错乱)
- /dev/sdb1 /data xfs defaults 0 0
- # 字段参数详解
- # defaults:默认挂载参数(读写、自动挂载、权限兼容)
- # 第一个0:不备份磁盘数据
- # 第二个0:开机不执行磁盘自检(生产默认配置)
- # 第三步:加载fstab配置,测试挂载(关键!避免开机崩盘)
- mount -a
- # 第四步:核查永久挂载生效
- df -h
复制代码
1.7 核心挂载参数与进阶配置
- # 常用进阶挂载参数(写入fstab替换defaults)
- rw # 读写权限(默认)
- ro # 只读挂载(数据防篡改,备份磁盘专用)
- noauto # 开机不自动挂载,手动mount生效
- exec # 允许执行二进制程序
- noexec # 禁止执行程序(数据盘安全加固)
- # 示例:只读永久挂载
- UUID=xxx /backup xfs ro 0 0
复制代码
1.8 高频故障排查与生产致命坑点
-
fstab语法错误开机崩盘坑:修改/etc/fstab后必须执行mount -a校验,语法错误会导致服务器开机无法进入系统、进入急救模式。
-
挂载点非空目录坑:挂载目录存在原有文件,挂载后原有文件会临时隐藏,卸载磁盘后恢复,生产禁止在有数据目录直接挂载。
-
磁盘盘符错乱坑:服务器增减磁盘会导致sda/sdb盘符变更,永久挂载严禁使用设备路径,必须用UUID。
-
inode爆满误区:磁盘空间充足但无法写入,大概率是inode耗尽,通过df -i排查,多为大量小文件、日志碎片导致。
-
卸载设备忙报错:目录被进程占用、终端处于挂载目录内,需退出目录、结束占用进程后再卸载。
-
重复挂载隐患:同一分区重复挂载会导致数据错乱、文件丢失,挂载前先核查挂载状态。
1.9 面试高频核心考点
-
UUID和设备路径挂载的区别? 设备路径(/dev/sdb1)会随磁盘增减变更,易导致挂载失效;UUID是分区唯一固定标识,不受磁盘顺序影响,稳定性更强,生产首选。
-
fstab两个0的作用? 第一个0:dump备份开关,关闭备份;第二个0:fsck磁盘自检开关,业务盘无需开机自检,避免开机卡顿。
-
磁盘空间充足但无法写入的原因? ①inode耗尽;②目录权限不足;③磁盘只读挂载;④文件系统损坏。
-
mount -a的作用? 自动加载/etc/fstab所有挂载配置,校验语法错误、生效新挂载,是修改fstab后的必执行命令。
-
临时挂载和永久挂载区别? 临时挂载重启失效,适用于临时调试;永久挂载写入fstab,开机自动生效,适配生产业务磁盘。
1.10 生产最佳实践总结
-
所有业务数据磁盘统一采用UUID+defaults参数永久挂载,杜绝盘符错乱导致的挂载失效;
-
修改fstab后强制执行mount -a校验,规避语法错误引发开机故障;
-
数据盘、备份盘单独分区挂载,禁止数据存储在系统盘(/),避免系统盘爆满宕机;
-
只读数据盘配置ro只读挂载参数,防止误删、篡改数据,提升数据安全性;
-
磁盘巡检同时核查df -h磁盘空间与df -iinode使用率,双重规避磁盘写入异常。
1.11 磁盘挂载完整生产流程(标准实操)
-
lsblk/fdisk -l 核查新磁盘设备;
-
fdisk 创建磁盘分区,partprobe 刷新分区;
-
mkfs.xfs/mkfs.ext4 格式化分区;
-
创建空挂载目录,mount 临时挂载测试;
-
blkid 获取分区UUID,写入/etc/fstab永久配置;
-
mount -a 校验配置、生效挂载;
-
df -h 核查挂载成功,完成磁盘上线。
- df -h # 磁盘分区使用
- du -sh * # 当前目录各文件夹大小
- du -h --max-depth=1
- fdisk -l # 磁盘分区列表
- mkfs.xfs /dev/sdb1 # 格式化分区
- mount /dev/sdb1 /data
- umount /data
- blkid # 查看磁盘UUID
- /etc/fstab # 开机自动挂载配置文件
复制代码
2. 压缩解压全类型【生产完整版+全格式覆盖+参数精讲+避坑】
2.1 模块总述
Linux 日常运维、日志归档、文件迁移、备份场景中,压缩解压是高频刚需操作,系统主流压缩格式包含 tar.gz、tar.bz2、tar.xz、zip、gz、bz2、xz、7z 等。不同格式压缩率、压缩速度、兼容性差异极大,本节全覆盖所有生产常用格式,补全精准参数、解压规则、批量操作、易错坑点、场景选型,适配99%线上文件压缩归档场景。
2.2 核心前置参数(tar命令通用必背)
tar 是Linux打包压缩核心命令,所有打包操作通用核心参数,无系统兼容性差异:
-
c:创建新压缩包(压缩必备)
-
x:解压释放压缩包(解压必备)
-
v:可视化过程,显示压缩/解压文件明细(调试常用)
-
f:指定压缩包文件名(必须放在所有参数最后)
-
z:调用gzip算法(.gz格式)
-
j:调用bzip2算法(.bz2格式)
-
J:调用xz算法(.xz格式)
-
p:保留文件原有权限、属性、时间戳(生产备份必备)
-
C:指定解压目标目录(核心高频参数)
-
--exclude:压缩时排除指定文件/目录(批量归档刚需)
2.3 主流打包压缩格式(目录/多文件专用,生产首选)
tar 系列支持先打包、后压缩,可处理多文件、目录,是服务器归档备份标准格式。
- # ===================== 1. tar.gz 格式【全网通用、速度快、兼容性最强】 =====================
- # 压缩:打包并压缩目录/文件
- tar zcvf test.tar.gz test_dir/ # 压缩整个目录
- tar zcvf file.tar.gz file1.txt file2.txt # 压缩多个单独文件
- tar zcvf bak.tar.gz /data/ --exclude=*.log # 压缩并排除所有日志文件
- # 解压:默认解压到当前目录
- tar zxvf test.tar.gz
- # 解压到指定目录(生产高频,避免混乱)
- tar zxvf test.tar.gz -C /tmp/
- # 解压并保留原文件权限属性
- tar zxvp test.tar.gz -C /data/
- # ===================== 2. tar.bz2 格式【压缩率更高、速度稍慢】 =====================
- # 适合大文件归档,压缩体积比tar.gz更小
- tar jcvf test.tar.bz2 test_dir/ # 压缩
- tar jxvf test.tar.bz2 -C /backup/ # 解压到指定目录
- # ===================== 3. tar.xz 格式【超高压缩率、超大文件首选】 =====================
- # 压缩率最高,耗时最长,适合静态大文件、长期备份归档
- tar Jcvf big_file.tar.xz big_dir/
- tar Jxvf big_file.tar.xz
- # ===================== 4. 查看压缩包内容(不解压预览,避免浪费磁盘) =====================
- tar ztvf test.tar.gz # 查看gz压缩包文件列表
- tar jtvf test.tar.bz2 # 查看bz2压缩包文件列表
- tar Jtvf test.tar.xz # 查看xz压缩包文件列表
复制代码
2.4 单文件压缩格式(无打包,仅压缩单个文件)
gz/bz2/xz 仅支持单个文件压缩,不支持目录,压缩后原文件默认消失,生成对应压缩包。
- # ===================== 1. gzip / .gz 单文件压缩 =====================
- gzip test.txt # 压缩:生成test.txt.gz,原文件删除
- gzip -c test.txt > test.txt.gz # 保留原文件压缩(核心实用技巧)
- gunzip test.txt.gz # 解压.gz文件,解压后压缩包删除
- # ===================== 2. bzip2 / .bz2 单文件压缩 =====================
- bzip2 test.txt # 压缩生成test.txt.bz2
- bunzip2 test.txt.bz2 # 解压bz2文件
- # ===================== 3. xz / .xz 单文件压缩 =====================
- xz test.txt # 超高压缩率压缩
- unxz test.txt.xz # 解压xz文件
复制代码
2.5 zip/unzip 格式【跨平台兼容、Windows互通首选】
zip 是跨系统通用格式,Windows/Linux/Mac 全兼容,支持目录、多文件,解压后不丢失权限,适合跨平台文件传输。
- # 需提前安装:yum install zip unzip -y / apt install zip unzip -y
- # 1. 压缩操作
- zip test.zip file1.txt file2.txt # 压缩多个文件
- zip -r dir.zip test_dir/ # 递归压缩整个目录(必须加-r)
- zip -r bak.zip /data/ -x "*.log" # 压缩目录并排除指定文件
- # 2. 解压操作
- unzip test.zip # 解压到当前目录
- unzip dir.zip -d /tmp/ # 解压到指定目录(-d 指定路径)
- unzip -l test.zip # 不解压,仅预览压缩包内容
- unzip -o test.zip # 强制覆盖解压,不交互式询问
- # 3. 解压乱码解决(Windows压缩包Linux解压中文乱码)
- unzip -O GBK test.zip
复制代码
2.6 7z 超高压缩率格式【超大文件专属】
7z 格式压缩率远超所有常规格式,适合超大文件、海量小文件归档,需手动安装工具。
- # 安装命令:yum install p7zip -y / apt install p7zip-full -y
- # 压缩
- 7z a test.7z test_dir/ file.txt # a:添加文件到压缩包
- # 解压
- 7z x test.7z # 完整解压,保留目录结构
- # 预览内容
- 7z l test.7z
复制代码
2.7 格式选型标准(生产规范)
-
日常快速压缩/日志归档:优先 tar.gz,速度快、全平台兼容、无解压门槛
-
大文件长期备份:选择 tar.xz,压缩率最高,节省磁盘空间
-
跨Windows传输文件:统一使用 zip,避免格式不兼容、乱码问题
-
超大容量文件归档:使用 7z,极致压缩率,减少存储占用
-
单临时文件压缩:使用 gzip,操作简洁、速度最快
2.8 高频易错坑点与生产避坑
-
tar参数顺序坑:f 参数必须放在最后,tar zcvf test.tar.gz 正确,tar zcvftest.tar.gz 报错。
-
单文件格式误区:gzip/bzip2/xz 不支持目录压缩,压缩目录会报错,目录必须用tar系列命令。
-
解压覆盖风险:解压默认覆盖同名文件,生产重要文件解压前先备份,或用交互式确认。
-
zip目录压缩必加-r:不加-r仅压缩目录空壳,不会递归压缩目录内文件,导致压缩包为空。
-
解压路径混乱坑:禁止直接在根目录解压压缩包,极易覆盖系统文件,务必用 -C 指定解压目录。
-
原文件丢失坑:gzip等单文件压缩默认删除原文件,需要保留原文件必须加 -c 参数。
2.9 生产高频万能组合命令
- # 1. 日志归档标准命令(排除无用日志,压缩备份)
- tar zcvf log_bak_$(date +%Y%m%d).tar.gz /var/log/ --exclude=*.tmp --exclude=old_log/
- # 2. 解压到指定目录并覆盖旧文件
- tar zxvf app.tar.gz -C /usr/local/
- # 3. 批量解压当前目录所有tar.gz文件
- for i in *.tar.gz;do tar zxvf $i;done
- # 4. 保留原文件单文件压缩
- gzip -c data.txt > data.txt.gz
- # 5. 跨平台安全解压(解决中文乱码)
- unzip -O GBK windows_file.zip -d ./file_bak/
复制代码
- # tar(最常用)
- tar zcvf 打包.tar.gz 目录 # 压缩gz
- tar zxvf 打包.tar.gz # 解压gz
- tar jcvf 打包.tar.bz2 # bz2压缩
- tar Jcvf 打包.tar.xz # xz压缩
- # zip/unzip
- zip -r test.zip dir
- unzip test.zip
- # gz/bz2单文件
- gzip file
- gunzip file.gz
复制代码
八、软件包管理(分发行版|完整版生产体系+避坑+面试精讲)
软件包管理是Linux软件安装、升级、卸载、溯源、依赖修复的核心能力,主流分为RHEL/CentOS/Rocky系(yum/dnf/rpm)和Debian/Ubuntu系(apt/dpkg)两大体系。生产运维必须区分发行版特性,掌握源配置、依赖处理、离线安装、故障排错、版本锁定等核心场景,规避依赖冲突、源失效、软件残留等高频问题。
1. RHEL/CentOS/Rocky 软件管理(yum/dnf + rpm)
CentOS7及以下默认使用yum包管理器,CentOS8+/Rocky9+默认使用dnf(yum升级版,命令完全兼容,性能更强、依赖解析更精准),rpm为底层原生包工具,负责本地包解析、安装校验。
1.1 yum/dnf 在线包管理(生产主力)
支持在线下载、自动解析依赖、批量管理软件,是线上服务器软件安装首选,dnf优化了yum依赖卡死、解析缓慢的问题。
- # ========== 1. 软件安装(核心高频) ==========
- yum install nginx -y # 在线安装软件,自动解决依赖
- dnf install mysql-server -y # dnf等价yum,新版系统首选
- yum install nginx=1.20.1 -y # 指定版本安装(规避新版本兼容问题)
- yum groupinstall "Development Tools" -y # 安装开发工具组(gcc/make等编译工具)
- # ========== 2. 软件卸载(安全卸载) ==========
- yum remove nginx -y # 卸载软件,保留依赖文件(安全,不影响系统依赖)
- yum erase nginx -y # 彻底卸载软件+移除无用依赖(干净卸载)
- # ========== 3. 软件查询与检索 ==========
- yum list # 列出所有可安装/已安装软件包
- yum list installed # 仅查看当前系统已安装所有软件
- yum list updates # 查看可升级的软件包
- yum search docker # 模糊检索软件包名(未知精准包名必备)
- yum info nginx # 查看软件详细信息(版本、用途、依赖、仓库来源)
- # ========== 4. 软件升级与版本管理 ==========
- yum update -y # 全局更新所有可升级软件(谨慎生产执行,避免版本兼容问题)
- yum update nginx -y # 单独升级指定软件
- yum check-update # 检查可更新软件,不执行升级
- # ========== 5. 仓库缓存管理 ==========
- yum clean all # 清空本地yum缓存(源更新、缓存异常必执行)
- yum makecache # 重新生成仓库缓存,加速软件检索
- # ========== 6. 依赖修复与故障处理 ==========
- yum deplist nginx # 查看软件所有依赖包
- yum repolist # 查看当前生效的软件仓库数量与状态
- yum check # 检测系统软件依赖是否破损、冲突
- # ========== 7. 软件版本锁定(生产核心避坑) ==========
- yum install yum-plugin-versionlock -y # 安装版本锁定插件
- yum versionlock nginx # 锁定nginx当前版本,禁止自动升级
- yum versionlock delete nginx # 解锁版本,允许升级
- yum versionlock list # 查看所有锁定版本软件
复制代码
1.2 rpm 底层本地包管理(离线安装+包溯源)
rpm是RHEL系底层包工具,无需联网,仅处理本地rpm安装包,不自动解决依赖,适合离线服务器安装、软件版本溯源、破损包修复场景。
- # ========== 1. 本地离线安装 ==========
- rpm -ivh xxx.rpm # 安装本地rpm包(i安装 v可视化 h进度条)
- rpm -ivh --nodeps xxx.rpm # 强制忽略依赖安装(生产慎用,易导致软件无法启动)
- rpm -ivh --force xxx.rpm # 强制覆盖安装(版本降级、重装破损包使用)
- # ========== 2. 软件卸载 ==========
- rpm -e nginx # 卸载指定软件(仅包名,无需后缀)
- rpm -e --nodeps nginx # 强制卸载,忽略依赖关联(高危,慎操作)
- # ========== 3. 软件查询与溯源(排错必备) ==========
- rpm -qa # 查询系统所有已安装rpm包
- rpm -qa | grep mysql # 精准检索指定软件是否安装
- rpm -ql nginx # 查看软件安装目录、所有生成文件(配置/二进制/日志)
- rpm -qi nginx # 查看软件详细信息(版本、发布时间、开发者)
- rpm -qc nginx # 仅查看软件配置文件路径(修改配置必备)
- rpm -qd nginx # 查看软件帮助文档、手册路径
- rpm -qf /usr/sbin/nginx # 根据文件/命令反查所属软件包(未知文件溯源核心)
- # ========== 4. 包校验与修复 ==========
- rpm -V nginx # 校验软件文件完整性,检测是否被篡改、文件丢失
- rpm --rebuilddb # 重建rpm数据库(包数据库破损、查询异常修复)
复制代码
1.3 YUM源配置与替换(生产刚需)
yum默认官方源网速慢、部分包缺失,生产需替换国内阿里云、清华源,源文件统一存放路径:/etc/yum.repos.d/,后缀.repo为有效仓库文件。
- # 1. 备份原有默认源
- mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
- # 2. 下载阿里云CentOS官方源(CentOS7示例)
- curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
- # 3. 下载epel扩展源(补充nginx/redis/mysql等第三方软件包)
- yum install epel-release -y
- # 4. 刷新缓存生效
- yum clean all && yum makecache
- # 5. 查看生效仓库
- yum repolist enabled
复制代码
1.4 高频易错坑点与生产避坑
-
rpm无依赖自动修复坑:rpm安装仅本地生效,缺失依赖直接报错,离线安装需提前下载所有依赖包,优先用yum/dnf本地安装(yum localinstall xxx.rpm自动解依赖)。
-
yum update全局升级风险:生产服务器禁止随意执行yum update,内核、系统组件升级可能导致服务兼容失效、开机异常,仅单独升级业务软件。
-
源失效缓存残留坑:更换yum源后必须清空旧缓存,否则会读取失效源配置,导致下载失败、包找不到。
-
--nodeps强制操作高危坑:强制忽略依赖安装/卸载,易导致系统依赖破损、软件启动失败、系统异常,仅紧急排错临时使用。
-
软件残留坑:yum remove仅删主程序,残留配置文件、日志文件,彻底清理需用yum erase或手动清理残留目录。
2. Debian/Ubuntu 软件管理(apt + dpkg)
Ubuntu/Debian系默认使用apt作为主流在线包管理器(整合apt-get/apt-cache功能,命令更简洁),dpkg为底层本地包工具,对应RHEL系rpm,适配Debian全系服务器、桌面系统。
2.1 apt 在线包管理(生产首选)
- # ========== 1. 仓库缓存更新(前置必备) ==========
- apt update # 更新软件仓库索引缓存(不升级软件,安装前必执行)
- apt upgrade -y # 升级所有可更新软件(安全升级,不卸载依赖)
- apt full-upgrade -y # 完整升级,可增减依赖(新版适配升级,生产谨慎)
- # ========== 2. 软件安装 ==========
- apt install nginx -y # 在线安装软件,自动解析依赖
- apt install nginx=1.18.0-0ubuntu1.3 -y # 指定版本安装
- apt install -y gcc make git # 批量安装多个软件
- # ========== 3. 软件卸载与清理 ==========
- apt remove nginx -y # 卸载软件,保留配置文件
- apt purge nginx -y # 彻底卸载+删除所有配置、残留文件(干净清理)
- apt autoremove -y # 自动清理系统无用冗余依赖(释放磁盘空间)
- # ========== 4. 软件查询与检索 ==========
- apt list # 列出所有软件包
- apt list --installed # 查看已安装软件
- apt list --upgradable # 查看可升级软件
- apt search mysql # 检索软件包
- apt show nginx # 查看软件详细信息、版本、依赖
- # ========== 5. 故障修复 ==========
- apt -f install # 强制修复破损依赖、解决依赖缺失报错
- apt clean # 清理apt缓存包
- apt autoclean # 清理过期缓存安装包
复制代码
2.2 dpkg 底层本地包管理(离线安装)
dpkg是Ubuntu底层包工具,用于本地.deb格式安装包处理,同样不自动解析依赖,适合离线服务器软件部署。
- # ========== 1. 离线安装deb包 ==========
- dpkg -i xxx.deb # 安装本地deb安装包
- # 依赖报错后执行修复:apt -f install
- # ========== 2. 软件卸载 ==========
- dpkg -r nginx # 卸载软件,保留配置
- dpkg -P nginx # 彻底卸载+清空配置
- # ========== 3. 软件查询溯源 ==========
- dpkg -l # 列出所有已安装软件
- dpkg -l | grep docker # 检索指定软件
- dpkg -L nginx # 查看软件所有安装文件、目录
- dpkg -s nginx # 查看软件状态、版本信息
- dpkg -S /usr/bin/nginx # 根据文件反查所属软件包
复制代码
2.3 Ubuntu源配置(国内镜像加速)
apt源配置文件路径:/etc/apt/sources.list,生产替换清华/阿里源提升下载速度。
- # 1. 备份原有源文件
- cp /etc/apt/sources.list /etc/apt/sources.list.bak
- # 2. 写入阿里云Ubuntu源(20.04示例)
- echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
- deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
- deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse" > /etc/apt/sources.list
- # 3. 更新缓存生效
- apt update
复制代码
2.4 Ubuntu体系高频避坑要点
-
apt update与upgrade区别:update仅更新仓库索引,不升级软件;upgrade执行软件升级,日常安装软件前必须先update。
-
dpkg依赖报错必修复:dpkg离线安装缺失依赖时,必须执行apt -f install自动补全依赖,否则软件处于破损状态。
-
残留依赖堆积坑:Ubuntu长期操作会产生大量无用依赖,需定期执行apt autoremove清理,避免磁盘占用过高。
-
purge与remove区别:remove仅删除程序主体,purge清空所有配置日志,卸载废弃软件优先用purge彻底清理。
3. 两大发行版包管理核心对比(面试高频)
-
包格式差异:RHEL系专属 .rpm 包,Ubuntu系专属 .deb 包,互不兼容。
-
在线工具:RHEL用yum/dnf,Ubuntu用apt,均支持自动依赖解析。
-
底层工具:RHEL用rpm,Ubuntu用dpkg,均为本地离线工具、无自动依赖修复。
-
仓库路径:YUM源 /etc/yum.repos.d/,APT源 /etc/apt/sources.list。
-
清理命令:YUM用clean all,APT用clean/autoclean。
4. 生产通用最佳实践
-
线上服务器统一使用在线包管理器(yum/apt)安装软件,自动处理依赖,规避底层包安装报错。
-
生产环境禁止随意全局升级系统软件,仅针对性升级业务组件,锁定稳定版本。
-
离线服务器优先使用「在线机下载依赖包+本地批量安装」,不强制忽略依赖。
-
软件卸载优先彻底清理残留文件,避免冗余配置、无效依赖堆积引发故障。
-
所有服务器默认替换国内镜像源,提升下载速度、解决官方源超时、包缺失问题。
九、系统信息、日志、时间
1. 硬件系统信息【完整版|全硬件检测|生产排查+硬件参数溯源】
1.1 模块总述
硬件系统信息查询是服务器硬件巡检、故障排查、配置核验、性能评估的核心能力。运维日常需精准获取CPU、内存、磁盘、网卡、主板、BIOS、设备总线、硬件温度等全维度信息,区分系统虚拟信息与物理硬件信息,规避云服务器、虚拟机硬件识别误区,适配物理机、虚拟机、云服务器全场景。本节补全所有生产高频硬件查询命令、核心参数、解读要点、排查场景与避坑细则。
1.2 系统内核与发行版基础信息
用于快速核验系统版本、内核架构、系统运行时长,是硬件适配、软件兼容排查的前置操作。
- # 1. 内核与架构信息
- uname -r # 查看内核版本(软件兼容适配核心)
- uname -a # 完整系统信息:内核、架构、系统时间、主机名
- uname -m # 查看系统架构(x86_64/arm64,软件安装适配必备)
- # 2. 发行版详细版本
- cat /etc/os-release # 完整系统发行版、版本号、ID、适配平台
- lsb_release -a # 简洁查看系统版本(通用全发行版)
- # 3. 系统运行时长与负载
- uptime # 查看系统开机时长、1/5/15分钟系统负载
复制代码
1.3 CPU硬件全维度查询(核心算力核验)
精准查看CPU物理参数、核心数、线程数、主频、型号、缓存,区分物理核、逻辑核,排查算力不足、CPU配置异常问题。
- # 1. CPU完整硬件信息(生产核心)
- lscpu # 结构化展示CPU所有参数,可读性极强
- # 关键参数解读(面试/运维必懂)
- # CPU(s):总逻辑线程数
- # Core(s) per socket:单颗CPU物理核心数
- # Socket(s):物理CPU颗数
- # Thread(s) per core:单核心线程数(超线程开启为2,关闭为1)
- # CPU MHz:CPU基准主频
- # L1/L2/L3 cache:各级缓存大小
- # 2. 简洁查看CPU型号
- cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
- # 3. 统计物理CPU总数、物理核心数、逻辑核心数
- cat /proc/cpuinfo | grep physical | uniq -c # 物理CPU颗数
- cat /proc/cpuinfo | grep core | uniq -c # 物理核心总数
- nproc # 快速查看逻辑核心数(进程配置核心适配)
复制代码
1.4 内存硬件精准查询(容量/频率/插槽)
区别系统虚拟内存与物理内存,可查询内存硬件参数、插槽占用、剩余插槽、内存频率,适配服务器内存扩容、内存故障排查场景。
- # 1. 内存整体使用与硬件概况
- lsmem # 结构化展示物理内存、内存分段、可用内存
- free -h # 人性化展示内存、缓存、交换分区使用情况
- # 2. 精准物理内存硬件信息(需安装dmidecode)
- yum install dmidecode -y || apt install dmidecode -y
- dmidecode -t memory # 查看内存型号、频率、容量、插槽、厂商
- # 3. 简洁统计总物理内存
- cat /proc/meminfo | grep MemTotal
- # 4. 交换分区查询
- swapon -s # 查看交换分区大小、使用状态、挂载设备
复制代码
1.5 磁盘硬件与设备信息(含分区/型号/转速)
覆盖磁盘物理设备、型号、容量、接口类型、读写状态,区别虚拟磁盘与物理磁盘,适配磁盘扩容、坏道排查、设备识别异常场景。
- # 1. 磁盘设备整体列表(简洁直观)
- lsblk # 查看所有磁盘、分区、挂载点、磁盘大小、类型
- # 2. 详细磁盘硬件信息(型号、厂商、序列号)
- fdisk -l # 全量磁盘分区、设备、容量、扇区信息
- blkid # 查看分区UUID、文件系统、设备类型
- # 3. 磁盘硬件精准参数(需安装hdparm)
- yum install hdparm -y || apt install hdparm -y
- hdparm -i /dev/sda # 查看磁盘型号、序列号、接口、转速、缓存
- # 4. 磁盘IO读写性能检测
- hdparm -Tt /dev/sda # 检测磁盘缓存读取、磁盘实际读取速度
复制代码
1.6 网卡与网络硬件信息
查询网卡物理设备、型号、MAC地址、带宽、状态,排查网卡异常、多网卡识别、带宽适配问题。
- # 1. 网卡设备全量信息
- lspci | grep -i net # 查看网卡型号、厂商、总线编号
- # 2. 网卡基础状态与MAC地址
- ip addr # 查看所有网卡IP、MAC、网卡状态
- ifconfig -a # 查看所有网卡(含未启用网卡)
- # 3. 网卡带宽与硬件参数
- ethtool eth0 # 查看网卡速率、双工模式、硬件参数、链路状态
复制代码
1.7 主板、BIOS、总线硬件信息
查询服务器主板型号、BIOS版本、出厂信息、设备总线,适配硬件年检、服务器溯源、BIOS升级场景。
- # 主板、BIOS、整机硬件信息
- dmidecode -t system # 查看主板型号、服务器厂商、出厂序列号
- dmidecode -t bios # 查看BIOS版本、发布时间、固件信息
- lspci # 查看所有PCI总线设备(显卡、声卡、外设硬件)
复制代码
1.8 硬件温度与功耗监控(物理机专属)
物理服务器专属,监控CPU、主板、硬盘温度,排查硬件过热、降频、死机故障,虚拟机/云服务器无硬件温度数据。
- # 安装温度监控工具
- yum install lm-sensors -y || apt install lm-sensors -y
- sensors # 查看CPU、主板、硬盘实时温度、风扇转速
复制代码
1.9 高频易错坑点与场景适配
-
虚拟机硬件误区:云服务器/虚拟机的CPU、内存、磁盘均为虚拟化硬件,dmidecode、sensors 无法查询真实物理硬件参数,仅物理机生效。
-
超线程识别误区:逻辑核心数=物理核心数×线程数,超线程开启后逻辑核翻倍,算力并非翻倍,配置进程并发需按需适配。
-
内存信息区分:free -h 查看系统使用内存,lsmem/dmidecode查看物理硬件内存,扩容需以物理插槽信息为准。
-
磁盘设备命名规则:物理机多为sda/sdb,虚拟机可能为vda/vdb,不可固化设备名称,优先用UUID挂载。
-
网卡链路排查坑:网卡IP正常但无法联网,需用ethtool 排查硬件链路、带宽模式是否匹配交换机配置。
1.10 生产硬件巡检标准命令组合
- # 服务器硬件一键巡检组合
- echo "=== 系统版本 ===" && cat /etc/os-release
- echo "=== CPU信息 ===" && lscpu | grep -E "CPU\(s\)|Core|MHz"
- echo "=== 内存信息 ===" && free -h && lsmem
- echo "=== 磁盘信息 ===" && lsblk && df -h
- echo "=== 网卡信息 ===" && ip addr && ethtool eth0
- echo "=== 系统运行状态 ===" && uptime
复制代码
- uname -r # 内核版本
- uname -a # 完整系统信息
- cat /etc/os-release # 发行版版本
- lscpu # CPU信息
- lsmem # 内存硬件
- lsblk # 磁盘硬件
- lspci # PCI硬件
复制代码
2. 时间与时区【生产完整版+时区配置+时间同步+故障避坑+面试精讲】
2.1 模块总述
Linux服务器时间与时区是日志排查、定时任务、业务数据统计、集群服务同步的核心基础。时间错乱、时区不一致会导致日志时间错位、crontab定时任务失效、集群节点同步失败、业务订单时间异常、数据对账失误等线上故障。本节完整补全时区查看/切换、系统时间校准、硬件时间同步、NTP网络时间校准、定时同步、生产规范与高频坑点,全覆盖CentOS、Ubuntu全系系统。
2.2 基础时间与时区查看命令
日常运维首选简洁查询指令,快速核验服务器时间、时区、同步状态,是时间故障排查的第一步。
- # 1. 查看系统当前时间、日期、时区
- date # 输出完整系统时间、时区、星期
- date +"%Y-%m-%d %H:%M:%S" # 自定义格式化输出标准时间(日志、脚本刚需)
- date +%Y # 单独获取年份
- date +%m # 单独获取月份
- date +%d # 单独获取日期
- date +%H:%M:%S # 单独获取时分秒
- # 2. 查看系统时区、时间同步全状态(生产核心)
- timedatectl # 完整信息:时区、系统时间、硬件时间、NTP同步状态
- ls /etc/localtime # 查看时区软链接指向,确认当前生效时区
- # 3. 查看所有可用时区
- timedatectl list-timezones # 列出系统全部时区
- timedatectl list-timezones | grep Shanghai # 精准筛选亚洲上海时区
复制代码
2.3 时区配置与切换(生产统一北京时间)
生产服务器统一配置Asia/Shanghai北京时间,杜绝时区混乱,集群所有节点时区必须保持一致,避免跨节点时间错位。提供两种适配全系系统的配置方式,永久生效、重启不失效。
- # 方式一:timedatectl 标准配置(CentOS7+/Ubuntu16+ 推荐,一键生效)
- timedatectl set-timezone Asia/Shanghai
- # 方式二:软链接强制配置(兼容所有Linux发行版,通用无报错)
- ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- # 配置后核验时区是否生效
- date
- timedatectl
复制代码
2.4 系统时间手动校准(临时纠错)
适用于服务器时间偏差较小、临时时间纠错场景,手动修改系统时间,需区分系统时间与硬件时间,避免重启时间还原。
- # 1. 手动设置完整时间(年月日时分秒)
- date -s "2026-06-29 10:30:00"
- # 2. 单独设置日期(时间不变)
- date -s "2026-06-29"
- # 3. 单独设置时分秒(日期不变)
- date -s "10:30:00"
- # 4. 系统时间写入硬件时间(核心!防止重启时间重置)
- hwclock -w # 将系统时间同步写入主板硬件时钟
- hwclock # 查看硬件时间是否同步成功
复制代码
2.5 网络NTP时间自动同步(生产核心,永久校准)
手动修改时间会存在偏差,生产所有服务器必须配置NTP网络时间自动同步,实时校准标准北京时间,保证单机、集群时间精准统一。分为传统ntp服务和新版chrony服务(CentOS8+/Rocky/Ubuntu新版默认)。
2.5.1 chrony 时间同步(新版系统默认,推荐)
- # 1. 查看chrony服务状态
- systemctl status chronyd
- # 2. 开启开机自启、启动服务
- systemctl start chronyd
- systemctl enable chronyd
- # 3. 查看时间同步溯源、校准状态
- chronyc tracking # 查看当前时间同步源、偏差值、同步状态
- chronyc sources -v # 详细查看所有NTP同步服务器、同步优先级
- # 4. 手动强制立即同步时间
- chronyc makestep
复制代码
2.5.2 ntpdate 临时同步(老旧系统/临时校准)
- # 安装ntp工具(无则执行)
- yum install ntpdate -y || apt install ntpdate -y
- # 阿里云NTP公共服务器同步(国内速度最快、稳定)
- ntpdate ntp.aliyun.com
- ntpdate time1.aliyun.com
- # 腾讯云公共NTP服务器(备选)
- ntpdate time1.tencent.com
复制代码
2.5.3 固定NTP源配置(永久稳定同步)
修改chrony/ntp配置文件,替换为国内阿里云、腾讯云NTP源,杜绝国外源同步延迟、同步失败问题。
- # chrony配置文件:/etc/chrony.conf
- # 注释原有国外源,添加国内阿里源
- server ntp.aliyun.com iburst
- server time1.aliyun.com iburst
- server time2.aliyun.com iburst
- # 重启服务生效
- systemctl restart chronyd
复制代码
2.6 硬件时间与系统时间联动规则
-
系统时间:Linux系统运行时的内存时间,重启后失效,依赖硬件时间初始化。
-
硬件时间:主板BIOS固化时间,独立于系统运行,断电不丢失。
-
联动命令:hwclock -w 系统时间写入硬件;hwclock -s 硬件时间覆盖系统时间。
2.7 高频生产故障与避坑细则
-
时间重启还原坑:仅用date修改系统时间,未执行hwclock -w写入硬件,服务器重启后时间恢复错误,生产修改时间必须同步写入硬件。
-
集群时区不一致故障:分布式集群、微服务、数据库集群,节点时区/时间偏差会导致数据同步失败、事务异常,所有节点必须统一北京时间+开启NTP同步。
-
定时任务时间错位:crontab定时任务依赖系统时间,时间偏差会导致任务提前/延迟执行、漏执行,是定时任务失效高频原因。
-
外网同步失败坑:内网服务器无法连接外网NTP源,需搭建内网NTP服务端,所有内网节点同步内网标准时间。
-
双服务冲突坑:chrony和ntpd服务不可同时开启,会抢占时间同步权限,导致同步紊乱,新版系统默认关闭ntpd、启用chrony。
2.8 面试高频核心考点
-
chrony和ntp的区别? chrony是新版时间同步工具,同步速度更快、偏差更小、适配网络波动场景,支持增量校准;ntp为传统工具,同步精度低、稳定性较弱,新版系统默认弃用ntp、使用chrony。
-
系统时间和硬件时间区别? 系统时间为系统运行内存时间,重启重置;硬件时间为主板固化时间,断电保留,系统开机通过硬件时间初始化系统时间。
-
服务器时间错乱的危害?日志时间错位无法排查故障、定时任务执行异常、集群数据同步失败、业务订单时间异常、数据对账错误。
-
如何永久统一服务器时间? 配置上海时区+开启chrony自启+配置国内NTP源+开启自动校准,无需人工干预。
2.9 生产标准化最佳实践
-
所有线上服务器强制统一Asia/Shanghai北京时间,禁止使用默认UTC时区;
-
全系服务器默认开启chronyd服务,配置国内阿里云NTP源,自动实时校准时间;
-
时间手动校准后,必须执行hwclock -w写入硬件时间,防止重启还原;
-
集群部署前必做时间巡检,保证所有节点时间偏差≤1s,规避集群同步异常;
-
内网隔离环境,搭建本地NTP服务器,统一内网所有设备时间标准。
- # 时区查看与配置
- timedatectl
- timedatectl set-timezone Asia/Shanghai
- ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- # 系统时间操作
- date
- date -s "2026-06-29 10:30:00"
- # 硬件时间同步
- hwclock # 查看硬件时间
- hwclock -w # 系统时间写入硬件
- # 网络时间同步
- chronyc tracking
- chronyc sources -v
- ntpdate ntp.aliyun.com
复制代码
- date # 当前时间
- date -s "2026-01-01 12:00"
- timedatectl # 时区同步
- ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- chronyc tracking # 时间同步服务
复制代码
3. 系统日志【生产完整版+日志路径+排查命令+轮转避坑+面试精讲】
3.1 模块总述
Linux系统日志是故障排查、安全审计、服务溯源、异常监控的核心依据,系统所有登录操作、服务启停、内核异常、权限变更、程序报错均会记录对应日志。本节全覆盖系统默认核心日志文件、journalctl服务日志、日志筛选排查技巧、logrotate日志轮转、日志清理避坑、生产规范,适配线上99%日志排查场景,补齐文档日志体系空白。
3.2 系统核心日志文件(CentOS/Ubuntu通用,必记路径)
Linux 系统日志默认统一存储在 /var/log/ 目录,不同日志对应不同业务场景,是人工排查故障的首要入口。
(1)/var/log/messages【系统全局日志】
核心作用:记录系统大部分常规运行日志、服务启停、系统报错、硬件加载信息,是系统全局排查的通用日志,非内核、非安全类日志大多汇总于此。
适用场景:服务器开机异常、常规服务报错、系统运行异常溯源。
(2)/var/log/secure【安全登录日志,审计核心】
核心作用:记录所有用户登录、ssh连接、sudo权限操作、密码修改、登录失败、恶意爆破等安全事件,生产安全审计、入侵排查核心日志。
适用场景:排查陌生登录、账号被盗、暴力破解、权限越权操作。
(3)/var/log/dmesg【内核日志】
核心作用:记录系统开机内核加载、硬件识别、磁盘挂载、内核报错、OOM内存溢出、硬件故障日志,开机异常、硬件报错专属日志。
适用场景:服务器开机卡顿、磁盘识别失败、内核崩溃、硬件适配异常排查。
(4)/var/log/cron【定时任务日志】
核心作用:记录crontab定时任务的执行记录、报错信息、任务启停日志。
适用场景:定时任务不执行、执行报错、重复执行故障排查。
(5)/var/log/boot.log【开机启动日志】
核心作用:记录系统开机全程服务启动、初始化流程日志,精准定位开机卡顿、服务启动失败环节。
(5)/var/log/yum.log【软件安装日志】
核心作用:记录yum/dnf软件安装、卸载、升级、依赖变更记录,软件异常溯源必备。
(6)/var/log/nginx/【业务服务日志】
专属Nginx访问日志、错误日志,各类第三方服务(mysql/redis/docker)均会在/var/log/生成专属日志目录。
3.3 传统日志排查高频命令(通用全系统)
适配所有文本日志文件,结合前文文本处理命令,组合实现日志筛选、报错检索、时段溯源,生产排查万能组合。
- # 1. 实时监控系统全局日志(实时排错首选)
- tail -F /var/log/messages
- # 2. 排查登录暴力破解、异常登录
- grep -i "Failed password" /var/log/secure # 筛选登录失败记录
- grep -i "Accepted password" /var/log/secure # 筛选成功登录记录
- # 3. 排查定时任务执行异常
- tail -F /var/log/cron
- grep -i "error" /var/log/cron
- # 4. 排查内核硬件、内存溢出故障
- dmesg | grep -i error # 实时内核报错
- dmesg | grep -i oom # 排查内存溢出杀死进程
- # 5. 检索近1小时系统报错日志
- grep -i "error|warn|fail" /var/log/messages | grep "$(date -d '1 hour ago' +'%Y-%m-%d %H')"
- # 6. 大日志文件分页检索报错
- less -N /var/log/messages
- /error # 快速匹配报错关键词
复制代码
3.4 journalctl 日志精讲(Systemd系统专属,生产核心)
CentOS7+/Ubuntu16+ 系统默认使用Systemd管理服务,journalctl是专属服务日志工具,无需查找日志文件,可直接精准检索单个服务启停、报错、运行日志,是服务故障排查最优方案。
- # 1. 基础查看
- journalctl # 查看所有系统服务日志
- journalctl -f # 实时刷新监控所有服务日志(等价tail -F)
- journalctl -n 100 # 查看最新100条日志
- # 2. 精准查看单个服务日志(最高频)
- journalctl -u nginx.service # 查看Nginx服务全程日志
- journalctl -u mysqld.service # 查看MySQL服务日志
- journalctl -u crond.service # 查看定时任务服务日志
- # 3. 时段精准溯源(故障定位核心)
- journalctl --since "10 minutes ago" # 近10分钟日志
- journalctl --since "2026-06-29 10:00:00" --until "2026-06-29 11:00:00" # 指定时段日志
- # 4. 开机启动日志排查
- journalctl -b # 查看本次开机后所有日志
- journalctl -b -1 # 查看上一次开机的历史日志(重启故障溯源必备)
- # 5. 日志级别筛选(只看报错)
- journalctl -p err # 仅筛选错误级别日志,过滤无关冗余信息
- # 6. 日志持久化配置(默认重启丢失历史日志)
- # 修改配置:/etc/systemd/journald.conf
- # Storage=persistent 开启持久化,重启保留日志
复制代码
3.5 日志轮转 logrotate(生产必备,磁盘爆满核心解决方案)
系统日志会持续写入扩容,若无轮转规则会导致日志无限增大、磁盘爆满。Linux 默认通过 logrotate 实现日志自动切割、压缩、过期删除,是运维核心保障机制。
3.5.1 核心配置与原理
-
主配置文件:/etc/logrotate.conf(全局默认规则)
-
自定义服务轮转配置:/etc/logrotate.d/(所有服务专属轮转规则)
-
执行机制:系统crontab定时触发,自动切割大日志、压缩归档、删除过期日志
3.5.2 生产标准轮转配置示例
- # Nginx日志生产轮转配置(/etc/logrotate.d/nginx)
- /var/log/nginx/*.log {
- daily # 按天切割
- rotate 7 # 保留最近7天日志
- compress # 压缩归档历史日志
- missingok # 日志文件不存在不报错
- notifempty # 空日志不切割
- dateext # 日志后缀加日期,避免覆盖
- create 0644 root root # 新建日志权限与属主
- }
- # 手动强制触发日志轮转(调试配置必备)
- logrotate -vf /etc/logrotate.d/nginx
复制代码
3.6 高频致命坑点与生产避坑细则
-
活跃日志禁止直接rm删除:正在被服务写入的日志文件,rm -rf 删除后磁盘空间不释放,进程持续占用句柄,导致磁盘爆满无法排查,正确操作:cat /dev/null > 日志文件 清空内容。
-
journalctl日志默认不持久化:默认重启系统后丢失历史日志,需手动开启persistent持久化,否则重启无法溯源历史故障。
-
日志轮转不生效误区:修改logrotate配置后不会立即生效,需手动执行logrotate -vf 强制校验生效,避免配置失效导致日志暴涨。
-
安全日志遗漏风险:服务器安全审计必须定期排查secure日志,及时发现暴力破解、异常登录,规避入侵风险。
-
大日志排查禁止用cat:超大日志用cat全屏加载会卡顿终端、占用内存,统一使用less/tail 分页/尾部查看。
3.7 面试高频核心考点
-
磁盘爆满但找不到大文件的原因? 存在已删除但被进程占用的日志文件,文件句柄未释放,需重启对应服务或清空日志,而非删除日志。
-
journalctl和传统日志的区别? 传统日志为文本文件,需手动筛选;journalctl统一管理systemd服务日志,支持时段、服务、级别精准筛选,排查效率更高。
-
logrotate的作用? 自动切割、压缩、归档、清理日志,防止日志无限增大占用磁盘,保障服务器磁盘稳定。
-
如何排查服务器被暴力破解? 过滤/var/log/secure 日志,统计高频失败登录IP、异常登录时间,封禁恶意IP。
3.8 生产最佳实践总结
-
所有业务服务必须配置日志轮转规则,限定日志保留时长、自动压缩清理,杜绝日志暴涨;
-
服务故障优先使用 journalctl -u 精准排查,快速定位服务启停、报错根源;
-
日常安全巡检定时筛查secure登录日志,排查异常登录与暴力破解;
-
所有活跃日志采用清空方式清理,禁止直接删除,规避磁盘空间不释放问题;
-
新版系统统一开启journalctl日志持久化,保留完整历史故障溯源依据。
- # 核心日志路径
- /var/log/messages # 系统全局日志
- /var/log/secure # 安全登录审计日志
- /var/log/dmesg # 内核硬件日志
- /var/log/cron # 定时任务日志
- # 传统排查命令
- tail -F /var/log/messages
- grep -i error /var/log/secure
- dmesg | grep -i fail
- # journalctl服务日志
- journalctl -u nginx -f
- journalctl --since "30 minutes ago"
- journalctl -b -p err
- # 日志轮转调试
- logrotate -vf /etc/logrotate.d/服务名
复制代码
十、Shell 脚本基础配套命令【完整版|脚本开发必备|生产可直接复用】
Shell脚本是Linux自动化运维、批量处理、服务部署、日志清洗、定时任务的核心载体,所有运维提效、自动化场景均依赖Shell脚本实现。本节完整补全脚本语法基础、变量定义、数值运算、条件判断、循环语句、函数封装、输入输出、管道重定向、脚本调试、传参规则、高频避坑点,所有语法适配生产脚本编写,可直接复制复用。
1. 脚本基础规范与执行方式
1.1 脚本头部声明
所有Shell脚本首行必须指定解析器,规范脚本运行环境,避免系统默认Shell兼容问题。
- # 标准bash解析器声明(生产通用,必写首行)
- #!/bin/bash
- # 脚本注释规范:# 单行注释
- # 多行注释可通过 :<<EOF ... EOF 实现
- :<<COMMENT
- 此处为多行注释内容
- 可批量注释多行代码
- COMMENT
复制代码
1.2 脚本三种执行方式(权限区别)
- # 1. 绝对/相对路径执行(需要脚本执行权限)
- chmod +x test.sh # 赋予脚本执行权限
- ./test.sh # 相对路径执行(当前目录)
- /root/test.sh # 绝对路径执行
- # 2. 直接调用解析器执行(无需执行权限,生产调试常用)
- bash test.sh
- sh test.sh
- # 3. source 加载执行(在当前终端环境运行,变量全局生效)
- source test.sh
- . test.sh # source简写形式
- # 核心区别:./执行会新开子终端,source在当前终端执行,可读取脚本变量
复制代码
2. Shell变量体系(脚本核心)
2.1 变量定义与赋值规范
- # 1. 自定义普通变量(赋值=左右禁止空格!高频坑点)
- name="nginx服务"
- version=1.24
- num=100
- # 2. 变量调用({}包裹变量为规范写法,避免字符串拼接歧义)
- echo $name
- echo ${version}
- # 3. 只读变量(不可修改、不可删除,配置参数常用)
- readonly APP_NAME="java服务"
- # 4. 清空删除变量
- unset name
复制代码
2.2 系统特殊位置变量(脚本传参必备)
用于接收脚本执行时传入的参数,是脚本动态适配参数的核心。
- # 特殊参数变量大全
- $0 # 获取脚本本身名称
- $1-$9 # 获取脚本第1-9个传入参数
- ${10} # 获取10及以上参数,必须加花括号
- $# # 获取传入参数总个数(参数校验核心)
- $* # 获取所有传入参数,整体作为一个字符串
- $@ # 获取所有传入参数,逐个独立区分(循环遍历首选)
- $$ # 获取当前脚本运行PID
- $? # 获取上一条命令执行返回状态(0=执行成功,非0=失败,排错核心)
- # 实战示例:脚本传参
- # 执行:./test.sh a b c
- echo "脚本名:$0"
- echo "第一个参数:$1"
- echo "参数总数:$#"
- echo "所有参数:$@"
复制代码
3. 数值与字符串运算
3.1 整数运算(Shell仅原生支持整数)
- # 方式1:expr 运算(兼容所有系统)
- a=10
- b=20
- expr $a + $b # 加法
- expr $a - $b # 减法
- expr $a \* $b # 乘法(*必须加转义符\)
- expr $b / $a # 除法
- expr $b % $a # 取余
- # 方式2:$(( )) 运算(生产首选,简洁无转义)
- echo $((a + b))
- echo $((a * b))
- echo $((b / a))
- # 自增自减
- i=1
- i=$((i+1)) # 自增1
- i=$((i-1)) # 自减1
复制代码
3.2 字符串处理(脚本高频)
- str="linux-shell-script"
- # 1. 字符串长度
- echo ${#str}
- # 2. 字符串截取
- echo ${str:0:5} # 从第0位开始,截取5个字符
- echo ${str:5} # 从第5位开始,截取到末尾
- # 3. 字符串替换
- echo ${str/linux/LINUX} # 替换第一个匹配字符
- echo ${str//-/_} # 替换所有匹配字符
- # 4. 字符串判断
- [ -z "$str" ] # 判断字符串是否为空
- [ -n "$str" ] # 判断字符串是否非空
复制代码
4. 条件判断语法(test/[]/if)
Shell所有条件判断基于 test 或 [],中括号左右必须加空格(致命语法坑),适配文件、字符串、数字、权限全场景判断。
4.1 文件状态判断(运维脚本核心)
- # 文件判断参数
- [ -f "test.txt" ] # 判断是否为普通文件且存在
- [ -d "/data" ] # 判断是否为目录且存在
- [ -e "test.txt" ] # 判断文件/目录是否存在
- [ -r "test.txt" ] # 判断文件是否可读
- [ -w "test.txt" ] # 判断文件是否可写
- [ -x "test.sh" ] # 判断文件是否可执行
- [ -s "test.txt" ] # 判断文件非空
- # 实战if判断示例
- if [ -d "/usr/local/nginx" ];then
- echo "nginx目录已存在"
- else
- echo "nginx目录不存在"
- fi
复制代码
4.2 数字与字符串判断
- # 1. 数字比较(只能用 -eq/-ne/-gt/-lt/-ge/-le)
- a=10
- b=20
- [ $a -eq $b ] # 等于
- [ $a -ne $b ] # 不等于
- [ $a -gt $b ] # 大于
- [ $a -lt $b ] # 小于
- [ $a -ge $b ] # 大于等于
- [ $a -le $b ] # 小于等于
- # 2. 字符串比较(只能用 =/!=)
- str1="shell"
- str2="linux"
- [ "$str1" = "$str2" ] # 字符串相等
- [ "$str1" != "$str2" ] # 字符串不等
- [ -z "$str1" ] # 字符串为空
- [ -n "$str1" ] # 字符串非空
复制代码
4.3 多条件逻辑判断
- # -a 逻辑与(同时满足)
- [ -f "test.txt" -a -s "test.txt" ]
- # -o 逻辑或(满足其一)
- [ $a -gt 5 -o $b -lt 10 ]
- # && 与、|| 或(if语句常用)
- if [ $a -gt 0 ] && [ $b -gt 0 ];then
- echo "两个数均为正数"
- fi
复制代码
5. 循环语句(批量处理核心)
5.1 for循环(批量操作首选)
- # 1. 基础遍历循环
- for i in 1 2 3 4 5;do
- echo "数字:$i"
- done
- # 2. 有序区间循环(批量创建文件/目录必备)
- for i in {01..10};do
- touch test_${i}.txt
- done
- # 3. 命令结果遍历循环
- for file in $(ls /var/log);do
- echo "日志文件:$file"
- done
- # 4. C语言风格循环(数值迭代)
- for ((i=1;i<=5;i++));do
- echo "迭代:$i"
- done
复制代码
5.2 while循环(持续监听/逐行读取)
- # 1. 基础while循环
- i=1
- while [ $i -le 5 ];do
- echo "循环次数:$i"
- i=$((i+1))
- done
- # 2. 逐行读取文件内容(生产日志解析刚需)
- while read line;do
- echo "行内容:$line"
- done < test.txt
- # 3. 无限循环(服务监听、常驻脚本)
- while true;do
- echo "持续运行中"
- sleep 1
- done
复制代码
5.3 循环控制语句
- # break:终止整个循环
- # continue:跳过本次循环,直接进入下一次循环
- for i in {1..5};do
- if [ $i -eq 3 ];then
- continue # 跳过3,不执行本次输出
- fi
- echo $i
- done
- for i in {1..5};do
- if [ $i -eq 3 ];then
- break # 到3直接终止循环
- fi
- echo $i
- done
复制代码
6. 函数封装(脚本模块化)
将重复代码封装为函数,实现脚本复用、精简代码,是规范脚本的必备语法。
- # 1. 函数定义与调用
- function check_file() {
- # 函数内$1代表函数传入参数
- if [ -f "$1" ];then
- echo "文件 $1 存在"
- return 0 # 返回成功状态码
- else
- echo "文件 $1 不存在"
- return 1 # 返回失败状态码
- fi
- }
- # 调用函数并传参
- check_file "/etc/profile"
- # 2. 无function简写形式(生产常用)
- add() {
- echo $(( $1 + $2 ))
- }
- add 10 20
复制代码
7. 输入输出、管道与重定向(脚本核心)
7.1 交互式输入read
- # read 接收终端用户输入
- echo "请输入文件名:"
- read filename
- echo "你输入的文件名是:$filename"
- # 静默输入(不显示输入内容,密码输入必备)
- read -s -p "请输入密码:" pwd
复制代码
7.2 重定向全覆盖
- # 标准输出重定向
- echo "测试内容" > test.txt # 覆盖写入文件
- echo "追加内容" >> test.txt # 追加写入文件
- # 错误输出重定向
- ls /none 2> error.log # 错误信息单独写入日志
- # 标准输出+错误输出合并(生产日志必备)
- command > run.log 2>&1 # 所有输出统一写入日志
- command &> run.log # 简写形式,等价上方
- # 空设备清空输出(屏蔽无关日志)
- command > /dev/null 2>&1
复制代码
7.3 管道与特殊符号
- # 管道 | :将前一条命令输出作为后一条命令输入
- ps -ef | grep nginx
- ls -l | grep .log
- # 逻辑符号
- && # 前命令成功,才执行后命令(链式执行)
- || # 前命令失败,才执行后命令(容错兜底)
- ; # 前后命令顺序执行,互不影响
- # 实战链式执行
- yum install nginx -y && systemctl start nginx
复制代码
8. 脚本调试与容错
- # 1. 脚本调试模式
- bash -n test.sh # 仅检查语法错误,不执行脚本
- bash -v test.sh # 详细输出每一行执行代码
- bash -x test.sh # 分步调试,输出所有执行过程(排错神器)
- # 2. 脚本容错配置(生产脚本头部添加)
- set -e # 遇到命令执行失败,直接退出脚本,避免错误累积
- set -u # 遇到未定义变量,直接报错退出
- set -o pipefail # 管道命令任意环节失败,整体判定失败
复制代码
9. 高频避坑总结(脚本必看)
-
中括号空格坑:[ $a -gt 0 ] 中括号左右必须有空格,无空格直接语法报错。
-
变量赋值空格坑:变量赋值 a=10 禁止写 a = 10,=左右不能有空格。
-
数字字符串判断混淆:数字比较用-eq/-gt,字符串比较用=/!=,不可混用。
-
参数变量范围坑:10位以上参数必须 ${10} 加花括号,$10 识别为$1+0。
-
循环遍历空格文件名坑:for遍历文件名含空格会拆分出错,优先用while read逐行读取。
-
子终端变量失效坑:./执行脚本的变量无法在当前终端生效,需source执行。
10. 生产极简万能脚本模板
- #!/bin/bash
- # 生产脚本标准模板:容错+注释+传参+日志输出
- set -euo pipefail
- # 定义全局变量
- LOG_FILE="./run_$(date +%Y%m%d).log"
- # 定义功能函数
- main() {
- echo "脚本开始执行" >> ${LOG_FILE}
- # 自定义业务逻辑
- echo "执行成功" >> ${LOG_FILE}
- }
- # 调用主函数
- main
- echo "脚本执行完成"
复制代码
十一、整体知识体系学习路线(由浅入深·完整版|零基础到高阶运维进阶)
本学习路线适配零基础入门、运维进阶、面试提分、生产落地全场景,严格遵循「基础夯实→核心能力→工具使用→服务运维→性能调优→排错实战→自动化进阶」的成长逻辑,拆分12个进阶阶段,明确每阶段学习重点、必掌握技能、避坑要点、实战目标,告别碎片化学习,系统性搭建Linux知识体系。
阶段一:Linux基础入门(筑基阶段·零基础必学)
核心定位:熟悉系统环境,掌握终端操作逻辑,摆脱图形化依赖,是所有实操的前置基础
-
必学内容:远程SSH登录、开关机/重启/注销、用户登录切换、终端快捷键、历史命令、帮助手册(man/help/info)、系统运行时长查看
-
核心掌握点:熟记高频终端快捷键、会排查登录异常、熟练调用命令帮助文档、养成规范命令操作习惯
-
避坑重点:禁止生产随意执行关机重启命令、区分su与su-的环境差异、掌握历史命令高效复用技巧
-
实战目标:独立远程连接服务器、无鼠标纯终端操作、快速检索陌生命令用法
阶段二:文件与目录体系(核心基础·高频刚需)
核心定位:Linux一切皆文件,此阶段是所有运维、开发操作的核心基石
-
必学内容:绝对/相对路径、特殊路径符号、通配符、目录操作(cd/pwd/ls/mkdir/rmdir)、文件增删改查(touch/rm/cp/mv)、软硬链接、文件精准查找(find/locate/which/whereis)、文件内容查看(cat/less/tail等)
-
核心掌握点:find多条件筛选与批量处理、tail-F实时日志监控、软硬链接场景区分、批量文件操作语法
-
避坑重点:禁止rm -rf裸删高危操作、活跃日志只清空不删除、区分locate与find的精准度差异
-
实战目标:独立完成文件批量创建/清理、日志日常查看溯源、系统文件精准检索、软链接版本切换
阶段三:用户、组与权限体系(安全核心·企业必备)
核心定位:系统安全隔离、权限管控的核心,解决服务权限不足、越权风险、文件访问异常问题
-
必学内容:root/系统/普通用户区别、UID/GID机制、用户/组创建删除修改、rwx基础权限、数字/符号权限修改、特殊权限(suid/sgid/sticky)、sudo权限委派、文件属主属组修改
-
核心掌握点:usermod -aG追加权限、sudo权限配置、特殊权限场景、生产权限标准化配置
-
避坑重点:杜绝usermod -G覆盖原有权限、服务用户禁止登录、关键文件权限严格管控
-
实战目标:规范服务器用户权限、配置普通用户sudo提权、排查文件权限报错、加固系统账号安全
阶段四:文本处理三剑客(效率进阶·面试/实战高频)
核心定位:日志清洗、数据筛选、配置批量修改的核心工具,运维提分提效关键
-
必学内容:grep精准匹配筛选、sed批量替换/删除/插入、awk数据切片/统计/格式化输出、正则表达式基础、管道组合使用
-
核心掌握点:日志报错筛选、批量修改配置文件、统计IP访问量、过滤无效日志数据
-
避坑重点:sed -i修改配置提前备份、正则匹配贪婪与精准区分、awk字段切割逻辑
-
实战目标:独立完成日志分析、配置批量修改、业务数据统计,替代人工重复操作
阶段五:磁盘存储与文件压缩(资源管理·磁盘故障排查)
核心定位:管控服务器磁盘资源,解决磁盘爆满、分区异常、文件传输归档问题
-
必学内容:磁盘分区、挂载卸载(mount/umount)、磁盘空间查看(df/du)、inode与block原理、文件压缩解压(tar/zip/unzip)、磁盘坏道检测、临时文件清理
-
核心掌握点:磁盘空间占用排查、大文件定位、文件批量归档解压、永久挂载配置
-
避坑重点:挂载目录数据丢失风险、inode耗尽磁盘爆满、tar压缩解压路径错误
-
实战目标:快速排查磁盘爆满问题、完成文件批量归档备份、规范磁盘挂载管理
阶段六:进程管理与定时任务(服务运维核心)
核心定位:管控系统进程、保障服务常驻运行、实现自动化定时执行任务
-
必学内容:进程查看(ps/top/htop)、进程终止(kill/killall)、前后台进程切换、nohup常驻进程、crontab定时任务配置、任务日志排查、开机自启配置
-
核心掌握点:高负载进程排查、服务后台常驻、定时任务精准配置、任务执行异常排查
-
避坑重点:crontab时区与时间偏差、进程强制终止风险、nohup日志堆积
-
实战目标:保障业务服务7*24常驻、配置自动化备份/清理任务、排查进程卡死/高负载故障
阶段七:网络配置与防火墙(通信核心·集群必备)
核心定位:解决服务器网络通信、端口访问、外网连通、集群节点互通问题
-
必学内容:网卡配置、IP地址修改、路由配置、网络连通测试(ping/curl)、端口监听查看(ss/lsof/netstat)、防火墙规则配置、端口开放/封禁、域名解析、网络故障排查
-
核心掌握点:端口占用排查、防火墙精准放行、外网访问故障溯源、跨节点互通配置
-
避坑重点:防火墙默认拒接规则、端口冲突、网卡配置错误导致断网
-
实战目标:独立配置服务器网络、放行业务端口、排查网络不通/端口无法访问故障、保障集群节点互通
阶段八:软件包管理(环境部署·服务安装基础)
核心定位:快速部署系统环境、安装运维软件、管理软件版本与依赖
-
必学内容:CentOS(yum/dnf/rpm)、Ubuntu(apt/dpkg)软件安装、卸载、升级、依赖修复、本地离线安装、镜像源更换、软件版本锁定
-
核心掌握点:国内镜像源配置、依赖冲突修复、离线环境软件部署、软件精准卸载
-
避坑重点:生产禁止全局升级软件、依赖误删、离线安装依赖缺失
-
实战目标:一键部署运维工具、搭建基础服务环境、解决软件安装依赖报错
阶段九:系统监控、时间与日志运维(故障溯源·生产保障)
核心定位:服务器日常巡检、故障排查、安全审计、系统稳定性保障
-
必学内容:硬件信息查询(CPU/内存/磁盘/网卡)、时区时间同步(chrony/NTP)、系统核心日志路径、journalctl服务日志排查、logrotate日志轮转、系统开机故障排查、硬件异常监控
-
核心掌握点:服务器一键巡检、时间统一校准、日志精准溯源、日志自动清理轮转
-
避坑重点:日志句柄残留、时间错位导致业务异常、日志无限暴涨
-
实战目标:日常服务器巡检、快速定位系统/服务故障、完成日志规范化运维
阶段十:Shell脚本自动化(运维提效·进阶核心)
核心定位:摆脱人工重复操作,实现运维自动化,是高级运维必备核心能力
-
必学内容:脚本规范与执行方式、变量与传参、数值/字符串运算、条件判断、循环语句、函数封装、管道重定向、脚本调试、容错机制、生产通用脚本模板
-
核心掌握点:自动化日志清理、批量部署、文件同步、服务巡检脚本编写
-
避坑重点:脚本语法坑、变量未定义、子终端执行失效、循环遍历异常
-
实战目标:独立编写可落地的自动化运维脚本,实现日常运维工作自动化
阶段十一:系统性能调优与高阶排错(高阶能力·资深运维)
核心定位:解决服务器高负载、卡顿、响应慢、服务异常等疑难问题,优化系统性能
-
必学内容:CPU/内存/磁盘IO/网络性能调优、内核参数优化、进程优先级调整、系统资源限制、常见线上故障复盘(磁盘爆满、进程卡死、网络延迟、日志异常)
-
核心掌握点:性能瓶颈定位、内核参数优化、故障快速复盘修复
-
实战目标:独立完成服务器性能调优、快速处理各类线上疑难故障、保障系统高可用
阶段十二:综合实战与架构适配(落地闭环·职场进阶)
核心定位:整合所有知识点,适配企业集群、微服务、自动化运维架构,实现能力闭环
-
必学内容:多节点集群环境运维规范、服务高可用保障、批量运维工具适配、日常运维标准化流程、面试高频考点复盘、生产故障案例汇总
-
核心掌握点:标准化运维流程、集群环境统一管控、故障快速应急处理
-
实战目标:独立负责企业服务器集群运维、处理突发线上故障、搭建自动化运维体系
十二、高频生产组合命令示例(实战落地|可直接复制复用)
本章节汇总运维日常90%高频组合命令,覆盖日志排查、磁盘清理、进程运维、网络排错、配置批量修改、数据统计、系统巡检七大核心场景,所有命令均经过生产验证,附带场景解析与使用说明,无需修改可直接落地使用。
1. 日志排查与清洗(线上排错核心)
(1)实时监控日志并筛选报错
tail -F /var/log/nginx/access.log | grep -i error
用途:实时抓取nginx运行报错日志,过滤大小写忽略的error异常,精准定位实时故障
(2)统计近1小时日志报错数量
grep -i "error|warn|fail" /var/log/messages | grep "$(date -d '1 hour ago' +'%Y-%m-%d %H')" | wc -l
用途:快速统计系统近一小时异常次数,用于故障复盘、巡检报表
(3)筛选日志指定时间段内容
sed -n '/2026-06-28 10:00:00/,/2026-06-28 11:00:00/p' app.log
用途:精准截取固定时段日志,排查历史时段业务异常
(4)过滤空行与无效日志,输出干净日志
grep -v "^$|#" app.log
用途:过滤空行、注释行,精简日志内容,提升排查效率
(5)统计接口高频异常IP
grep "500" access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -10
用途:统计请求返回500错误的TOP10恶意/异常IP,快速定位攻击、接口故障源头
2. 磁盘清理与空间排查(解决磁盘爆满)
(1)全盘查找100M以上大文件并排序
find / -type f -size +100M | xargs ls -lh | sort -rh
用途:极速定位服务器超大文件,解决磁盘占用过高问题,生产巡检刚需
(2)清理7天前过期日志(安全清理)
find /data/logs -name "*.log" -mtime +7 -delete
用途:自动清理一周前过期日志,释放磁盘空间,适配定时任务自动化清理
(3)清空正在写入的大日志文件(禁止rm删除)
cat /dev/null > /var/log/nginx/error.log
用途:清空活跃日志,不释放进程句柄,规避磁盘空间不释放的致命问题
(4)统计各目录磁盘占用大小并排序
du -sh /data/* | sort -rh
用途:快速排查哪个子目录占用磁盘过高,精准定位垃圾目录
(5)查找30天未使用的临时文件并删除
find /tmp -type f -mtime +30 -delete
用途:清理系统临时目录冗余文件,释放磁盘空间
3. 进程运维与服务排错(常驻服务管理)
(1)查找并强制关闭指定进程(批量杀进程)
ps -ef | grep java | grep -v grep | awk '{print $2}' | xargs kill -9
用途:批量终止所有Java进程,适用于服务重启、卡死进程清理
(2)后台常驻运行程序并输出日志(生产通用启动命令)
nohup java -jar app.jar > app_run.log 2>&1 &
用途:脱离终端后台运行服务,日志统一输出,关闭终端不中断服务
(3)查看进程运行时长与资源占用
ps -eo pid,user,cmd,etime,%mem,%cpu | grep -v grep | sort -k5 -nr
用途:排查高CPU、高内存占用进程,查看进程运行时长,定位异常进程
(4)查看系统当前负载与高频进程
top -b -n1 | head -20
用途:非交互式查看系统瞬时负载、进程资源占用,适合脚本巡检、快速排查卡顿
4. 网络与端口故障排查(通信异常、端口占用)
(1)查找指定端口占用进程
lsof -i :8080 备选(无lsof工具):ss -tulpn | grep 8080
用途:排查端口被占用、端口冲突问题,解决服务启动端口报错
(2)统计服务器当前TCP连接数
ss -s
用途:查看总连接数、异常连接数、TIME_WAIT连接数,排查网络拥堵、请求堆积
(3)测试域名连通性与解析速度
curl -I www.baidu.com
用途:测试外网连通、域名解析、接口响应状态,排查网络不通、域名解析失败
(4)排查服务器对外访问延迟
ping -c 10 www.baidu.com
用途:发送10次ping包,统计网络延迟、丢包率,排查网络抖动问题
5. 配置文件批量修改与处理(运维提效)
(1)批量替换目录下所有配置文件指定内容
sed -i 's/192.168.1.100/192.168.1.200/g' /etc/nginx/*.conf
用途:批量修改配置文件IP、端口、域名,无需逐文件修改,适配环境迁移
(2)批量注释配置文件中指定行
sed -i '/server_port/s/^/#/g' nginx.conf
用途:批量注释包含server_port的配置行,快速禁用旧配置
(3)批量取消注释指定行
sed -i '/^#server_port/s/^#//g' nginx.conf
用途:批量开启被注释的配置,快速启用新配置
(4)批量备份所有配置文件
find /etc -name "*.conf" -exec cp {} {}.bak \;
用途:批量备份系统所有配置文件,修改配置前必备,方便出错回滚
6. 文件批量操作与数据统计(批量运维)
(1)批量创建规范命名文件
touch test_{01..10}.log
用途:一次性创建10个规范命名日志文件,适配测试、批量场景
(2)批量修改文件后缀
rename .txt .log *.txt
用途:批量将所有txt文件改为log文件,适配文件格式统一场景
(3)统计当前目录文件总数、目录总数
ls -l | grep "^-" | wc -l && ls -l | grep "^d" | wc -l
用途:快速统计当前目录文件、文件夹数量,适配资源盘点
7. 系统快速巡检组合命令(日常运维必备)
(1)一键查看系统基础信息(负载、内存、磁盘、时间)
echo "系统负载:$(uptime | awk '{print $8,$9,$10}')";echo "内存使用:$(free -h | awk 'NR==2{print $3"/"$2}')";echo "磁盘使用:$(df -h / | awk 'NR==2{print $3"/"$2" ("$5"已用)"}')";echo "系统时间:$(date)"
用途:一键输出服务器核心运行指标,日常巡检、快速排查系统状态
(2)查看开机自启服务列表
systemctl list-unit-files --type=service | grep enabled
用途:排查开机自启服务,关闭无用自启,优化开机速度、减少资源占用
(3)查看系统开机异常日志
journalctl -b -p err
用途:精准筛选本次开机后的所有系统报错,排查开机故障、服务启动异常