[Linux服务器] Linux 常用命令完整知识体系

85 0
Honkers 昨天 13:06 | 显示全部楼层 |阅读模式

Linux 常用命令完整知识体系

整体分为基础入门、文件目录、权限用户、进程网络、磁盘存储、软件包、文本处理、系统运维、Shell 进阶、实战排错十大模块,覆盖日常开发 / 运维全场景。

一、基础入门:系统登录与基础操作

1. 登录、开关机、终端、用户操作(完整精讲)

本小节为Linux最基础前置操作,包含远程登录、开关机、用户查看、终端控制、历史命令、帮助体系,是所有Linux操作的前置基础,适配服务器日常运维、开发登录调试场景。

  1. # ========== 远程登录操作 ==========
  2. # 标准远程登录(默认22端口可省略 -p)
  3. ssh 用户名@IP地址
  4. # 非22端口远程登录
  5. ssh 用户名@IP -p 端口号
  6. # 免交互远程执行命令(常用脚本调用)
  7. ssh 用户名@IP "命令"
  8. # ========== 开关机与重启(生产慎用) ==========
  9. shutdown -h now # 立即关机(安全,终止进程、保存数据)
  10. shutdown -h 10 # 10分钟后自动关机
  11. shutdown -r now # 立即重启
  12. shutdown -r 15:30 # 指定时间重启
  13. shutdown -c # 取消已设置的关机/重启计划
  14. reboot # 快速重启(生产常用)
  15. halt # 停机,不切断电源
  16. poweroff # 彻底断电关机
  17. # ========== 在线用户与系统状态查看 ==========
  18. whoami # 查看当前登录用户名
  19. who # 查看所有在线登录用户、登录终端、登录时间
  20. w # 增强版who,显示用户操作、系统负载、运行时长
  21. users # 简洁查看在线用户
  22. # ========== 终端基础操作 ==========
  23. clear # 清空当前终端屏幕(等价 Ctrl+L)
  24. echo 内容 # 终端打印输出内容
  25. echo $SHELL # 查看当前终端Shell类型
  26. # ========== 历史命令高效操作 ==========
  27. history # 查看所有执行过的历史命令
  28. history 20 # 只查看最近20条历史命令
  29. !数字 # 执行对应序号的历史命令 例:!100
  30. !! # 快速执行上一条命令
  31. !字符串 # 执行最近一条包含该字符串的命令
  32. Ctrl+R # 搜索历史命令(终端快捷键)
  33. # ========== 官方帮助文档(查命令参数必备) ==========
  34. man ls # 查看命令完整手册(上下翻页,q退出)
  35. ls --help # 查看命令精简帮助(大部分命令支持)
  36. info ls # 超详细官方文档(比man更完整)
  37. whatis ls # 快速查看命令功能简介
复制代码

2. 路径体系、通配符、终端快捷键(全量汇总)

路径、通配符、快捷键是Linux命令的核心基础语法,所有文件操作、批量操作、终端操作都依赖该知识点,属于必背必会内容。

  • 绝对路径 /xxx,相对路径 ./xxx、../

  • 绝对路径:从根目录 / 开始的完整路径,唯一不重复,不受当前目录影响,常用于脚本、配置文件。示例:/home/user、/etc/nginx

(1)路径体系规则
  • 特殊路径符号:~ 当前用户家目录、- 上一次所在目录、. 当前目录、.. 上一级目录

  • 相对路径:相对于当前所在目录的路径,简洁高效,日常操作常用。示例:./test(当前目录)、../(上一级目录)

  • *:匹配任意长度任意字符(包含空字符),常用于批量匹配文件,例:*.log 匹配所有日志文件

(2)万能通配符(批量操作核心)
  • []:匹配括号内任意单个字符,支持区间,[0-9]数字、[a-z]小写字母、[A-Z]大写字母

  • ?:匹配单个任意字符,不匹配空字符,例:test? 匹配test后带1个字符的文件

(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. # ===================== 1. pwd 查看当前目录 =====================
  2. # 作用:打印当前工作目录绝对路径,脚本、路径校验刚需
  3. pwd # 输出逻辑路径(默认,跟随软链接路径)
  4. pwd -P # 输出物理真实路径(强制解析软链接,显示源目录)
  5. pwd -L # 输出逻辑路径(默认参数,可省略)
  6. # ===================== 2. cd 目录切换(最高频) =====================
  7. # 核心特性:cd为Shell内置命令,无磁盘IO,切换速度最快
  8. cd /home # 绝对路径切换,不受当前目录影响
  9. cd test # 相对路径切换,仅适配当前目录下级目录
  10. cd ~ # 快速进入当前用户家目录(root→/root,普通用户→/home/用户名)
  11. cd - # 来回切换:切换到上一次操作目录(工作目录快速切换神器)
  12. cd .. # 切换到上一级目录
  13. cd ../.. # 切换到上两级目录(多级返回常用)
  14. cd . # 保留当前目录(无实际切换作用,多用于脚本占位、路径初始化)
  15. # 高阶技巧:空白cd
  16. cd # 直接回车,等价 cd ~,快速回家目录
  17. # ===================== 3. ls 目录内容查看(核心参数大全) =====================
  18. # 作用:列出目录下所有文件、目录、软链接,生产必带组合参数
  19. ls # 仅列出非隐藏文件,简洁展示
  20. ls -l # 长格式详情:权限、属主、属组、大小、修改时间、文件类型
  21. ls -a # 显示所有文件,包含 . 开头的隐藏文件
  22. ls -A # 显示隐藏文件,排除 . 和 .. 两个特殊目录(生产更干净)
  23. ls -h # 人性化单位显示(KB/MB/GB,必须搭配 -l 使用)
  24. ls -t # 按修改时间倒序(最新文件置顶,排查最新日志首选)
  25. ls -rt # 按修改时间正序(最旧文件置顶,日志回溯排查)
  26. ls -d # 仅展示目录本身,不递归展示目录内部文件(排查目录属性刚需)
  27. ls -i # 查看文件inode编号(软硬链接、文件异常排查核心)
  28. ls -S # 按文件大小倒序排序(快速查找大文件)
  29. ls -p # 目录尾部加 / 标识,区分文件和目录
  30. # 生产高频组合参数
  31. ls -lhtr # 人性化大小+时间正序,日常目录巡检万能组合
  32. ls -Ahl # 展示所有文件+详情+人性化大小,干净无冗余
  33. # ===================== 4. mkdir 创建目录 =====================
  34. # 基础创建
  35. mkdir test01 # 创建单个空目录
  36. mkdir test02 test03 test04 # 批量创建多个同级目录
  37. # 核心高阶参数(生产刚需)
  38. mkdir -p /a/b/c/d/e # 递归创建多级嵌套目录(目录不存在则创建,存在不报错)
  39. mkdir -m 755 test05 # 创建目录同时指定权限,无需后续chmod修改
  40. mkdir -v test06 # 可视化创建,显示创建过程日志(脚本调试常用)
  41. # 批量有序创建(实战技巧)
  42. mkdir dir{01..10} # 批量创建 dir01-dir10 十个有序目录
  43. # ===================== 5. rmdir 删除空目录(安全删除) =====================
  44. # 核心特性:仅删除空目录,不会误删文件,无高危风险,生产安全首选
  45. rmdir test01 # 删除单个空目录
  46. rmdir dir01 dir02 # 批量删除多个空目录
  47. rmdir -p /a/b/c # 递归逐级删除多级空目录(从子级到父级依次删除)
  48. 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. # ===================== 1. touch 文件创建 =====================
  2. # 核心作用:创建空文件 / 更新文件时间戳
  3. touch test.txt # 文件不存在则创建空文件,存在则更新「访问+修改时间」
  4. touch file1.log file2.txt # 一次性批量创建多个文件
  5. touch -c nofile.txt # -c 不创建新文件,仅更新已有文件时间戳(防止生成空文件)
  6. touch -t 202601011200 test.txt # 指定时间戳:2026-01-01 12:00
  7. # 实战技巧:批量有序创建文件(脚本/测试刚需)
  8. touch data{01..10}.txt
  9. # ===================== 2. rm 文件/目录删除(高危命令) =====================
  10. # 特性:Linux无回收站,删除默认永久丢失,生产严禁裸删
  11. rm test.txt # 删除文件,交互式询问 y/n
  12. rm -f test.txt # 强制删除,不询问、不报错、静默删除(日常主力)
  13. rm -rf testdir/ # 递归+强制删除目录及所有内容(生产高频,极度谨慎)
  14. rm -ri testdir/ # 交互式逐级确认删除(安全删未知目录)
  15. rm -rv testdir/ # 可视化删除,打印每一步删除日志
  16. # 生产禁忌写法(绝对禁止)
  17. # rm -rf / 彻底清空根目录
  18. # rm -rf /* 清空系统所有数据
  19. # ===================== 3. cp 文件/目录复制 =====================
  20. # 特性:复制产生新文件,占用磁盘IO,生成独立inode
  21. cp file.txt /tmp/ # 复制文件到指定目录,同名直接覆盖
  22. cp file.txt /tmp/newfile.txt # 复制并重命名
  23. cp -r dir1 /tmp/ # 递归复制目录(复制目录必须带 -r)
  24. cp -R dir1 /tmp/ # 递归复制,保留软链接本身(不递归跟进源文件)
  25. cp -p file.txt /tmp/ # 保留原有:权限、属主、时间戳、属性
  26. cp -rf dir1 /tmp/ # 强制覆盖、静默复制(脚本自动化专用)
  27. cp -n file.txt /tmp/ # 不覆盖已有文件(安全复制首选)
  28. # ===================== 4. mv 移动/重命名 =====================
  29. # 核心特性:同分区移动仅修改路径指针,无磁盘IO、速度极快!
  30. mv old.txt new.txt # 同目录 = 重命名文件/目录
  31. mv file.txt /home/ # 跨目录 = 移动文件
  32. mv dir1 /data/ # 移动整个目录(无需加-r,比cp高效百倍)
  33. mv -f file.txt /data/ # 强制覆盖不提示
  34. mv -n file.txt /data/ # 不覆盖已有文件(安全移动)
  35. mv -v file.txt /data/ # 可视化移动日志
  36. # ===================== 5. ln 软硬链接创建(面试TOP考点) =====================
  37. # 软链接(符号链接)= Windows快捷方式
  38. ln -s /etc/nginx/nginx.conf nginx.conf
  39. # 硬链接 = 同一文件多入口,共享inode
  40. ln source.txt hard_link.txt
  41. # 链接查看
  42. 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. # ===================== 1. cat 全量查看(小文件专属) =====================
  2. # 核心原理:一次性读取文件所有内容加载到终端,不适合大文件,容易卡顿刷屏
  3. cat test.txt # 查看文件全部内容
  4. cat -n test.txt # 显示所有内容+全局行号(报错定位行号必备)
  5. cat -b test.txt # 显示行号,空行不编号(更整洁,生产首选)
  6. cat -E test.txt # 每行末尾加$符号,快速排查行尾空格、换行符
  7. cat -s test.txt # 压缩连续空行,多个空行合并为一行
  8. # 拓展用法:多文件合并查看
  9. cat file1.txt file2.txt # 依次查看多个文件内容
  10. # ===================== 2. more 单向分页查看(中大文件基础分页) =====================
  11. # 核心特性:单向翻阅,仅支持向下翻页/翻行,看完自动退出
  12. more app.log # 分页查看文件内容
  13. more -10 app.log # 自定义每页展示10行
  14. # 专属操作快捷键
  15. # 空格 :向下翻一页
  16. # 回车 :向下翻一行
  17. # q :立即退出查看
  18. # Ctrl+F / Ctrl+B :快速翻页
  19. # ===================== 3. less 全能分页查看(生产首选、功能最强) =====================
  20. # 核心优势:支持上下翻阅、关键词搜索、行号查看、不会自动退出,适配超大日志文件
  21. less app.log # 打开文件,全能分页查看
  22. less -N app.log # 直接显示行号
  23. # 生产高频快捷键(必背)
  24. # /关键词 :向下搜索匹配关键词(日志查error核心)
  25. # ?关键词 :向上搜索匹配关键词
  26. # n :跳转下一个匹配结果
  27. # N :跳转上一个匹配结果
  28. # G :快速跳转到文件末尾
  29. # 1G :快速跳转到文件开头
  30. # 上下箭头 :逐行翻阅
  31. # q :退出查看
  32. # ===================== 4. head 查看文件头部(检索文件开头信息) =====================
  33. # 默认展示前10行,适配查看配置文件表头、日志开头规则
  34. head nginx.conf # 默认查看前10行
  35. head -n 20 nginx.conf # 自定义查看前20行
  36. head -n -5 test.txt # 查看全部内容,排除最后5行(小众实用)
  37. # ===================== 5. tail 查看文件尾部+实时日志监控(运维核心) =====================
  38. # 核心场景:线上实时监控运行日志、排查实时报错信息
  39. tail app.log # 默认查看最后10行
  40. tail -n 30 app.log # 自定义查看最后30行静态内容
  41. tail -n 100 app.log # 查看末尾100行,适配报错回溯
  42. # 实时监控核心参数(生产重中之重)
  43. tail -f app.log # 实时跟踪日志输出
  44. # 缺陷:日志被切割/删除重建后,监控链路中断,失效停止输出
  45. tail -F app.log # 强力实时监控(生产唯一推荐)
  46. # 优势:自动监听文件inode变化,日志切割、删除重建后自动重连,持续监控不中断
  47. # 组合用法:回溯100行并实时监控
  48. 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系统文件全量定位。补全高阶筛选参数、批量处理动作、底层原理、命令差异、生产实战场景、面试高频考点,无冗余冷门参数,完全适配线上排错、自动化脚本编写。

  1. # ===================== 四大查找命令核心定位 =====================
  2. # find:实时扫描磁盘,精准度最高、功能最全,支持多条件复合筛选、批量操作
  3. # locate:检索系统数据库,速度极快,存在时间延迟
  4. # which:仅查找可执行命令的二进制路径
  5. # whereis:查找命令二进制、配置、手册、源码全路径
  6. # ===================== 1. find 高阶全量用法(生产核心) =====================
  7. # 语法:find 查找路径 【筛选条件】 【执行动作】
  8. # 1.1 按文件名筛选(精准/模糊/忽略大小写)
  9. find /etc -name "nginx.conf" # 全盘精准查找指定文件
  10. find /var/log -name "*.log" # 模糊匹配批量查找日志文件
  11. find ./ -iname "DATA.TXT" # -i 忽略大小写匹配文件
  12. # 1.2 按文件类型筛选(精准过滤文件/目录/软链接)
  13. find ./ -type f # 只查找普通文件
  14. find ./ -type d # 只查找所有目录
  15. find ./ -type l # 只查找所有软链接文件
  16. find /dev -type b # 查找块设备文件(磁盘分区)
  17. # 1.3 按文件大小筛选(日志清理、大文件排查刚需)
  18. find ./ -size +100M # 查找大于100M的文件
  19. find ./ -size -10M # 查找小于10M的文件
  20. find ./ -size 50k # 查找等于50k的文件
  21. find / -size +1G # 全盘查找1G以上大文件(磁盘爆满排查)
  22. # 1.4 按时间筛选(文件归档、过期清理核心)
  23. # mtime:修改时间 atime:访问时间 ctime:属性变更时间
  24. find ./ -mtime -7 # 近7天修改的文件
  25. find ./ -mtime +30 # 30天前修改的过期文件
  26. find ./ -mmin -10 # 10分钟内修改的文件(实时排查)
  27. # 1.5 按权限/属主筛选(安全巡检、权限排查)
  28. find ./ -perm 777 # 查找权限为777的高危文件
  29. find /home -user root # 查找root属主文件
  30. find ./ -group nginx # 查找nginx属组文件
  31. # 1.6 多条件复合筛选(高阶用法)
  32. find ./ -name "*.log" -size +10M # 查找所有大于10M的日志文件
  33. find ./ -type f -mtime +15 -perm 644 # 15天前修改、权限644的普通文件
  34. # 1.7 核心高阶:find批量执行动作(生产脚本刚需)
  35. find /logs -name "*.log" -mtime +7 -delete # 直接删除7天前过期日志
  36. find ./ -name "*.tmp" -exec rm -f {} \; # 批量删除临时文件
  37. find /etc -name "*.conf" -exec cp {} /backup/ \; # 批量备份配置文件
  38. find ./ -type f -exec ls -lh {} \; # 批量展示文件详情
  39. # ===================== 2. locate 快速检索命令 =====================
  40. locate nginx.conf # 快速匹配含关键词的所有文件路径
  41. locate *.log # 批量匹配日志文件
  42. updatedb # 更新系统检索数据库(核心依赖)
  43. # ===================== 3. which 命令路径查找 =====================
  44. which ls # 查看命令二进制可执行路径
  45. which java # 定位JDK真实安装路径
  46. which docker # 查找服务命令启动路径
  47. # ===================== 4. whereis 全方位文件定位 =====================
  48. whereis nginx # 输出:二进制路径+配置路径+手册路径
  49. whereis java # 全方位检索程序相关所有文件
  50. whereis -b nginx # 只查看二进制可执行文件
  51. 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. 高阶批量创建技巧(测试/脚本刚需) =====================
  2. # 1.1 有序批量创建文件(01-10规范命名,比1-10更规整)
  3. touch test{01..10}.txt
  4. # 1.2 有序批量创建多级目录
  5. mkdir -p project/{code,log,config,backup}
  6. # 1.3 混合批量创建(文件+目录一次性生成)
  7. mkdir dir{1..5} && touch file{1..5}.txt
  8. # 1.4 指定后缀批量创建日志文件
  9. touch {error,info,warn}.log
  10. # ===================== 2. 安全删除与清理实战(生产保命技巧) =====================
  11. # 2.1 安全清空大文件(禁止直接rm删正在写入的日志)
  12. cat /dev/null > big.log
  13. # 2.2 批量清空当前目录所有日志文件(不删除文件,只清空内容)
  14. find ./ -name "*.log" -exec truncate -s 0 {} \;
  15. # 2.3 安全删除:先移动备份,确认无误再彻底删除
  16. mv old_log/ /tmp/trash/
  17. # rm -rf /tmp/trash/ # 确认无问题后执行
  18. # 2.4 禁止高危裸删命令
  19. # 严禁:rm -rf /* 、 rm -rf / 、 rm -rf ./*(根目录下致命操作)
  20. # ===================== 3. 日志运维专属实战技巧 =====================
  21. # 3.1 日志实时监控最优组合(生产标准)
  22. tail -n 200 -F app.log
  23. # 3.2 排查历史报错:结合筛选快速定位异常
  24. tail -n 1000 app.log | grep -i error
  25. # 3.3 大日志查看最优命令,杜绝cat卡死终端
  26. less -N app.log
  27. # ===================== 4. 软硬链接生产实战用法 =====================
  28. # 4.1 软件版本切换(Nginx/Java版本切换神器)
  29. ln -sf /usr/local/nginx1.24 /usr/local/nginx
  30. # 4.2 日志统一归集(多目录日志汇总到统一路径)
  31. ln -sf /var/log/nginx/*.log /data/logs/
  32. # 4.3 重要文件防误删(硬链接备份)
  33. ln important.txt important_bak.txt
  34. # ===================== 5. find批量处理高阶实战(脚本核心) =====================
  35. # 5.1 批量删除7天前过期日志(生产日志清理标准命令)
  36. find /data/logs -name "*.log" -mtime +7 -delete
  37. # 5.2 批量备份所有配置文件到备份目录
  38. find /etc -name "*.conf" -exec cp {} /data/conf_backup/ \;
  39. # 5.3 批量修改所有目录权限
  40. find ./ -type d -exec chmod 755 {} \;
  41. # ===================== 6. 路径切换高效技巧 =====================
  42. # 6.1 双向快速切换两个工作目录(高频开发/运维场景)
  43. cd /data/project && cd -
  44. # 6.2 快速返回上多级目录简写
  45. cd ../..
  46. # 6.3 空白cd快速回家目录
  47. 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 全量高频命令高阶精讲(生产参数全覆盖)
  1. # ===================== 一、用户创建 useradd 完整高阶用法 =====================
  2. # 1. 默认创建:自动创建同名主组、自动生成家目录、默认登录bash
  3. useradd test01
  4. # 2. 生产标准创建(自定义UID、主组、家目录、登录shell,规范统一)
  5. useradd -u 1010 -g dev -m -d /home/dev01 -s /bin/bash dev01
  6. # 参数详解
  7. # -u 指定固定UID(企业规范:业务用户UID统一1000以上,不重复)
  8. # -g 指定主组(唯一主组,创建文件默认归属组)
  9. # -m 强制创建家目录(默认必备,防止无家目录报错)
  10. # -d 自定义家目录路径
  11. # -s 指定登录Shell
  12. # 3. 系统服务用户创建(禁止登录、无家目录,服务专用)
  13. useradd -u 950 -g nginx -s /sbin/nologin -M nginx
  14. # -M 不创建家目录,服务用户无需登录目录
  15. # ===================== 二、用户删除 userdel 安全用法 =====================
  16. userdel test01 # 仅删除用户账号,保留家目录、残留文件(易产生垃圾文件)
  17. userdel -r test01 # 生产首选:删除账号+清空家目录+邮箱数据,彻底无残留
  18. # ===================== 三、用户密码管理 passwd 全场景 =====================
  19. passwd # root修改自身密码
  20. passwd dev01 # root强制修改普通用户密码(无需原密码)
  21. passwd -l dev01 # 锁定用户账号(冻结登录,运维封禁账号必备)
  22. passwd -u dev01 # 解锁锁定账号,恢复登录权限
  23. passwd -d dev01 # 清空密码(无密码登录,生产严禁使用,存在安全漏洞)
  24. # ===================== 四、用户信息修改 usermod 高阶核心(重点避坑) =====================
  25. # 1. 追加附属组(生产最高频!!!)
  26. usermod -aG docker,netdev dev01 # -aG 追加多个附属组,不覆盖原有组权限
  27. # 2. 修改用户主组
  28. usermod -g ops dev01
  29. # 3. 修改登录Shell,禁止用户登录系统(离职账号、服务账号加固)
  30. usermod -s /sbin/nologin dev01
  31. # 4. 修改UID、家目录
  32. usermod -u 1011 dev01 # 修改用户UID
  33. usermod -m -d /home/newdev dev01 # 迁移并修改家目录
  34. # 致命禁忌:禁止单独使用 usermod -G !会清空原有所有附属组,导致权限丢失
  35. # ===================== 五、用户组管理 group 全套命令 =====================
  36. groupadd dev # 创建普通用户组
  37. groupadd -g 1010 dev # 指定GID创建用户组
  38. groupmod -n new_dev dev # 修改用户组名称
  39. groupdel dev # 删除空用户组(组内有用户禁止删除)
  40. # ===================== 六、用户信息排查命令(排错刚需) =====================
  41. id # 查看当前用户UID/GID/所有所属组
  42. id dev01 # 精准查看指定用户身份信息、权限组
  43. groups # 查看当前用户所有附属组+主组
  44. whoami # 快速确认当前登录账号
  45. w # 查看在线用户、登录终端、系统负载、操作时长
  46. who # 简洁查看在线登录用户
  47. # ===================== 七、用户切换环境深度用法 =====================
  48. su dev01 # 切换用户,保留原root环境变量(极易权限错乱)
  49. su - dev01 # 生产标准:完全切换用户环境,重置家目录、环境变量、工作目录
  50. # 核心区别:su - 等价完整登录系统,所有权限、环境完全匹配目标用户
复制代码

  1. # ===================== 1. 用户创建 useradd =====================
  2. # 基础创建普通用户,自动创建家目录、默认组
  3. useradd dev
  4. # 自定义参数创建用户(生产规范用法)
  5. useradd -u 1001 -g dev -m -s /bin/bash testuser
  6. # 参数解析
  7. # -u 指定UID、-g 指定主组、-m 自动创建家目录、-s 指定登录Shell
  8. # ===================== 2. 用户删除 userdel =====================
  9. userdel testuser # 仅删除用户,保留家目录数据
  10. userdel -r testuser # 彻底删除用户+家目录+邮箱数据(生产清理首选)
  11. # ===================== 3. 密码管理 passwd =====================
  12. passwd # root修改自身密码
  13. passwd dev # root修改指定用户密码
  14. passwd -l dev # 锁定用户(禁止登录,账号冻结)
  15. passwd -u dev # 解锁锁定用户
  16. passwd -d dev # 清空用户密码(无密码登录,生产禁止)
  17. # ===================== 4. 用户信息修改 usermod =====================
  18. usermod -aG docker dev # 追加附属组(核心!-a 追加不覆盖)
  19. usermod -g root dev # 修改用户主组
  20. usermod -s /sbin/nologin dev # 禁止用户登录系统(服务账号专用)
  21. usermod -u 1002 dev # 修改用户UID
  22. # ===================== 5. 用户组管理 groupadd/groupdel =====================
  23. groupadd dev # 创建自定义用户组
  24. groupdel dev # 删除空用户组
  25. groupmod -n newdev dev # 修改用户组名称
  26. # ===================== 6. 用户信息查看(排查刚需) =====================
  27. id # 查看当前用户UID/GID/所属所有组
  28. id dev # 查看指定用户详细权限信息
  29. groups # 查看当前用户所属组列表
  30. whoami # 查看当前登录用户名
  31. w/ who # 查看在线用户及操作状态
  32. # ===================== 7. 用户切换与权限提升 =====================
  33. su dev # 切换用户,保留原环境变量
  34. su - dev # 完全切换用户,加载全新环境、家目录(生产标准)
  35. sudo command # 临时借用root权限执行单条命令
  36. 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权限作用完全不同,不能混用配置规则,具体差异化场景如下:

  • 文件权限核心逻辑:聚焦「内容操作」 r:可读内容、w:可改内容、x:可运行程序; 普通静态文件(配置、日志、文本)无需x权限,仅脚本、程序必须配置x权限。

  • 目录权限核心逻辑:聚焦「准入与管理」 x权限是目录的基础必备权限,无x权限时,即便拥有rw权限,也无法cd进入目录、无法读取内部文件内容、无法执行任何操作; 目录w权限仅控制内部文件增删改,不影响目录本身的访问准入。

3.5 高频标准权限组合详解(生产通用模板)

生产环境禁止随意配置权限,统一遵循固定组合,适配99%业务场景,杜绝权限漏洞与业务报错:

  • 644(rw-r--r--):普通文件默认权限 所有者可读写,组用户、其他用户仅可读; 适配:配置文件、日志文件、文本文件、静态资源,生产最安全通用权限。

  • 755(rwxr-xr-x):目录/程序默认权限 所有者可读写执行,组用户、其他用户可读可执行; 适配:业务目录、脚本文件、可执行程序、软件安装目录。

  • 700(rwx------):私密文件专属权限 仅所有者拥有所有权限,其他用户无任何权限; 适配:密钥文件、密码配置、隐私证书、数据库配置文件,最高安全级别。

  • 600(rw-------):私密文本文件权限 仅所有者可读写,无任何对外开放权限; 适配:账号密码配置、私密日志、核心业务配置文件。

3.6 权限修改双模式实操(符号+数字全覆盖)
3.6.1 符号授权模式(精准局部修改,安全可控)

适合仅修改单一权限、不改动原有其他权限的场景,新手首选,无权限错乱风险。

  1. # 语法:chmod 权限主体(ugoa)±= 权限(rwx) 文件/目录
  2. chmod u+x start.sh # 给所有者新增执行权限(脚本必备)
  3. chmod g-w test.txt # 移除所属组写权限,防止误改
  4. chmod o-rwx secret.key # 清空其他用户所有权限,保护私密文件
  5. chmod a+r log.log # 所有用户新增读权限
  6. chmod g=rx dir/ # 强制设置所属组权限为读+执行,覆盖原有权限
复制代码

3.6.2 数字授权模式(生产主流,简洁高效)

通过权限数值累加直接赋值,一次性覆盖三段所有权限,线上运维、脚本自动化首选。

  1. # 基础标准授权
  2. chmod 644 nginx.conf # 普通配置文件标准权限
  3. chmod 755 /data/nginx # 业务目录标准权限
  4. chmod 700 ssh.key # 密钥文件私密权限
  5. chmod 600 user.pass # 密码配置文件权限
  6. # 递归批量授权(目录全局统一权限)
  7. chmod -R 755 /home/project/ # 目录及内部所有文件递归赋权
  8. chmod -R 644 /etc/conf/ # 批量统一配置文件权限
复制代码

3.7 权限修改全量命令(chmod+chown 完整版|生产全参数+避坑+批量运维)

Linux权限修改核心分为两大命令:chmod(修改读写执行权限)chown(修改文件/目录属主属组),二者搭配实现完整权限管控。本节补全官方高频参数、混合权限赋值、递归批量操作、权限重置、特殊权限叠加、生产易错坑点,覆盖99%权限运维场景,是权限排错、安全加固的核心实操模块。

3.7.1 chmod 权限修改全量用法(rwx普通权限+特殊权限全覆盖)

chmod 仅管控rwx基础权限+SUID/SGID/Sticky特殊权限,不修改文件归属用户/用户组,支持符号授权、数字授权、特殊权限叠加三种模式。

  1. # ===================== 一、符号授权(精准局部修改,无权限覆盖风险) =====================
  2. # 语法:chmod [用户身份][±=][权限] 文件/目录
  3. # 身份:u(所有者)、g(所属组)、o(其他)、a(全部)
  4. # 动作:+(新增权限)、-(移除权限)、=(强制赋值权限,覆盖原有)
  5. # 1. 单身份精准改权
  6. chmod u+x start.sh # 所有者新增执行权限(脚本、程序必备)
  7. chmod g-w nginx.conf # 移除所属组写权限,防止配置被误改
  8. chmod o-rwx secret.key # 清空其他用户所有权限,保护私密文件
  9. chmod g=rx /data/project # 强制给所属组赋值读+执行权限,清空原有多余权限
  10. # 2. 多身份同时改权(逗号分隔,无空格)
  11. chmod u+x,g-w,o-r app.sh # 所有者加执行、组去写、其他清空所有权限
  12. chmod a-w test.txt # 所有用户移除写权限,全局只读
  13. # 3. 全局统一赋值权限
  14. chmod a=r test.log # 所有用户仅保留读权限,无写、无执行
  15. # ===================== 二、数字授权(生产主流,一次性全覆盖权限) =====================
  16. # 权限数值:r=4、w=2、x=1,三段数值分别对应u/g/o,累加赋值
  17. chmod 644 *.txt # 批量普通文件标准权限:rw-r--r--
  18. chmod 755 /data/* # 批量目录/脚本标准权限:rwxr-xr-x
  19. chmod 700 /root/ssh/* # 私密密钥最高权限:仅所有者全权
  20. chmod 600 database.pwd # 密码配置文件权限:仅所有者读写
  21. # ===================== 三、递归批量授权(目录全局统一权限) =====================
  22. # -R 递归作用于目录内所有文件、子目录(生产高频,谨慎使用)
  23. chmod -R 755 /home/www/ # 业务目录全局赋予755权限
  24. chmod -R 644 /etc/nginx/conf.d/ # 批量统一配置文件只读权限
  25. # 递归授权进阶:区分文件/目录单独赋权(高阶避坑)
  26. find /data/project -type d -exec chmod 755 {} \; # 所有目录赋755
  27. find /data/project -type f -exec chmod 644 {} \; # 所有文件赋644
  28. # ===================== 四、特殊权限叠加(基础+特殊权限组合) =====================
  29. # 特殊权限数值:SUID=4000、SGID=2000、Sticky=1000
  30. chmod 4755 /usr/bin/testcmd # 赋予SUID权限,普通用户执行临时拥有所有者权限
  31. chmod 2755 /data/share # 赋予SGID权限,目录内文件自动继承所属组
  32. chmod 1777 /tmp/test # 赋予Sticky粘滞位,共享目录防互删文件
复制代码

3.7.2 chown 属主属组修改全量用法(权限归属核心)

chown 专门修改文件/目录的所有者、所属组,不改变rwx权限,服务启动报错、文件权限归属异常,90%可通过chown修复,支持单改属主、单改属组、同时修改、递归批量修改。

  1. # ===================== 一、基础单文件修改 =====================
  2. chown nginx test.conf # 仅修改文件所有者为nginx,所属组不变
  3. chown :nginx test.conf # 仅修改文件所属组为nginx,所有者不变
  4. chown nginx:nginx test.conf # 同时修改属主、属组为nginx(生产最常用)
  5. # ===================== 二、递归批量修改目录归属(业务部署刚需) =====================
  6. chown -R nginx:nginx /var/log/nginx/ # 递归统一nginx日志目录归属
  7. chown -R mysql:mysql /data/mysql/ # 修复数据库目录权限归属(启动报错必备)
  8. # ===================== 三、高阶精准修改(避坑优化) =====================
  9. # 仅修改目录归属,不改动内部文件
  10. find /data/project -type d -exec chown nginx:nginx {} \;
  11. # 仅修改文件归属,不改动目录
  12. find /data/project -type f -exec chown nginx:nginx {} \;
  13. # ===================== 四、特殊场景:同步归属权限 =====================
  14. chown --reference=src.txt dest.txt # 参考src文件权限,同步dest的属主属组
复制代码

3.7.3 权限重置与故障修复命令(排错专属)

针对权限错乱、递归误改、系统文件权限异常等故障,提供标准化重置命令,适配服务器权限修复、业务报错急救场景。

  1. # 1. 目录权限全局标准重置
  2. find /data/business -type d -exec chmod 755 {} \; -exec chown 业务用户:业务组 {} \;
  3. # 2. 配置文件全局标准重置
  4. find /etc/xxx -type f -exec chmod 644 {} \; -exec chown root:root {} \;
  5. # 3. 私密文件权限强制重置
  6. chmod 600 *.key *.pwd *.secret
  7. chmod 700 /root/.ssh/
  8. # 4. 清空所有特殊权限(修复提权漏洞)
  9. 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 生产标准权限修复模板(直接套用)
  1. # 业务站点目录标准权限修复(Nginx/Apache通用)
  2. find /usr/local/nginx/html -type d -exec chmod 755 {} \;
  3. find /usr/local/nginx/html -type f -exec chmod 644 {} \;
  4. chown -R nginx:nginx /usr/local/nginx/html
  5. # 服务日志目录标准权限修复
  6. find /var/log/nginx -type d -exec chmod 755 {} \;
  7. find /var/log/nginx -type f -exec chmod 644 {} \;
  8. chown -R nginx:nginx /var/log/nginx
  9. # 密钥SSH目录安全权限修复(防登录漏洞)
  10. chmod 700 /root/.ssh
  11. chmod 600 /root/.ssh/id_rsa
  12. chown -R root:root /root/.ssh
复制代码

  1. # ===================== 1. chmod 修改权限(符号/数字两种方式) =====================
  2. # 符号权限:精准修改单一权限,不影响原有权限
  3. chmod u+x test.sh # 所有者增加执行权限
  4. chmod g-w test.txt # 所属组去除写权限
  5. chmod o-rwx test.txt # 其他用户清空所有权限
  6. chmod a+r test.txt # 所有用户增加读权限
  7. # 数字权限:生产主流、简洁高效
  8. chmod 644 test.txt # u=rw- g=r-- o=r-- 普通文件默认权限
  9. chmod 755 testdir # u=rwx g=rx o=rx 目录默认权限
  10. chmod 700 secret.key # 仅所有者可读写执行,私密文件专属
  11. # 递归修改目录所有文件权限(批量运维刚需)
  12. chmod -R 755 /data/project
  13. # ===================== 2. chown 修改属主属组 =====================
  14. chown root:nginx test.conf # 同时修改所有者为root、所属组为nginx
  15. chown nginx test.conf # 仅修改所有者
  16. chown :nginx test.conf # 仅修改所属组
  17. # 递归批量修改目录属主属组
  18. 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. # 1. SUID 特殊权限(文件专属)
  2. # 作用:普通用户执行该文件时,临时拥有文件所有者权限
  3. chmod u+s /usr/bin/passwd # passwd命令默认带SUID,普通用户可改自己密码
  4. # 2. SGID 特殊权限(文件/目录均可)
  5. # 作用:目录内新建文件自动继承目录所属组
  6. chmod g+s /data/share
  7. # 3. Sticky 粘滞位(仅目录专属,/tmp默认权限)
  8. # 作用:目录内文件仅文件所有者/root可删除,他人无法误删
  9. chmod o+t /tmp
复制代码

4.2 Ext文件系统隐藏权限(企业安全加固必备)

隐藏权限优先级高于普通rwx权限,即使是root用户也会被限制,常用于重要配置、日志文件防篡改、防删除。

  1. # 查看文件隐藏权限
  2. lsattr /etc/nginx/nginx.conf
  3. # +i 不可变权限(最高安全级别)
  4. chattr +i /etc/passwd # 锁定文件:任何人(root)无法修改、删除、重命名
  5. chattr -i /etc/passwd # 解除锁定
  6. # +a 追加权限(日志文件专属)
  7. chattr +a /var/log/nginx.log # 仅允许追加写入,禁止修改、删除、覆盖
  8. 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权限瘫痪、无法提权修复系统故障

  1. # 唯一合法编辑命令:自带语法校验、保存自动检测错误
  2. visudo
  3. # 拓展:编辑sudoers.d自定义配置(企业最佳实践,拆分权限、便于维护)
  4. visudo /etc/sudoers.d/dev-user
  5. # 语法校验命令(修改后手动校验,规避隐性错误)
  6. visudo -c
  7. # 查看当前用户所有sudo授权权限、权限限制、免密状态
  8. sudo -l
  9. sudo -ll # 详细模式,展示完整授权规则
复制代码

5.4 Sudo配置语法全解(核心模板)

标准配置语法:用户/组 主机=(切换身份) 授权命令列表 [免密参数]

  • 用户/组:单个用户直接写用户名,用户组需加%前缀(例:%dev)

  • 主机:允许执行sudo的主机IP/主机名,ALL代表所有主机

  • 切换身份:(ALL)代表可切换所有用户,(root)代表仅切换root

  • 授权命令:绝对路径命令(精准管控),ALL代表所有root权限

  • 免密参数:NOPASSWD: 免密执行,无需输入用户密码

5.5 全场景生产授权模板(直接落地使用)
5.5.1 超级管理员授权(全权运维)
  1. # 允许dev用户所有主机、所有root权限,执行需输自身密码
  2. dev ALL=(ALL) ALL
  3. # 免密全权授权(自动化运维账号专用,禁止普通运维使用)
  4. admin ALL=(ALL) NOPASSWD: ALL
复制代码

5.5.2 精细化单类命令授权(最小权限核心场景)
  1. # 1. 仅授权Nginx服务启停、重载、查看状态
  2. dev ALL=(ALL) /usr/bin/systemctl start nginx,/usr/bin/systemctl stop nginx,/usr/bin/systemctl restart nginx,/usr/bin/systemctl status nginx
  3. # 2. 仅授权网络排查命令
  4. dev ALL=(ALL) /usr/bin/ping,/usr/bin/curl,/usr/bin/ss,/usr/bin/netstat
  5. # 3. 仅授权日志查看、文件查询命令(禁止删除/修改高危操作)
  6. dev ALL=(ALL) /usr/bin/less,/usr/bin/tail,/usr/bin/head,/usr/bin/find -name *
复制代码

5.5.3 批量授权用户组(团队统一权限)
  1. # 给dev组所有用户授权开发常用运维命令
  2. %dev ALL=(ALL) /usr/bin/systemctl status *,/usr/bin/tail *,/usr/bin/curl,/usr/bin/ip
复制代码

5.5.4 免密精细化授权(脚本专属)
  1. # 仅免密执行指定备份脚本,禁止其他免密操作
  2. script ALL=(ALL) NOPASSWD: /root/backup.sh,/root/clean_log.sh
复制代码

5.5.5 受限参数授权(极致安全管控)
  1. # 仅允许修改指定配置文件,禁止修改其他系统配置
  2. 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 基础必备配置(生产通用模板)

严格遵循「最小权限原则」,区分管理员、普通运维、开发人员三类账号权限,杜绝权限泛滥。

  1. # 核心编辑命令(唯一合法方式,严禁vim直接改文件)
  2. visudo
  3. # 自定义配置文件拆分(企业最佳实践,权限隔离、便于维护)
  4. visudo /etc/sudoers.d/ops-auth
  5. # 配置语法校验(修改后必执行,规避语法报错)
  6. visudo -c
  7. # 1. 超级管理员账号(运维负责人,完整权限)
  8. admin ALL=(ALL:ALL) ALL
  9. # 2. 普通运维账号(仅系统运维权限,无高危篡改权限)
  10. ops ALL=(ALL) /usr/bin/systemctl,/usr/bin/journalctl,/usr/bin/ss,/usr/bin/lsof,/usr/bin/top,/usr/bin/free
  11. # 3. 开发账号(仅日志查看、服务状态查询,禁止启停服务、改配置)
  12. 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. # 1. 专属脚本免密执行(精准授权,最小权限)
  2. robot ALL=(ALL) NOPASSWD: /root/auto-backup.sh,/root/log-clean.sh,/usr/local/monitor/start.sh
  3. # 2. 定时任务常用命令免密(无需人工干预)
  4. cron-user ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx,/usr/bin/mkdir,/usr/bin/rm
  5. # 3. 全局免密(仅测试环境使用,生产环境严禁配置)
  6. test-user ALL=(ALL) NOPASSWD: ALL
复制代码

5.10.3 用户组批量授权(团队统一权限管理)

企业多人团队运维,优先通过用户组授权,无需逐个配置用户,权限迭代、人员离职更便捷。

  1. # 1. 运维组全权运维
  2. %ops-group ALL=(ALL) ALL
  3. # 2. 开发组受限授权(仅查询、日志排查权限)
  4. %dev-group ALL=(ALL) /usr/bin/tail,/usr/bin/less,/usr/bin/grep,/usr/bin/curl,/usr/bin/ping
  5. # 3. 测试组专属服务权限(仅管控测试环境服务)
  6. %test-group ALL=(ALL) /usr/bin/systemctl start tomcat,/usr/bin/systemctl stop tomcat,/usr/bin/systemctl status tomcat
复制代码

5.10.4 精细化参数受限授权(极致安全管控)

高阶安全配置,限制用户仅能操作指定文件、指定参数,杜绝权限溢出,适配核心生产环境。

  1. # 1. 仅允许编辑指定Nginx配置文件,禁止修改其他系统配置
  2. ops ALL=(ALL) /usr/bin/vim /etc/nginx/nginx.conf,/usr/bin/vim /etc/nginx/conf.d/*.conf
  3. # 2. 仅允许重启指定业务服务,禁止操作数据库、系统服务
  4. dev ALL=(ALL) /usr/bin/systemctl restart app-service,/usr/bin/systemctl status app-service
  5. # 3. 仅允许备份指定目录,无删除、修改权限
  6. backup-user ALL=(ALL) /usr/bin/tar zcvf /data/backup/*.tar.gz /data/project/
复制代码

5.10.5 sudo权限查询与审计实战

日常运维必备,快速核查用户权限、溯源操作记录,满足企业安全合规巡检要求。

  1. # 1. 查看当前用户所有sudo授权权限(简洁模式)
  2. sudo -l
  3. # 2. 查看完整权限详情、授权规则、免密状态(详细模式)
  4. sudo -ll
  5. # 3. 查看指定用户权限
  6. sudo -l -U dev
  7. # 4. 溯源所有sudo操作日志(核心审计)
  8. # 查看安全日志(CentOS/Rocky)
  9. grep sudo /var/log/secure
  10. # 查看系统日志(Ubuntu/Debian)
  11. grep sudo /var/log/auth.log
  12. # 5. 统计今日sudo操作记录
  13. grep sudo /var/log/secure | grep "$(date +%d/%b)"
复制代码

5.10.6 生产高频故障实战修复

汇总线上90%sudo权限故障,提供标准化修复方案,快速排错。

  1. # 故障1:用户不在sudoers文件中
  2. # 解决方案:visudo 新增用户/组授权,或加入wheel附属组(CentOS)
  3. usermod -aG wheel ops
  4. # 故障2:sudo语法报错、权限失效
  5. # 解决方案:校验语法并修复
  6. visudo -c
  7. # 故障3:免密配置不生效,仍需输入密码
  8. # 根因:普通权限规则覆盖免密规则
  9. # 解决方案:将NOPASSWD配置放到sudoers文件末尾,优先级最高
  10. # 故障4:sudoers.d自定义配置不生效
  11. # 根因:配置文件权限异常
  12. # 解决方案:强制标准化权限
  13. chmod 440 /etc/sudoers.d/*
  14. chown root:root /etc/sudoers.d/*
  15. # 故障5:sudo命令提示权限不足、授权命令无法执行
  16. # 根因:使用相对路径授权
  17. # 解决方案:查询命令绝对路径,重新授权
  18. which systemctl
  19. # 替换为绝对路径配置 /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 核心高频基础参数(生产必背)
  1. # 基础精准匹配
  2. grep "error" app.log # 匹配包含error的所有行(区分大小写)
  3. grep -i "warn" app.log # -i 忽略大小写匹配(warn/WARN/Warn全部匹配)
  4. grep -v "info" app.log # -v 反向匹配,过滤掉包含info的行(排查报错屏蔽冗余日志)
  5. grep -n "timeout" app.log # -n 显示匹配行的行号(精准定位报错代码/日志行)
  6. grep -c "success" app.log # -c 统计匹配到的总行数(统计成功请求数、报错次数)
  7. grep -o "http://.*" app.log # -o 只输出匹配到的内容,不输出整行(精准提取指定字段)
  8. grep -q "fail" app.log # -q 静默匹配,不输出内容,仅返回执行状态(脚本判断专用)
  9. # 高亮显示匹配内容(终端可视化,默认开启)
  10. grep --color=auto "error" app.log
  11. # 匹配前后行查看(报错上下文排查刚需)
  12. grep -A5 "Exception" app.log # -A n 显示匹配行及后5行(After)
  13. grep -B5 "Exception" app.log # -B n 显示匹配行及前5行(Before)
  14. grep -C5 "Exception" app.log # -C n 显示匹配行及前后5行(Context,上下文完整排查)
复制代码

1.3 递归检索与多文件匹配(全局排查必备)
  1. # 递归检索目录下所有文件(全局排查配置/日志)
  2. grep -r "port=8080" /etc/ # -r 递归检索/etc下所有文件,匹配包含8080端口的内容
  3. grep -R "root" /home/ # -R 递归检索,包含软链接文件(-r不跟进软链接)
  4. # 多文件批量匹配
  5. grep "404" access.log error.log # 同时匹配多个文件的404报错记录
  6. grep -l "debug" *.log # -l 只显示匹配成功的文件名(筛选含指定内容的文件)
  7. grep -L "debug" *.log # -L 只显示未匹配的文件名(筛选无指定内容的干净文件)
复制代码

1.4 正则表达式高阶匹配(精准筛选核心)

grep 默认支持基础正则,egrep 等价 grep -E 支持扩展正则,无需转义,适配复杂文本筛选场景。

  1. # 基础正则匹配
  2. grep "^2026" app.log # ^ 匹配行首:筛选2026年开头的日志行
  3. grep "log$" app.log # $ 匹配行尾:筛选以log结尾的文本行
  4. grep "[0-9]" app.log # 匹配任意数字
  5. grep "[a-zA-Z]" app.log # 匹配任意大小写字母
  6. grep "[^0-9]" app.log # 匹配非数字字符(反向区间匹配)
  7. # 扩展正则(egrep/grep -E 专用,生产复杂筛选首选)
  8. egrep "error|warn|fail" app.log # 匹配包含error或warn或fail的行(多条件或匹配)
  9. grep -E "timeout|retry" app.log # 等价egrep,无需转义竖线
  10. egrep "1[0-9]{2}" app.log # 匹配100-199数字(正则区间+次数匹配)
  11. egrep "^$" app.log # 匹配空行(清理文本空行刚需)
  12. # 精准匹配整词
  13. grep -w "root" /etc/passwd # -w 整词匹配,仅匹配独立root单词,不匹配root123、superroot
复制代码

1.5 生产高频组合实战命令(日志排查刚需)
  1. # 1. 过滤报错日志并显示上下文,定位异常堆栈
  2. grep -C10 "Exception" app.log
  3. # 2. 忽略大小写筛选所有报错,屏蔽冗余info日志
  4. grep -i "error|fail|timeout" app.log | grep -v "info"
  5. # 3. 统计当日报错总次数
  6. grep -ic "error" app.log
  7. # 4. 批量检索配置文件中所有端口配置
  8. grep -r "listen" /etc/nginx/
  9. # 5. 过滤非空行内容(清理文本冗余空行)
  10. grep -v "^$" test.txt
  11. # 6. 脚本中判断文件是否包含指定内容(静默匹配)
  12. 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 "^$" 文件名,反向匹配并过滤所有空行。

  1. grep "error" log.txt # 匹配包含error行
  2. grep -i "warn" # 忽略大小写
  3. grep -v "info" # 反向匹配
  4. grep -n "timeout" # 显示行号
  5. grep -r "port" /etc/ # 递归目录检索
  6. egrep "a|b" file # 扩展正则
复制代码

2. sed 流编辑器(替换、删除、新增)【生产完整版+原理+高阶实战+避坑精讲】

2.1 命令总述与核心原理

sed(Stream Editor)流式编辑器,是Linux批量文本编辑、配置修改、内容替换、行处理的核心工具,区别于vim交互式编辑,sed为非交互式逐行处理,默认仅处理输出内容、不修改原文件,适配大文件处理、批量配置变更、脚本自动化修改,无文件卡顿问题,是运维自动化、日志处理、配置迭代的刚需核心命令。

核心运行机制:逐行读取文件内容至模式空间 → 匹配规则执行编辑操作 → 输出处理后内容 → 清空模式空间,循环处理所有行,全程不加载完整文件,超大文件处理效率远超可视化编辑器。

核心优势:支持批量替换、精准增删指定行、正则匹配、批量文件修改、脚本无交互执行,适配线上批量改配置、日志脱敏、内容规整等高频生产场景。

2.2 核心参数与基础语法(生产必背)
  1. # sed 标准语法
  2. # sed [参数] '匹配规则+编辑操作' 文件名
  3. # 核心高频参数
  4. sed -n '操作' file # -n 静默模式,只输出匹配处理的行(默认输出所有行)
  5. sed -i '操作' file # -i 直接修改原文件(生产核心,慎用!)
  6. sed -e 规则1 -e 规则2 # 多规则叠加执行,支持一次执行多个编辑动作
  7. sed -r '规则' file # -r 支持扩展正则,无需转义特殊符号()|{}
  8. sed -f 脚本文件 file # 读取sed脚本文件执行批量编辑规则
  9. # 关键补充:-i 备份参数(生产高危操作必备)
  10. sed -i.bak 's/old/new/g' file # 修改原文件,同时生成file.bak备份文件,出错可回滚
复制代码

2.3 核心操作精讲:替换(生产最高频)

替换是sed最核心用法,支持基础字符串替换、全局替换、正则替换、指定行替换、分组替换,适配配置批量修改、内容脱敏、IP/端口迭代变更场景。

  1. # 基础替换语法:s/原内容/新内容/修饰符
  2. # 修饰符:g全局、n指定行、i忽略大小写
  3. # 1. 基础单行替换(只替换每行第一个匹配内容)
  4. sed 's/8080/8090/' nginx.conf
  5. # 2. 全局替换(整行所有匹配内容全部替换,生产必备g参数)
  6. sed 's/127.0.0.1/0.0.0.0/g' hosts
  7. # 3. 忽略大小写替换
  8. sed 's/error/success/gi' app.log
  9. # 4. 指定行范围替换(仅第5行替换 / 2-10行批量替换)
  10. sed '5s/enable/disable/g' config.ini
  11. sed '2,10s/localhost/192.168.1.100/g' nginx.conf
  12. # 5. 匹配关键词行替换(只替换包含指定内容的行)
  13. sed '/port/s/80/443/g' nginx.conf
  14. # 6. 正则分组替换(高阶脱敏、内容截取核心)
  15. # 匹配手机号并脱敏,保留前3后4位
  16. sed -r 's/(1[0-9]{2})[0-9]{4}([0-9]{4})/\1****\2/g' user.txt
  17. # 7. 特殊符号替换(斜杠/、点.无需转义,可自定义分隔符#@)
  18. sed 's#/usr/local/old#/usr/local/new#g' path.conf
  19. # 8. 直接修改原文件+备份(生产规范操作)
  20. sed -i.bak 's/debug/info/g' log.conf
复制代码

2.4 行操作:删除、插入、追加、替换整行

精准针对文件行维度操作,支持清空空行、删除指定行、首尾行新增内容、指定位置插入配置,适配配置文件规整、冗余内容清理、批量补全配置场景。

  1. # ========== 1. 删除操作 d ==========
  2. sed '3d' file.txt # 删除第3行
  3. sed '2,5d' file.txt # 删除2-5行
  4. sed '10,$d' file.txt # 删除第10行到末尾所有行
  5. sed '/^$/d' file.txt # 删除所有空行(文本规整刚需)
  6. sed '/#/d' file.txt # 删除所有含注释的行
  7. sed '/error/d' app.log # 删除含指定关键词的行
  8. # ========== 2. 追加操作 a(匹配行后新增内容) ==========
  9. sed '2a max_conn=1024' nginx.conf # 第2行后追加一行配置
  10. sed '/port/a timeout=60' nginx.conf # 匹配port行,后方追加超时配置
  11. sed '$a # end of config' file.txt # 文件末尾追加注释
  12. # ========== 3. 插入操作 i(匹配行前新增内容) ==========
  13. sed '1i # new config 2026' config.ini # 文件第一行插入头部注释
  14. sed '/listen/i # 端口配置' nginx.conf # 匹配行前方插入说明
  15. # ========== 4. 整行替换 c(覆盖替换整行内容) ==========
  16. sed '5c server_port=8090' config.ini # 第5行整行替换为新内容
  17. sed '/enable/c enable=false' service.conf # 匹配行直接覆盖整行
复制代码

2.5 高阶实用功能(生产脚本刚需)
  1. # 1. 多规则批量编辑(一次执行多个操作)
  2. sed -e 's/80/443/g' -e '/ssl/a ssl_on=true' nginx.conf
  3. # 2. 静默输出指定行内容(等同于精准截取文本)
  4. sed -n '10,20p' app.log # 只打印10-20行内容(p打印匹配行)
  5. sed -n '/error/p' app.log # 只输出含error的行,过滤冗余内容
  6. # 3. 批量修改目录下所有文件内容(全局配置迭代)
  7. sed -i 's/old_domain/new_domain/g' /etc/nginx/*.conf
  8. # 4. 注释指定行(配置临时禁用刚需)
  9. sed '30s/^/#/' config.ini # 第30行行首添加#注释
  10. sed '30s/^#//' config.ini # 取消第30行注释
  11. # 5. 空白行、冗余注释一键清理
  12. 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 核心语法与基础参数(生产必背)
  1. # awk 标准通用语法
  2. # awk [参数] 'BEGIN{初始化逻辑} 条件{执行动作} END{收尾统计逻辑}' 文件名
  3. # 核心高频参数
  4. awk -F ":" '{print $1}' file.txt # -F 指定字段分隔符(默认空格/制表符)
  5. awk -v num=10 '{print $1+num}' file # -v 自定义外部变量,传入awk逻辑
  6. awk 'NR>10' file.txt # NR 行号,筛选指定行数据
  7. awk -f awk脚本文件.awk file.txt # 读取awk脚本批量执行复杂逻辑
  8. # 核心内置变量(生产高频)
  9. # $0 整行所有内容
  10. # $1~$n 第1/2/n列字段
  11. # NR 当前处理行号(全局总行数)
  12. # NF 当前行字段总列数(自动统计列数)
  13. # FILENAME 当前处理文件名
  14. # FS 自定义输入分隔符(等价-F)
  15. # OFS 自定义输出分隔符(默认空格)
复制代码

3.3 基础列处理:字段提取与格式化输出

主打精准提取文本列、自定义输出格式,适配配置解析、日志字段截取、数据规整场景,是日常最简高频用法。

  1. # 1. 默认空格分隔:提取第1、3列字段
  2. awk '{print $1,$3}' access.log
  3. # 2. 自定义分隔符:解析冒号分隔文件(passwd、hosts等)
  4. awk -F ":" '{print "用户名:"$1,"UID:"$3}' /etc/passwd
  5. # 3. 自定义输出分隔符(替换默认空格为逗号/竖线)
  6. awk -F ":" -v OFS="|" '{print $1,$3,$7}' /etc/passwd
  7. # 4. 提取最后一列、倒数第二列(适配不确定列数文本)
  8. awk '{print $NF}' file.txt # 最后一列
  9. awk '{print $(NF-1)}' file.txt # 倒数第二列
  10. # 5. 输出整行内容(等价cat,用于数据筛选前置)
  11. awk '{print $0}' file.txt
  12. # 6. 过滤空行并输出有效内容
  13. awk 'NF>0' file.txt
复制代码

3.4 条件筛选与逻辑判断(精准数据过滤)

支持行号、字段数值、字符串匹配、多条件组合筛选,精准过滤目标日志、异常数据,替代多层grep筛选,命令更简洁精准。

  1. # 1. 行号筛选:只处理10-100行数据
  2. awk 'NR>=10 && NR<=100 {print $0}' file.txt
  3. # 2. 数值条件筛选:第三列数值大于1000的行(请求量、耗时筛选)
  4. awk '$3>1000 {print $0}' log.txt
  5. # 3. 字符串精准匹配:第一列为指定IP的访问日志
  6. awk '$1=="192.168.1.100" {print $0}' access.log
  7. # 4. 模糊匹配:包含error异常的日志行
  8. awk '/error|Exception/ {print $0}' app.log
  9. # 5. 反向匹配:过滤空行、注释行
  10. awk '!/^#/ && NF>0 {print $0}' config.ini
  11. # 6. 多条件组合:IP为指定段且请求耗时大于500ms
  12. awk '$1~/^10.0.0/ && $NF>500 {print $1,$NF}' access.log
  13. # 7. 三元运算简化输出(条件判断赋值)
  14. awk '$3>200 ? print "异常请求" : print "正常请求"' log.txt
复制代码

3.5 数值运算与批量统计(核心能力)

awk核心优势:支持逐行累加、求平均值、最大值、最小值、计数统计,无需嵌套多层命令,一站式完成数据汇总。

  1. # 1. 基础计数:统计有效数据总行数
  2. awk 'NF>0 {count++} END{print "有效总行数:",count}' log.txt
  3. # 2. 字段累加:统计所有请求总耗时
  4. awk '{sum+=$NF} END{print "请求总耗时:",sum,"ms"}' access.log
  5. # 3. 求平均值:计算平均请求耗时
  6. awk '{sum+=$NF;count++} END{print "平均耗时:",sum/count,"ms"}' access.log
  7. # 4. 最值统计:筛选最大/最小请求耗时
  8. awk 'BEGIN{max=0;min=999999} {if($NF>max) max=$NF;if($NF<min) min=$NF} END{print "最大耗时:",max,"最小耗时:",min}' access.log
  9. # 5. 条件统计:统计4xx/5xx异常请求总数
  10. awk '$9~/^4|^5/ {err++} END{print "异常请求总数:",err}' access.log
  11. # 6. 多维度统计:同时输出总请求、异常请求、正常请求
  12. awk '{total++} $9~/^4|^5/ {err++} END{ok=total-err;print "总请求:"total,"正常请求:"ok,"异常请求:"err}' access.log
复制代码

3.6 数组分组统计(日志分析核心·面试/生产Top1)

awk数组是日志分析的核心,可实现IP分组计数、接口访问频次、状态码统计、域名访问量排序,替代sort+uniq组合,效率更高、逻辑更清晰。

  1. # 1. 统计各IP访问次数(日志分析刚需)
  2. awk '{ip[$1]++} END{for(i in ip) print ip[i],"次",i}' access.log
  3. # 2. 统计各接口请求频次(按接口路径分组)
  4. awk '{uri[$7]++} END{for(u in uri) print uri[u],"次",u}' access.log
  5. # 3. 统计HTTP状态码分布(200/404/500占比)
  6. awk '{code[$9]++} END{for(c in code) print c,"状态码:",code[c],"次"}' access.log
  7. # 4. 统计单个IP总请求耗时、平均耗时
  8. awk '{ip[$1]++;sum[$1]+=$NF} END{for(i in ip) print i,"请求数:"ip[i],"总耗时:"sum[i],"平均耗时:"sum[i]/ip[i]}' access.log
  9. # 5. 异常IP批量统计(仅输出访问量大于100次的IP,排查攻击)
  10. awk '{ip[$1]++} END{for(i in ip) if(ip[i]>100) print ip[i],"高访问IP:",i}' access.log
复制代码

3.7 生产高频实战完整案例(直接复用)
  1. # 案例1:Nginx日志TOP10高频访问IP(排查CC攻击、异常访问)
  2. awk '{ip[$1]++} END{for(i in ip) print ip[i],i}' access.log | sort -nr | head -10
  3. # 案例2:统计当日所有5xx服务器异常请求,输出TOP10异常接口
  4. awk '$9~/^5/ {uri[$7]++} END{for(u in uri) print uri[u],u}' access.log | sort -nr | head -10
  5. # 案例3:筛选请求耗时超过1s的慢接口,精准排查性能瓶颈
  6. awk '$NF>1000 {print $1,$7,$9,$NF}' access.log
  7. # 案例4:统计接口请求平均耗时、最大耗时、总请求数
  8. 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
  9. # 案例5:过滤有效配置,输出纯净配置文件(清理注释、空行)
  10. awk 'NF>0 && !/^#/ {print $0}' nginx.conf > nginx_clean.conf
  11. # 案例6:批量提取系统所有普通用户(UID≥1000)
  12. awk -F ":" '$3>=1000 {print $1,$3}' /etc/passwd
  13. # 案例7:统计定时任务执行日志,筛选失败任务
  14. 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更简洁高效。

  1. # 核心语法:cut [参数] 文件名
  2. # 1. 按分隔符截取列(最常用)
  3. cut -d ":" -f1 /etc/passwd # -d指定分隔符:,-f1截取第1列(提取所有用户名)
  4. cut -d " " -f1,3 /var/log/access.log # 截取空格分隔的第1、3列字段
  5. cut -d "," -f2-5 data.csv # 截取逗号分隔的2-5列区间(适配csv表格文本)
  6. # 2. 按字符位置截取(固定长度文本)
  7. cut -c1-10 test.txt # 截取每行前10个字符
  8. cut -c5- test.txt # 截取第5字符到行尾
  9. # 3. 进阶参数
  10. cut -s file.txt # 静默模式,不输出无分隔符的残缺行
  11. cut --complement -f1 test.txt # 反向截取,排除第1列,输出剩余所有列
复制代码

4.2 sort 文本排序(数据规整核心)

核心作用:对文本行、数字、字母、IP、日志数据进行正序/倒序排序,默认按字典序排序,生产需手动适配数字、特殊场景排序规则。

  1. # 基础排序
  2. sort test.txt # 默认字典序正序(字母、字符排序)
  3. sort -r test.txt # -r 反向倒序排序
  4. # 核心生产参数(高频必用)
  5. sort -n num.txt # -n 纯数字排序(解决字典序10<2的问题)
  6. sort -nr num.txt # 数字倒序,适配TOP排名统计
  7. sort -k2 -n test.txt # -k 指定按第2列数字排序
  8. sort -t "," -k3 -nr data.csv # 逗号分隔,按第3列数字倒序排序
  9. # 去重排序
  10. sort -u test.txt # 排序并自动去除重复行
复制代码

4.3 uniq 去重统计(日志计数刚需)

核心原理:仅统计相邻重复行,必须搭配sort排序使用,否则无法统计全局重复数据,是IP访问量、接口频次、报错次数统计核心工具。

  1. # 基础去重
  2. uniq test.txt # 去除相邻重复行,保留单行
  3. # 核心生产参数
  4. uniq -c # -c 统计重复次数(最核心参数)
  5. uniq -d # 只输出重复的行
  6. uniq -u # 只输出唯一不重复的行
  7. # 生产标准组合(全局去重统计,必背)
  8. sort access.log | uniq -c # 先排序再统计全局重复数据
  9. sort -nr | uniq -c | sort -nr # 排序+计数+二次倒序,实现TOP排名
复制代码

4.4 wc 文本统计(行数/字数/字节数)

核心作用:快速统计文本行数、单词数、字节大小,适配日志行数统计、配置项计数、文件大小校验场景。

  1. # 核心参数
  2. wc -l test.txt # -l 统计文本总行数(生产最高频)
  3. wc -w test.txt # -w 统计文本单词数(空格分隔)
  4. wc -c test.txt # -c 统计文件字节大小
  5. wc -L test.txt # -L 统计文本最长行的字符长度
  6. # 实战组合用法
  7. grep "error" app.log | wc -l # 统计日志报错总条数
  8. ls | wc -l # 统计当前目录文件总数
复制代码

4.5 diff & patch 文件对比与补丁更新

核心作用:diff对比两个文件差异,精准定位配置变更、代码修改内容;patch可批量应用补丁文件,实现配置、代码快速迭代更新。

  1. # diff 文件差异对比
  2. diff old.conf new.conf # 常规对比,输出差异行
  3. diff -u old.conf new.conf # -u 统一格式对比(清晰展示上下文,生产首选)
  4. diff -r dir1 dir2 # -r 递归对比两个目录下所有文件差异
  5. diff -q file1 file2 # -q 仅判断文件是否不同,不展示详情
  6. # patch 补丁更新
  7. diff -u old.txt new.txt > update.patch # 生成补丁文件
  8. patch old.txt update.patch # 应用补丁,更新文件内容
  9. patch -R old.txt update.patch # 回滚补丁,恢复原文件
复制代码

4.6 tr 字符替换与删除(简单文本清洗)

核心作用:批量替换、删除、压缩重复字符,专注单字符维度处理,适合大小写转换、空格清理、特殊字符过滤,轻量场景替代sed。

  1. # 字符替换
  2. tr "a-z" "A-Z" < test.txt # 小写全部转大写
  3. tr " " "\n" < test.txt # 空格替换为换行
  4. # 字符删除
  5. tr -d "0-9" < test.txt # -d 删除所有数字字符
  6. tr -d "\r" < win.txt > linux.txt # 去除windows换行符,适配Linux格式
  7. # 压缩重复字符
  8. tr -s " " < test.txt # -s 压缩多个连续空格为单个空格
复制代码

4.7 高频组合实战(生产直接复用)
  1. # 1. 统计TOP10高频访问IP(日志分析标配)
  2. awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
  3. # 2. 清洗文本:去空行、去重复、规整排序
  4. grep -v "^$" test.txt | sort -u
  5. # 3. 统计配置文件有效配置行数(过滤空行、注释)
  6. grep -v "^#" nginx.conf | grep -v "^$" | wc -l
  7. # 4. 批量转换文本小写、清理多余空格
  8. tr "A-Z" "a-z" < data.txt | tr -s " "
  9. # 5. 对比新旧配置差异,只输出变更内容
  10. diff -u nginx.old.conf nginx.new.conf
复制代码

4.8 核心避坑要点(生产必看)
  • uniq核心坑:uniq仅识别相邻重复行,单独使用无法统计全局重复数据,必须先执行sort排序再去重统计。

  • sort排序坑:默认字典序排序,数字10会判定小于2,统计数值、流量、次数必须加-n数字排序参数。

  • cut分隔符坑:仅支持单一固定分隔符,不规则混合分隔符文本,优先使用awk处理。

  • tr功能局限:仅支持单字符处理,不支持字符串批量替换、多行匹配,复杂替换必须用sed。

  • diff对比坑:默认格式杂乱,生产对比配置、文件差异统一用diff -u格式,上下文清晰、便于复盘。

  1. cut -d: -f1 /etc/passwd # 截取列
  2. sort -n num.txt # 数字排序
  3. uniq -c # 去重并计数
  4. wc -l file # 统计行数
  5. wc -w # 单词数
  6. diff a b # 文件对比
复制代码

五、进程、系统资源、任务调度

1. 进程查看(全量精讲:生产参数+原理+指标解析+避坑+面试)

1.1 模块总述

进程是Linux系统资源调度的最小单元,所有服务、脚本、程序运行均依托进程存在。进程查看是服务排查、端口占用、资源溢出、僵尸进程清理、异常进程查杀的核心前置操作。本小节补全ps/top/pstree/pidof/pgrep全套命令、参数详解、指标含义、生产选型、高频坑点与面试考点,摒弃冷门参数,完全贴合线上运维排错场景。

1.2 静态进程查看 ps(快照式查看,固定瞬间进程状态)

ps 为静态快照查看命令,读取当前系统瞬间进程状态,无实时刷新,适合精准检索进程、查看进程参数、PID、资源占用、运行用户,是排查进程是否存在的核心命令。

  1. # 两大生产万能组合(必背,全覆盖进程信息)
  2. ps -ef # 标准全量查看:父PID、启动用户、完整命令、进程状态
  3. ps aux # 资源维度查看:CPU/内存占比、进程状态、常驻内存、虚拟内存
  4. # ===================== 参数详解 =====================
  5. # ps -ef 核心字段
  6. # UID 进程所属用户
  7. # PID 进程唯一ID(查杀、管控核心标识)
  8. # PPID 父进程ID(排查进程父子关系、僵尸进程必备)
  9. # STIME 进程启动时间
  10. # TIME 进程占用CPU总时长
  11. # CMD 进程启动完整命令
  12. # ps aux 核心字段(运维排错重点)
  13. # USER 进程运行用户
  14. # PID 进程ID
  15. # %CPU CPU占用百分比
  16. # %MEM 物理内存占用百分比
  17. # VSZ 虚拟内存占用
  18. # RSS 实际物理内存占用
  19. # STAT 进程状态(核心排查字段,下文详解)
  20. # START 进程启动时刻
  21. # TIME CPU累计占用时间
  22. # COMMAND 进程启动命令
  23. # ===================== 精准检索进程(生产高频) =====================
  24. ps -ef | grep nginx # 检索指定服务所有进程
  25. ps aux | grep java # 过滤Java进程,排查服务运行状态
  26. ps -ef | grep -v grep # 过滤grep自身进程,纯净输出结果
  27. # ===================== 进阶精准查看 =====================
  28. ps -p 12345 # 查看指定PID进程详细信息
  29. ps -L 12345 # 查看进程下所有线程(线程排查必备)
  30. ps aux --sort=-%cpu # 按CPU占用倒序排序,快速定位高负载进程
  31. 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飙高、内存溢出的核心命令。

  1. # 基础实时监控
  2. top # 全局进程动态监控
  3. top -d 1 # 1秒刷新一次(高频排查刚需)
  4. top -p 12345 # 仅监控指定PID进程动态
  5. top -u nginx # 仅查看指定用户的所有进程
  6. # ===================== top 交互快捷键(生产必背) =====================
  7. # P 按CPU占用倒序排序(默认)
  8. # M 按内存占用倒序排序
  9. # N 按PID倒序排序
  10. # T 按进程运行时间排序
  11. # 1 展开所有CPU核心负载
  12. # f 自定义展示字段
  13. # k 输入PID直接查杀进程
  14. # q 退出监控界面
  15. # shift+h 展示线程层级信息
  16. # ===================== 核心系统指标解读 =====================
  17. # load average: 1分钟、5分钟、15分钟系统负载
  18. # 单核CPU:负载≤1正常;多核CPU:负载≤核心数为正常
  19. # %Cpu(s):us用户进程、sy系统进程、id空闲CPU(id过低代表CPU满载)
  20. # Mem:总内存、已用、空闲、缓存占用
  21. # Swap:交换分区使用(Swap占用升高代表物理内存不足,严重卡顿)
复制代码

1.5 增强版进程监控 htop(极简高效,生产首选)

htop 是 top 的增强升级版,界面可视化、支持鼠标操作、颜色区分进程、操作快捷键更丰富,无需复杂交互,运维日常监控优先使用,系统默认未安装,需手动yum/apt安装。

  1. # 安装命令
  2. yum install htop -y # CentOS/Rocky
  3. apt install htop -y # Ubuntu/Debian
  4. # 基础用法
  5. htop # 可视化动态进程监控
  6. htop -u nginx # 筛选指定用户进程
复制代码

1.6 进程树查看 pstree(父子进程关系排查)

pstree 以树形结构展示进程父子嵌套关系,精准排查僵尸进程溯源、服务子进程堆积、进程挂靠异常,清晰展示主进程与衍生子进程的层级关系。

  1. # 基础用法
  2. pstree # 展示全量进程树
  3. pstree -p # 显示所有进程PID(核心参数,精准定位进程)
  4. pstree -u # 显示进程所属用户
  5. pstree nginx # 仅展示nginx服务进程树,过滤冗余进程
复制代码

1.7 精准获取进程 PID(pidof/pgrep 高效检索)

替代 grep 检索,专门用于快速获取进程PID、批量筛选进程,适配脚本自动化、批量查杀进程场景,输出更纯净、无冗余干扰。

  1. # pidof:精准获取进程PID(纯PID输出,适配脚本)
  2. pidof nginx # 输出nginx所有进程PID
  3. pidof java # 获取Java服务进程PID
  4. # pgrep:进阶进程筛选(支持模糊匹配、用户筛选)
  5. pgrep nginx # 仅输出进程PID
  6. pgrep -l nginx # 同时输出PID+进程名称(生产首选)
  7. pgrep -u root # 筛选root用户所有进程PID
  8. 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命令终止。

  1. ps -ef # 全量进程
  2. ps aux # CPU内存占用
  3. top # 实时资源监控
  4. htop # 增强版top(需安装)
  5. pstree # 进程树
  6. pidof nginx # 获取进程PID
  7. pgrep java
复制代码

2. 进程控制【生产完整版+信号原理+前后台调度+批量管控+避坑面试精讲】

2.1 模块总述

进程控制是Linux运维服务启停、异常进程查杀、后台任务托管、程序保活、批量进程管控的核心能力。区别于进程查看,本模块聚焦进程的干预、调度、终止、后台托管全操作,包含进程信号底层原理、前后台任务切换、优雅/强制杀进程、批量进程管控、nohup守护进程、生产高危坑点、面试核心考点,所有内容贴合线上服务运维、脚本自动化、故障应急场景。

2.2 进程信号核心原理(面试必考、杀进程底层逻辑)

Linux进程管控本质是向进程发送信号,kill/pkill等命令均为信号发送工具,不同信号对应不同进程处理逻辑,是区分优雅终止、强制终止的核心。

  1. # 查看所有进程信号列表
  2. kill -l
  3. # 三大生产核心信号(必背)
  4. # 1. SIGTERM 15 默认优雅终止信号
  5. # 作用:通知进程收尾、保存数据、关闭连接、释放资源后退出
  6. # 特点:可控、安全、不会丢失业务数据,生产首选默认信号
  7. kill -15 PID # 等价 kill PID
  8. # 2. SIGKILL 9 强制终止信号
  9. # 作用:系统强制回收进程,进程无权限、无时间收尾,直接销毁
  10. # 特点:暴力终止,容易丢失数据、产生僵尸进程、文件损坏
  11. # 适用场景:进程卡死、无响应、15信号无法终止的异常进程
  12. kill -9 PID
  13. # 3. SIGINT 2 中断信号
  14. # 作用:等同于终端 Ctrl+C,终止前台运行进程
  15. # 仅对前台活跃进程生效,后台进程无法接收该信号
  16. # 小众实用信号
  17. # SIGSTOP 19 暂停进程(挂起进程,不销毁、不释放资源)
  18. # SIGCONT 18 恢复暂停进程,继续运行
  19. # SIGHUP 1 重载配置、重启进程(Nginx/Tomcat热重载核心)
复制代码

2.3 进程终止全量命令(精准/批量/优雅/强制)

覆盖单进程精准查杀、按程序名批量查杀、筛选条件查杀,区分安全终止与强制终止场景,补齐生产选型规范与禁忌。

  1. # ========== 1. 精准PID进程查杀(单进程管控首选) ==========
  2. kill 12345 # 默认15信号,优雅终止进程(生产优先)
  3. kill -15 12345 # 显式优雅终止,等待进程资源释放、数据落地
  4. kill -9 12345 # 强制杀死卡死/无响应进程(谨慎使用)
  5. # ========== 2. 按程序名批量查杀(批量运维刚需) ==========
  6. pkill nginx # 批量优雅终止所有nginx进程
  7. pkill -9 java # 批量强制杀死所有java进程(应急收尾)
  8. pkill -f "test.jar" # 模糊匹配进程命令,精准查杀自定义脚本进程
  9. # ========== 3. 进阶批量查杀组合(生产高频) ==========
  10. # 筛选进程并优雅批量终止
  11. pgrep -f "app.jar" | xargs kill -15
  12. # 筛选卡死异常进程强制查杀
  13. pgrep -f "error_app" | xargs kill -9
  14. # ========== 4. 进程暂停与恢复 ==========
  15. kill -19 PID # 暂停进程运行(挂起,资源保留)
  16. kill -18 PID # 恢复暂停进程继续运行
复制代码

2.4 前后台进程调度(终端任务托管核心)

解决终端关闭任务中断、前台命令阻塞窗口问题,实现任务后台运行、脱离终端托管,是脚本、服务、压测任务运行的基础。

  1. # ========== 1. 后台运行符号 &(临时后台运行) ==========
  2. ./test.sh & # 脚本后台运行,终端可继续操作
  3. # 缺陷:关闭终端、断开远程连接,进程会自动终止(SIGHUP信号退出)
  4. # ========== 2. 后台任务查看与切换 ==========
  5. jobs # 查看当前终端所有后台任务
  6. jobs -l # 查看后台任务+对应PID(精准管控)
  7. fg 1 # 将编号1的后台任务切换到前台运行
  8. bg 1 # 将编号1的暂停任务,放入后台继续运行
  9. # ========== 3. 前台任务快速挂起 ==========
  10. # 快捷键 Ctrl+Z
  11. # 作用:暂停当前前台运行任务,自动放入后台暂停状态
复制代码

2.5 守护进程 nohup(生产后台服务标准)

nohup 核心作用:屏蔽SIGHUP信号,脱离终端运行,关闭远程终端、断开连接后,进程持续后台运行,是生产脚本、轻量服务后台托管标准方案。

  1. # 生产标准后台启动命令(万能模板,直接复用)
  2. nohup java -jar app.jar > app.log 2>&1 &
  3. # 命令逐段解析
  4. # nohup:屏蔽终端退出信号,进程脱离终端常驻后台
  5. # > app.log:标准输出日志写入日志文件
  6. # 2>&1:错误输出重定向到标准输出,统一存入日志文件
  7. # 末尾&:启动时直接放入后台运行
  8. # 进阶用法:不输出日志(极简后台运行)
  9. nohup ./run.sh > /dev/null 2>&1 &
  10. # 注意: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. # 1. 服务标准启停(优雅终止+重启)
  2. pgrep -f app.jar | xargs kill -15 && nohup java -jar app.jar > app.log 2>&1 &
  3. # 2. 异常进程应急查杀(预览+强制终止)
  4. pgrep -f "error_task" # 预览确认进程
  5. pgrep -f "error_task" | xargs kill -9
  6. # 3. 批量清理后台暂停任务
  7. jobs | grep Stopped | awk '{print $1}' | xargs kill -9
  8. # 4. 轻量脚本永久后台运行(无日志冗余)
  9. nohup ./task.sh > /dev/null 2>&1
复制代码
  1. kill -9 PID # 强制杀死进程
  2. kill -15 PID # 优雅终止
  3. pkill java # 按程序名杀进程
  4. & # 后台运行
  5. jobs # 查看后台任务
  6. fg 1 # 后台切前台
  7. bg 1 # 暂停任务后台运行
  8. nohup ./run.sh & # 脱离终端后台运行
复制代码
复制代码

3. 系统负载、内存、磁盘 IO【生产全量精讲+指标解读+排错流程+避坑面试】

3.1 模块总述

系统负载、内存、磁盘IO是服务器性能排查、卡顿溯源、资源瓶颈定位、线上故障排错的三大核心维度。90%的服务器响应慢、服务超时、接口卡顿、进程阻塞问题,均源于CPU负载过高、内存溢出、磁盘IO打满。本小节补全全套监控命令、核心指标底层含义、生产标准排查流程、高频坑点、性能调优规范与面试核心考点,完全适配企业运维、性能优化、故障应急场景。

3.2 系统CPU负载监控(uptime/top)核心解读

CPU负载代表CPU等待运行的任务总数,并非CPU使用率,是判断系统任务拥堵、调度瓶颈的核心指标,多核服务器必须结合核心数判断,是新手最易误解的知识点。

  1. # 1. 快速查看系统负载(最简核心命令)
  2. uptime
  3. # 输出字段解析:
  4. # 14:30:00 当前系统时间
  5. # up 30days 服务器运行时长
  6. # 2 users 当前在线用户数
  7. # load average: 0.25, 0.40, 0.35
  8. # 依次为:1分钟、5分钟、15分钟平均负载
  9. # 2. 负载高低判断标准(生产通用规范)
  10. # 单核CPU:负载 <1 正常,1~1.5 轻微拥堵,>2 严重过载卡顿
  11. # 多核CPU(N核):负载 <N 正常,N~1.2*N 负载偏高,>1.5*N 严重过载
  12. # 负载趋势:1min>5min>15min 代表负载持续升高,需紧急排查
  13. # 负载趋势:1min<5min<15min 代表负载逐步回落,系统恢复正常
复制代码

3.3 内存资源监控(free)原理+指标精讲

内存是服务运行的核心资源,内存不足会导致OOM进程被杀、服务闪退、系统卡顿、Swap频繁占用,本节精准区分缓存/可用内存/交换分区,纠正新手内存计算误区。

  1. # 查看内存、Swap使用情况(-h 人性化单位,生产必带)
  2. free -h
  3. # 核心字段解析(生产重点)
  4. # total:总内存大小
  5. # used:已使用内存(进程运行+缓存+缓冲区)
  6. # free:完全空闲内存(系统预留,不代表可用内存)
  7. # shared:共享内存
  8. # buff/cache:文件缓存、目录缓存、磁盘读写缓冲区
  9. # available:真正可用内存(生产判断内存余量唯一标准!)
  10. # Swap交换分区核心说明
  11. # Swap:硬盘虚拟内存,物理内存不足时,系统将闲置进程数据存入磁盘
  12. # 风险:Swap一旦持续占用,磁盘IO会飙升,系统严重卡顿、服务超时
  13. # 生产规范:正常服务器Swap使用率应趋近于0
  14. # 内存过载判断标准
  15. # 1. available持续过低,接近耗尽
  16. # 2. Swap占用持续升高(核心告警指标)
  17. # 3. 系统日志出现OOM killer进程杀死记录
复制代码

3.4 全局系统状态监控(vmstat)性能基线排查

vmstat是系统全局体检工具,一站式监控CPU、内存、磁盘IO、进程、系统调度状态,无需多命令切换,适合快速定位整机性能瓶颈。

  1. # 语法:vmstat 刷新间隔秒数 刷新次数
  2. vmstat 1 # 每秒刷新一次,持续监控(排错首选)
  3. vmstat 1 10 # 每秒刷新,共输出10次后退出
  4. # 核心关键字段解读(故障定位核心)
  5. ## 1. 进程字段
  6. # r:等待CPU运行的任务数(就绪队列,对应CPU负载)
  7. # b:不可中断阻塞进程数(D态进程,磁盘IO阻塞核心指标)
  8. ## 2. 内存字段
  9. # swpd:已使用Swap大小(数值持续上涨=内存不足)
  10. # free:空闲内存
  11. # buff:缓冲区
  12. # cache:文件缓存
  13. ## 3. IO字段
  14. # bi:磁盘读数据量
  15. # bo:磁盘写数据量
  16. # bi/bo持续过高 = 磁盘IO打满瓶颈
  17. ## 4. CPU字段
  18. # us:用户进程CPU占比(业务程序占用)
  19. # sy:系统内核CPU占比
  20. # id:空闲CPU(id持续趋近于0=CPU满载)
  21. # wa:IO等待CPU占比(wa过高=磁盘IO瓶颈,CPU空闲但等磁盘读写)
复制代码

3.5 磁盘IO专项监控(iostat)读写性能排查

磁盘IO是高频隐形性能瓶颈,CPU、内存充足但服务卡顿,90%为磁盘IO打满。iostat专门监控磁盘读写速度、IO等待、设备繁忙度,精准定位磁盘瓶颈。

  1. # 每秒刷新一次磁盘IO状态
  2. iostat 1
  3. # 核心关键指标(生产排错必看)
  4. # %util:磁盘设备繁忙百分比(核心指标)
  5. # 100%util:磁盘IO完全打满,所有读写请求阻塞,服务严重卡顿
  6. # avgqu-sz:IO请求队列长度,队列越长,拥堵越严重
  7. # 字段说明
  8. # tps:每秒IO读写次数
  9. # rMB/s:每秒读取数据量
  10. # wMB/s:每秒写入数据量
  11. # 磁盘IO瓶颈判定标准
  12. # 1. %util长期90%~100%
  13. # 2. wa(IO等待CPU占比)持续大于20%
  14. # 3. 业务接口响应缓慢、日志写入卡顿、文件操作超时
复制代码

3.6 网络流量监控(sar)带宽/报文排查

sar是系统综合统计工具,重点用于实时网络流量监控、历史性能回溯,排查带宽跑满、报文异常、网络拥堵问题。

  1. # 每秒刷新一次网络设备流量
  2. sar -n DEV 1
  3. # 关键字段解析
  4. # rxpck/s:每秒接收报文数
  5. # txpck/s:每秒发送报文数
  6. # rxkB/s:每秒接收流量
  7. # txkB/s:每秒发送流量
  8. # 网络异常判定
  9. # 流量持续打满带宽上限 = 带宽瓶颈
  10. # 报文数异常飙升 = 存在异常请求、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打满引发批量超时;

  • 性能问题排查遵循「先全局、后局部,先资源、后程序」的原则,快速定位瓶颈。

  1. uptime # 开机时间、1/5/15分钟负载
  2. free -h # 内存/交换分区使用率查看
  3. vmstat 1 # 系统全局状态每秒刷新(CPU/内存/IO综合监控)
  4. iostat 1 # 磁盘IO实时负载监控
  5. sar -n DEV 1 # 网络流量实时监控
  6. swapoff -a && swapon -a # 临时刷新Swap缓存
复制代码

  1. uptime # 开机时间、1/5/15分钟负载
  2. free -h # 内存/交换分区
  3. vmstat 1 # 系统全局状态每秒刷新
  4. iostat 1 # 磁盘IO负载
  5. sar -n DEV 1 # 网络流量监控
复制代码

4. 定时任务 crontab【生产完整版+语法精讲+实战场景+避坑面试】

4.1 模块总述

crontab 是 Linux 系统原生自带、无额外部署、稳定可靠的定时任务工具,是运维自动化的核心基础,广泛用于日志定期清理、数据定时备份、脚本周期执行、服务巡检、定时同步数据等生产场景。本节完整补全crontab底层语法、全量操作命令、特殊符号用法、系统级定时任务、生产高频场景、致命坑点与面试核心考点,覆盖99%线上定时任务需求。

4.2 核心语法标准(必背)

crontab 统一语法格式:分 时 日 月 周 执行命令/脚本,六段参数缺一不可,严格遵循「从左到右:分钟→小时→日期→月份→星期→任务」规则。

  1. # 标准语法格式
  2. # 分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-7) 执行任务
  3. # 周0和7均代表周日
  4. # 基础示例:每天凌晨3点执行备份脚本
  5. 0 3 * * * /root/backup.sh
复制代码

4.3 全量用户操作命令

crontab 区分当前用户任务系统全局任务,普通用户仅能编辑自身定时任务,root可管理所有用户任务。

  1. # 1. 编辑当前用户定时任务(核心命令)
  2. crontab -e # 编辑定时任务,不存在则新建,自带语法校验
  3. # 2. 查看当前用户所有定时任务
  4. crontab -l # 罗列所有已配置的定时任务
  5. # 3. 清空当前用户所有定时任务(高危!生产慎用)
  6. crontab -r # 直接清空全部任务,无确认提示、不可恢复
  7. crontab -ir # 带确认提示删除,安全删除首选
  8. # 4. 管理指定用户定时任务(仅root权限可用)
  9. crontab -u nginx -l # 查看nginx用户的定时任务
  10. crontab -u dev -e # 编辑普通用户dev的定时任务
  11. crontab -u dev -r # 清空指定用户定时任务
复制代码

4.4 五大特殊符号精讲(批量/周期定时核心)

特殊符号是实现复杂定时逻辑的关键,生产90%的灵活定时场景均依赖以下符号组合。

  • * 星号:代表「每一个单位」,全周期执行。例:分钟位* 代表每分钟、小时位* 代表每小时。

  • - 减号:代表「连续区间」。例:小时位8-18 代表8点到18点连续执行。

  • , 逗号:代表「离散多个时间点」。例:分钟位0,10,20 代表每小时的0分、10分、20分执行。

  • / 斜杠:代表「间隔周期」,实现轮询执行。例:*/5 代表每5个单位执行一次。

  • # 井号:注释符号,配置备注、禁用无效任务,被注释的任务不会执行。

  1. # 特殊符号实战示例
  2. */5 * * * * /root/test.sh # 每5分钟执行一次
  3. 0 8-18 * * * /root/run.sh # 每天8点-18点,整点执行
  4. 0 0,6,12,18 * * * /root/sync.sh # 每天0点、6点、12点、18点执行
  5. 0 2 * * 1-5 /root/work.sh # 每周一到周五凌晨2点执行
复制代码

4.5 生产高频定时场景(直接复用)

汇总运维日常刚需定时任务,覆盖日志清理、数据备份、巡检、同步、重启等核心场景,可直接复制使用。

  1. # 1. 每日凌晨3点清理7天前日志(生产日志清理标配)
  2. 0 3 * * * find /var/log -name "*.log" -mtime +7 -delete
  3. # 2. 每小时同步系统时间(解决时间偏差问题)
  4. 0 * * * * /usr/sbin/chronyc -a makestep
  5. # 3. 每周日凌晨2点全量数据备份
  6. 0 2 * * 0 /root/data_backup.sh
  7. # 4. 工作日(周一至周五)9点自动重启Nginx
  8. 0 9 * * 1-5 systemctl restart nginx
  9. # 5. 每10分钟检测服务状态,异常自动重启
  10. */10 * * * * /root/service_check.sh
  11. # 6. 每月1号凌晨4点清理系统垃圾文件
  12. 0 4 1 * * rm -rf /tmp/* /var/tmp/*
  13. # 7. 每天12点、18点自动同步业务数据
  14. 0 12,18 * * * /root/data_sync.sh
复制代码

4.6 定时任务日志排查(排错核心)

定时任务执行失败、无效果时,优先查看专属日志,定位脚本报错、权限不足、路径错误等问题。

  1. # centos/rocky 定时任务日志路径
  2. tail -f /var/log/cron
  3. # ubuntu/debian 定时任务日志路径
  4. tail -f /var/log/syslog
  5. # 自定义任务日志(生产最佳实践,必加)
  6. 0 3 * * * /root/backup.sh >> /var/log/backup_cron.log 2>&1
  7. # 释义:任务执行日志追加写入指定文件,错误日志统一输出,便于排错
复制代码

4.7 系统级定时任务(全局配置)

除用户级crontab,系统提供全局定时配置文件,适合配置系统通用定时任务,仅root可编辑。

  1. # 系统全局定时配置文件
  2. /etc/crontab
  3. # 系统自带定时目录(无需手动配置,放入脚本自动执行)
  4. /etc/cron.hourly/ # 每小时自动执行
  5. /etc/cron.daily/ # 每天自动执行
  6. /etc/cron.weekly/ # 每周自动执行
  7. /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,防止误删丢失;

  • 短周期高频任务添加并发锁,避免进程堆积、资源占用过高;

  • 废弃任务禁止直接删除,优先注释保留,便于后续复盘核对。

  1. crontab -e # 编辑定时任务
  2. crontab -l # 查看定时任务
  3. crontab -ir # 安全删除定时任务(带确认)
  4. tail -f /var/log/cron # 查看定时执行日志
  5. crontab -u 用户名 -l # 查看指定用户定时
复制代码
  1. crontab -e # 编辑当前用户定时
  2. crontab -l # 查看定时任务
  3. crontab -r # 清空定时
  4. # 格式:分 时 日 月 周 命令
  5. 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. # 1. 全量网卡信息查看(现代首选,替代ifconfig,信息最全)
  2. ip addr
  3. # 关键字段解析
  4. # LINK:网卡物理状态(UP=网卡启用、DOWN=网卡禁用)
  5. # INET:IPv4地址/子网掩码
  6. # INET6:IPv6地址
  7. # LOOPBACK:回环网卡,永不宕机
  8. # BROADCAST:广播地址
  9. # 2. 简洁查看本机所有IP(运维快速核查首选)
  10. hostname -I
  11. # 3. 查看网卡物理硬件信息(MAC地址、网卡型号、速率)
  12. ip link
  13. ip link show ens33 # 查看指定网卡详细链路信息
  14. # 4. 传统兼容命令(老旧系统可用)
  15. ifconfig # 查看网卡IP、掩码、MAC、收发数据包
  16. ifconfig ens33 up # 启用网卡
  17. ifconfig ens33 down # 禁用网卡
复制代码

1.3 网卡启停与IP动态/静态配置(生产核心)

支持临时IP配置(重启失效)和永久网卡配置,适配临时网络调试、固定业务IP场景,区分CentOS/Ubuntu配置路径。

  1. # ========== 1. 网卡启停操作(临时生效) ==========
  2. ip link set ens33 up # 启用网卡
  3. ip link set ens33 down # 禁用网卡
  4. # ========== 2. 临时配置IP(重启/重启网络失效,调试专用) ==========
  5. ip addr add 192.168.1.100/24 dev ens33 # 给ens33网卡临时添加IP
  6. ip addr del 192.168.1.100/24 dev ens33 # 删除网卡临时IP
  7. # 临时配置广播地址
  8. ip addr add 192.168.1.100/24 broadcast 192.168.1.255 dev ens33
  9. # ========== 3. 重启网络服务(生效配置) ==========
  10. # CentOS7+/Rocky
  11. systemctl restart network
  12. # Ubuntu/Debian
  13. systemctl restart networking
  14. # 通用重载网络配置
  15. nmcli reload
复制代码

1.4 路由体系核心原理(面试必考、网络通断底层)

路由的核心作用:控制服务器数据包的出站转发路径,服务器访问不同网段、外网、跨机房通信,均依赖路由规则匹配,路由配置错误是网络不通、外网无法访问、内网断连的核心原因。

路由匹配优先级:精确路由 > 网段路由 > 默认路由

  • 默认路由(0.0.0.0/0):所有未知网段的数据包,统一转发到默认网关,是服务器上网的核心路由

  • 静态网段路由:指定固定网段走指定网关,适配跨机房、专线、内网多网段互通场景

  • 直连路由:服务器网卡本机所在网段,自动生成,无需手动配置,优先级最高

1.5 路由全量实操命令(生产全覆盖)
  1. # ========== 1. 路由表查看(生产首选) ==========
  2. ip route show # 查看完整路由表(现代标准)
  3. route -n # 数字格式查看路由,不解析域名,排查更快
  4. # 路由字段解读
  5. # Destination:目标网段
  6. # Gateway:下一跳网关地址
  7. # Genmask:子网掩码
  8. # Flags:路由标识(U=路由生效、G=默认网关)
  9. # ========== 2. 默认网关配置(上网核心) ==========
  10. # 临时添加默认网关(重启失效)
  11. ip route add default via 192.168.1.1 dev ens33
  12. # 删除默认网关
  13. ip route del default
  14. # ========== 3. 静态路由配置(跨网段互通刚需) ==========
  15. # 指定网段走固定网关(访问10.0.0.0/8网段,走192.168.1.2网关)
  16. ip route add 10.0.0.0/8 via 192.168.1.2 dev ens33
  17. # 删除指定静态路由
  18. ip route del 10.0.0.0/8
  19. # 本机路由:指定IP走本地网卡(内网互通优化)
  20. ip route add 192.168.1.0/24 dev ens33
  21. # ========== 4. 路由清空与重置(故障应急) ==========
  22. ip route flush all # 清空所有路由,重置网络路由规则
复制代码

1.6 永久网卡与路由配置(企业规范)

临时配置仅适用于调试,生产业务服务器必须配置永久静态IP+固定路由,避免重启后网络失效。

CentOS/Rocky 永久网卡配置

配置文件路径:/etc/sysconfig/network-scripts/ifcfg-ens33

  1. # 核心配置参数
  2. TYPE=Ethernet
  3. BOOTPROTO=static # 静态IP(dhcp为动态获取)
  4. NAME=ens33
  5. DEVICE=ens33
  6. ONBOOT=yes # 开机自启网卡
  7. IPADDR=192.168.1.100 # 静态IP
  8. NETMASK=255.255.255.0 # 子网掩码
  9. GATEWAY=192.168.1.1 # 默认网关
  10. DNS1=223.5.5.5 # DNS服务器
复制代码

Ubuntu 永久网卡配置

配置文件路径:/etc/netplan/00-installer-config.yaml

  1. network:
  2. ethernets:
  3. ens33:
  4. addresses: [192.168.1.100/24]
  5. gateway4: 192.168.1.1
  6. nameservers:
  7. addresses: [223.5.5.5,8.8.8.8]
  8. version: 2
复制代码

1.7 高频网络故障排查流程(生产万能链路)
  1. 第一步:核查网卡状态ip addr 确认网卡UP状态、IP配置是否正常

  2. 第二步:核查路由网关ip route 确认默认网关存在、网段路由无误

  3. 第三步:内网连通性测试 ping 同网段服务器、ping 网关,排查内网链路

  4. 第四步:外网连通性测试 ping 公网IP、ping 域名,区分网络不通/DNS故障

  5. 第五步:端口链路排查 检查防火墙、网卡物理链路、交换机端口状态

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),避免域名解析失败。

  1. ip addr / ifconfig # 查看网卡IP
  2. ip route / route -n # 路由表
  3. hostname -I # 本机IP
  4. hostname # 主机名
复制代码

2. 连通性、DNS【生产完整版+原理+排错+避坑面试】

2.1 模块总述

连通性测试与DNS解析是网络排错的前置核心步骤,90%的外网访问失败、域名打不开、接口超时、服务器跨网通信异常问题,均出在链路连通故障或DNS解析异常。本小节完整补全ping、路由追踪、DNS解析、域名缓存、hosts优先级、解析故障排错全流程,区分内网/公网、临时/永久DNS配置,补齐生产高频坑点与面试核心考点,完全适配线上网络故障快速排查场景。

2.2 链路连通性测试(ping)精准精讲

ping基于ICMP协议,是检测网络链路通断、延迟、丢包、网络拥堵的基础命令,可精准区分物理链路故障、网关故障、外网故障,生产禁止无脑长ping,需结合参数精准排查。

  1. # 1. 基础连通性测试(默认无限发包,Ctrl+C终止)
  2. ping www.baidu.com
  3. ping 223.5.5.5
  4. # 2. 生产标准测试(指定发包次数,自动退出,脚本/巡检刚需)
  5. ping -c 4 www.baidu.com # 发送4个数据包后自动终止(Linux通用)
  6. ping -c 4 192.168.1.1 # 测试内网网关连通性
  7. # 3. 限定超时时间、间隔时间(精准排查网络延迟)
  8. ping -c 5 -W 2 www.baidu.com # 发包5次,单次超时2秒,超时判定故障
  9. ping -i 0.5 www.baidu.com # 缩短发包间隔为0.5秒,快速压测链路稳定性
  10. # 4. 后台静默ping测试(长期监测链路稳定性)
  11. ping -c 1000 www.baidu.com > ping_log.txt 2>&1 &
  12. # 5. 仅查看连通结果(脚本判断专用)
  13. ping -c 1 IP/域名 && echo "链路正常" || echo "链路中断"
复制代码

2.3 路由链路追踪(traceroute/mtr)定位丢包节点

ping仅能判断终端通断,链路卡顿、延迟高、间歇性丢包需通过路由追踪定位故障节点,区分是内网链路、运营商网关、外网节点故障,是复杂网络排错核心工具。

  1. # 1. 基础路由追踪(全程网关跳转路径)
  2. traceroute www.baidu.com
  3. # 2. 生产精准追踪(忽略反向解析,加速排查)
  4. traceroute -n www.baidu.com # 只显示IP,不解析域名,避免卡顿
  5. # 3. 全能链路检测(mtr 生产首选,比traceroute精准百倍)
  6. # 结合ping+路由追踪,统计每一跳丢包率、延迟,定位故障网关
  7. mtr -c 100 www.baidu.com # 发送100包,统计链路丢包
  8. mtr -n -c 50 223.5.5.5 # 无解析+50次发包,快速定位丢包节点
复制代码

2.4 DNS解析核心命令(nslookup/dig)精准排错

DNS解析故障分为:域名无法解析、解析超时、解析错误、缓存污染、DNS服务器故障,两大核心命令分工明确,nslookup简洁快速,dig解析详细,适配不同排查场景。

  1. # ========== 1. nslookup 快速解析(日常排查首选) ==========
  2. # 基础域名解析,查看默认DNS、解析IP
  3. nslookup www.baidu.com
  4. # 指定DNS服务器解析(排查DNS服务器故障核心)
  5. nslookup www.baidu.com 223.5.5.5 # 用阿里DNS单独解析
  6. nslookup www.baidu.com 8.8.8.8 # 用谷歌DNS单独解析
  7. # 反向解析(IP查域名)
  8. nslookup 14.215.177.38
  9. # ========== 2. dig 详细解析(深度排错、运维高阶) ==========
  10. # 完整解析过程、耗时、DNS服务器、解析记录类型
  11. dig www.baidu.com
  12. # 精简解析结果(只看最终IP,生产快速核查)
  13. dig +short www.baidu.com
  14. # 指定DNS服务器解析
  15. dig @223.5.5.5 www.baidu.com
  16. # 解析特定记录类型(企业域名排查刚需)
  17. dig www.baidu.com A # 解析IPv4 A记录
  18. dig www.baidu.com AAAA # 解析IPv6记录
  19. dig www.baidu.com CNAME # 解析别名记录
  20. 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. # 1. 临时修改DNS(立即生效,重启网络失效)
  2. echo "nameserver 223.5.5.5" > /etc/resolv.conf
  3. echo "nameserver 8.8.8.8" >> /etc/resolv.conf
  4. # 2. 永久DNS配置(CentOS/Rocky)
  5. # 编辑网卡配置文件,添加DNS参数
  6. vim /etc/sysconfig/network-scripts/ifcfg-ens33
  7. DNS1=223.5.5.5
  8. DNS2=8.8.8.8
  9. # 3. 永久DNS配置(Ubuntu)
  10. vim /etc/netplan/00-installer-config.yaml
  11. nameservers:
  12. addresses: [223.5.5.5,8.8.8.8]
  13. # 4. 本地hosts强制解析(临时域名映射、测试环境刚需)
  14. vim /etc/hosts
  15. # 格式:IP 域名
  16. 180.101.49.11 www.baidu.com
复制代码

2.6 DNS缓存清理(解析异常核心解决方案)

系统、服务会缓存DNS解析结果,修改DNS/hosts后不生效,90%是缓存未刷新导致,不同系统缓存清理方式不同。

  1. # CentOS7+/Rocky 清理DNS缓存
  2. systemctl restart nscd
  3. # Ubuntu/Debian 清理DNS缓存
  4. systemctl restart systemd-resolved
  5. # 手动清空本地hosts缓存(通用)
  6. cat /dev/null > /etc/hosts
  7. # 测试DNS缓存是否生效
  8. # 第一次解析慢,第二次快速返回即为缓存生效
  9. 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映射用完及时清理,避免上线后解析错乱影响业务。

  1. ping -c 4 www.baidu.com # 指定次数连通性测试
  2. traceroute -n www.baidu.com # 无解析路由追踪
  3. mtr -c 50 www.baidu.com # 链路丢包精准排查
  4. nslookup 域名 # 快速DNS解析
  5. dig +short 域名 # 精简解析IP结果
  6. cat /etc/hosts # 查看本地域名映射
  7. cat /etc/resolv.conf # 查看系统DNS配置
  8. systemctl restart nscd # 清空DNS缓存
复制代码

  1. ping IP/域名
  2. ping -c 4 www.baidu.com
  3. traceroute www.baidu.com # 路由追踪
  4. nslookup / dig 域名 # DNS解析
  5. 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,高并发服务器排查首选,参数精简高效。

  1. # ===================== ss 核心高频命令 =====================
  2. # 1. 查看所有TCP监听端口(生产最常用)
  3. ss -lntp
  4. # 参数详解
  5. # l:仅展示监听端口(服务端口)
  6. # n:数字端口显示,不解析域名,排查更快
  7. # t:仅筛选TCP连接(业务主流)
  8. # p:展示对应绑定进程名/PID
  9. # 2. 查看所有已建立TCP连接(排查在线用户、活跃请求)
  10. ss -antp
  11. # 3. 查看UDP端口/连接
  12. ss -lnup
  13. # 4. 查看所有socket连接(包含本地、域套接字)
  14. ss -a
  15. # 5. 统计各类连接状态数量(瓶颈排查核心)
  16. ss -ant | awk '{print $1}' | sort | uniq -c
  17. # 6. 筛选指定端口连接
  18. ss -antp | grep :80
  19. ss -antp | grep :443
  20. # 7. 筛选指定状态连接(异常排查刚需)
  21. ss -antp | grep TIME_WAIT
  22. ss -antp | grep CLOSE_WAIT
复制代码

3.4 netstat 命令(经典兼容,老旧系统适配)

netstat 是传统网络排查命令,兼容性极强,新系统默认未预装,需手动安装,功能与ss基本一致,适合老旧服务器运维排查。

  1. # ===================== netstat 经典全套用法 =====================
  2. # 1. 查看所有监听端口、绑定进程(端口排查标配)
  3. netstat -lntp
  4. # 2. 查看所有TCP全网连接
  5. netstat -antp
  6. # 3. 查看UDP端口与连接
  7. netstat -lunp
  8. # 4. 持续刷新连接状态(实时监控连接波动)
  9. netstat -antp -c 1
  10. # 5. 统计TCP连接状态,快速定位连接溢出瓶颈
  11. netstat -ant | awk '{print $6}' | sort | uniq -c
  12. # 6. 筛选指定端口、指定进程连接
  13. netstat -antp | grep 80
  14. netstat -antp | grep nginx
复制代码

3.5 lsof 精准定位端口/文件占用(解决端口冲突神器)

lsof 可精准查询「哪个进程占用指定端口/文件」,解决端口冲突、端口占用无法启动服务、文件被占用无法删除等高频问题。

  1. # ===================== lsof 端口/进程排查 =====================
  2. # 1. 精准查看80端口被哪个进程占用(端口冲突必备)
  3. lsof -i :80
  4. # 2. 查看所有网络端口占用情况
  5. lsof -i
  6. # 3. 筛选TCP/UDP端口占用
  7. lsof -i TCP
  8. lsof -i UDP
  9. # 4. 查看指定进程所有占用端口与文件
  10. lsof -p 进程PID
  11. # 5. 递归查看目录被哪些进程占用(磁盘文件占用排查)
  12. lsof +D /data/
复制代码

3.6 端口连通性测试(telnet/nc/curl)

端口监听正常不代表外网可通,需通过客户端命令测试端口连通性,排查防火墙、端口放行、链路拦截问题。

  1. # ===================== 端口连通性全场景测试 =====================
  2. # 1. telnet 单端口连通测试(简洁快速)
  3. telnet 192.168.1.100 80 # 测试80端口是否通
  4. # 连通成功显示Connected,失败显示Connection refused/超时
  5. # 2. nc 全能端口测试(生产首选,功能最强)
  6. nc -zv 192.168.1.100 80 # z:仅扫描不传输数据,v:可视化详情
  7. nc -zv www.baidu.com 443
  8. # 3. 批量端口扫描(区间扫描,排查端口开放情况)
  9. nc -zv 192.168.1.100 1-1000
  10. # 4. curl 业务端口测试(HTTP/HTTPS服务专属)
  11. curl -I http://192.168.1.100:80 # 仅返回响应头,快速校验服务可用性
  12. curl https://www.baidu.com
复制代码

3.7 高频端口异常故障排查流程(生产万能)

问题1:服务启动失败,提示端口被占用

  1. 执行 lsof -i :端口号 定位占用进程PID

  2. 确认进程无用,执行 kill -9 PID 强制释放端口

  3. 重启服务,规避端口冲突

问题2:端口监听正常,但外网无法访问

  1. 核查服务监听地址:是否监听 0.0.0.0(全网段),仅监听127.0.0.1则仅本机可访问

  2. 检查防火墙端口放行规则

  3. 测试本机curl访问、跨机telnet访问,区分本地服务问题与网络拦截问题

问题3:服务卡顿、连接超时、并发卡顿

  1. 执行 ss -ant | awk '{print $1}' | sort | uniq -c 统计连接状态

  2. 大量 TIME_WAIT:内核端口回收过慢,需优化内核参数

  3. 大量 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数量,必要时优化内核端口回收参数。

  1. ss -lntp # 查看所有TCP监听端口(首选)
  2. ss -antp # 查看所有已建立TCP连接
  3. ss -ant | awk '{print $1}' | sort | uniq -c # 统计连接状态
  4. lsof -i :80 # 精准查询端口占用进程
  5. nc -zv IP 端口 # 端口连通性测试
  6. curl -I 域名/IP:端口 # 校验HTTP服务可用性
  7. telnet IP 端口 # 基础端口通断测试
复制代码
  1. netstat -lntp # 监听端口+进程
  2. ss -lntp # 替代netstat,更快
  3. lsof -i :80 # 查看80端口占用
  4. curl www.xxx.com # 访问http接口
  5. wget url # 下载文件
  6. telnet IP 端口 # 端口连通测试
  7. 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 基础启停与状态查看
  1. # 查看防火墙运行状态
  2. systemctl status firewalld
  3. # 开机自启/关闭自启
  4. systemctl enable firewalld
  5. systemctl disable firewalld
  6. # 启停重启服务
  7. systemctl start firewalld
  8. systemctl stop firewalld
  9. systemctl restart firewalld
  10. # 查看防火墙所有规则(核心排查命令)
  11. firewall-cmd --list-all
  12. # 仅查看已放行端口
  13. firewall-cmd --list-ports
  14. # 查看放行服务
  15. firewall-cmd --list-services
复制代码

4.2.2 核心端口放行与删除规则(生产高频)

区分临时规则(重启失效)永久规则(持久化保存),生产业务必须配置永久规则。

  1. # 1. 永久放行单个端口(TCP协议最常用)
  2. firewall-cmd --add-port=80/tcp --permanent
  3. firewall-cmd --add-port=443/tcp --permanent
  4. firewall-cmd --add-port=22/tcp --permanent
  5. # 2. 永久放行端口区间(批量开放端口)
  6. firewall-cmd --add-port=3306-3308/tcp --permanent
  7. # 3. 删除已放行端口(关闭端口访问权限)
  8. firewall-cmd --remove-port=80/tcp --permanent
  9. # 4. 放行系统预设服务(快捷配置,无需写端口)
  10. firewall-cmd --add-service=http --permanent
  11. firewall-cmd --add-service=https --permanent
  12. firewall-cmd --remove-service=http --permanent
  13. # 重点:所有永久规则配置后,必须重载生效
  14. firewall-cmd --reload
复制代码

4.2.3 高级富规则(精准IP管控|生产安全加固必备)

富规则支持单IP/网段精准授权、拒绝指定IP访问,解决全局放行端口的安全漏洞,是服务器安全加固核心配置。

  1. # 1. 仅允许指定IP访问22端口(SSH安全加固,禁止全网访问)
  2. firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' port protocol='tcp' port='22' accept"
  3. # 2. 拒绝指定恶意IP访问所有端口
  4. firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='xxx.xxx.xxx.xxx' reject"
  5. # 3. 允许指定IP访问3306数据库端口(禁止外网数据库暴露)
  6. firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='10.0.0.0/8' port protocol='tcp' port='3306' accept"
  7. # 4. 删除指定富规则
  8. firewall-cmd --permanent --remove-rich-rule="对应规则内容"
  9. # 重载规则生效
  10. firewall-cmd --reload
复制代码

4.2.4 防火墙默认区域与全局配置
  1. # 查看默认区域
  2. firewall-cmd --get-default-zone
  3. # 修改默认区域为public(生产标准)
  4. firewall-cmd --set-default-zone=public
  5. # 开启/关闭防火墙(全局拦截)
  6. firewall-cmd --set-default-zone=block # 拦截所有流量
  7. firewall-cmd --set-default-zone=public # 恢复常规放行
复制代码

4.3 iptables 精讲(底层通用防火墙|全发行版兼容)

iptables是Linux内核原生防火墙,属于底层规则框架,firewalld本质是iptables的上层封装,功能更强大、适配性更广,适合精细化流量管控、自定义复杂规则场景。

4.3.1 基础查看与启停
  1. # 安装iptables(新系统默认未装)
  2. yum install iptables-services -y
  3. # 关闭firewalld,启用iptables(二选一,避免冲突)
  4. systemctl stop firewalld && systemctl disable firewalld
  5. systemctl start iptables && systemctl enable iptables
  6. # 查看所有规则(默认过滤表)
  7. iptables -L -n
  8. # 清空所有规则(调试专用,生产谨慎)
  9. iptables -F
复制代码

4.3.2 核心放行与拦截规则
  1. # 1. 放行指定TCP端口
  2. iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  3. iptables -A INPUT -p tcp --dport 443 -j ACCEPT
  4. iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  5. # 2. 放行指定IP所有访问权限
  6. iptables -A INPUT -s 192.168.1.100/32 -j ACCEPT
  7. # 3. 拒绝指定IP访问
  8. iptables -A INPUT -s 恶意IP -j DROP
  9. # 4. 放行本地回环网卡(必须配置,否则本地服务异常)
  10. iptables -A INPUT -i lo -j ACCEPT
  11. # 5. 允许已建立的连接持续通行(生产必备)
  12. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  13. # 6. 默认拒绝所有未放行端口(全局拦截)
  14. iptables -P INPUT DROP
复制代码

4.3.3 规则持久化(核心重点)

iptables默认规则临时生效,重启失效,必须手动保存持久化。

  1. # CentOS/Rocky 保存规则
  2. service iptables save
  3. # 规则文件路径(永久存储)
  4. /etc/sysconfig/iptables
复制代码

4.4 ufw 精讲(Ubuntu/Debian 专属防火墙|简洁高效)

ufw是Ubuntu系统轻量化防火墙,命令简洁、上手简单,专为桌面/服务器轻量化场景设计,是Debian系系统标配防火墙。

4.4.1 基础启停与状态
  1. # 查看防火墙状态
  2. ufw status
  3. # 开启/关闭防火墙
  4. ufw enable
  5. ufw disable
  6. # 重置所有规则(清空配置)
  7. ufw reset
复制代码

4.4.2 核心端口与IP管控规则
  1. # 查看防火墙状态
  2. ufw status
  3. # 开启/关闭防火墙
  4. ufw enable
  5. ufw disable
  6. # 重置所有规则(清空配置)
  7. 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白名单管控;

  • 所有防火墙规则配置后,立即测试业务连通性,避免重载规则导致服务断连;

  • 云服务器采用「系统防火墙+云安全组」双重防护,最小化开放端口,杜绝恶意扫描攻击。

  1. # ========== firewalld(CentOS/Rocky) ==========
  2. firewall-cmd --list-all # 查看所有规则
  3. firewall-cmd --add-port=80/tcp --permanent # 永久放行端口
  4. firewall-cmd --add-service=http --permanent # 放行预设服务
  5. firewall-cmd --permanent --add-rich-rule=xxx # 配置IP白名单
  6. firewall-cmd --reload # 重载规则生效
  7. # ========== iptables(通用底层) ==========
  8. iptables -L -n # 查看规则
  9. iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 放行端口
  10. service iptables save # 持久化规则
  11. # ========== ufw(Ubuntu/Debian) ==========
  12. ufw status # 查看状态
  13. ufw allow 80/tcp # 放行端口
  14. ufw allow from 192.168.1.0/24 # 放行网段
复制代码

  1. # CentOS7+/Rocky firewalld
  2. firewall-cmd --list-ports
  3. firewall-cmd --add-port=80/tcp --permanent
  4. # Ubuntu ufw
  5. ufw allow 22
  6. # iptables底层
  7. iptables -L -n
复制代码

七、磁盘、挂载、压缩解压

1. 磁盘分区挂载【生产完整版+分区实操+永久挂载+故障排错+面试精讲】

1.1 模块总述

磁盘分区、格式化与挂载是Linux服务器磁盘扩容、数据存储、分区管理的核心实操能力,是运维日常磁盘爆满排查、新磁盘挂载、分区扩容、数据迁移的必备技能。Linux 所有磁盘数据必须通过挂载点访问,无挂载的裸磁盘无法读写使用。本节完整补全磁盘查看、分区创建、格式化、临时/永久挂载、UUID挂载、挂载卸载避坑、开机挂载故障、面试核心考点,全覆盖生产实操场景。

1.2 磁盘硬件与使用状态查看(排查刚需)

实操磁盘操作前,必须先核查服务器磁盘列表、分区状态、磁盘使用率、挂载情况,避免误操作系统盘。

  1. # ========== 1. 整体磁盘使用率排查(日常巡检首选) ==========
  2. df -h # 人性化显示所有分区挂载、使用率、剩余空间、挂载点
  3. df -i # 查看分区inode使用率(inode爆满导致磁盘有空间无法写入)
  4. df -Th # 显示分区文件系统类型(xfs/ext4)+ 使用率
  5. # ========== 2. 文件夹大小排查(磁盘爆满定位) ==========
  6. du -sh * # 查看当前目录所有文件夹/文件总大小,快速定位大文件
  7. du -h --max-depth=1 # 只统计一级目录,简洁高效
  8. du -sh /var/log/ # 精准查看指定目录占用大小
  9. # ========== 3. 磁盘硬件与分区列表查看 ==========
  10. lsblk # 简洁查看所有磁盘、分区、挂载点、磁盘大小(新手首选)
  11. fdisk -l # 详细列出所有磁盘设备、分区类型、扇区、大小、分区信息
  12. blkid # 查看所有分区UUID、文件系统类型(永久挂载核心参数)
  13. # 磁盘设备命名规范
  14. # /dev/sda 第一块磁盘、/dev/sdb 第二块磁盘
  15. # /dev/sda1 第一磁盘第一个分区、sda2第二个分区
复制代码

1.3 磁盘分区创建(fdisk实操,MBR分区)

新磁盘无分区、无文件系统,需先创建分区才能格式化挂载,fdisk适用于小于2TB磁盘、MBR分区格式,适配绝大多数生产服务器。

  1. # 1. 进入磁盘分区编辑界面(以/dev/sdb新磁盘为例)
  2. fdisk /dev/sdb
  3. # 2. 分区交互操作指令(核心必背)
  4. n # 新建分区
  5. p # 选择主分区(默认首选)
  6. 1 # 分区编号1
  7. 回车默认 # 起始扇区默认
  8. 回车默认 # 结束扇区默认(占用整块磁盘)
  9. w # 保存分区并退出
  10. # 3. 刷新分区表(无需重启生效)
  11. partprobe /dev/sdb
  12. # 4. 核查新分区是否创建成功
  13. lsblk /dev/sdb
复制代码

1.4 磁盘格式化(文件系统创建)

分区创建完成后,需格式化生成文件系统,Linux主流文件系统为xfs(CentOS7+默认)、ext4(通用稳定),生产按需选择。

  1. # ========== 1. xfs格式化(CentOS/Rocky默认,大文件高性能) ==========
  2. mkfs.xfs /dev/sdb1
  3. # ========== 2. ext4格式化(通用稳定,兼容性最强) ==========
  4. mkfs.ext4 /dev/sdb1
  5. # ========== 3. 格式化核心参数 ==========
  6. -f # 强制格式化(覆盖原有文件系统,谨慎使用)
  7. -L 磁盘名 # 自定义磁盘标签,便于识别
  8. # 格式化后核查文件系统类型
  9. blkid /dev/sdb1
复制代码

1.5 临时挂载与卸载(临时生效,重启失效)

临时挂载适用于临时数据存储、磁盘调试、临时扩容场景,服务器重启后挂载失效。

  1. # 1. 创建挂载目录(挂载点必须是空目录,专属磁盘挂载)
  2. mkdir -p /data
  3. # 2. 临时挂载分区
  4. mount /dev/sdb1 /data
  5. # 3. 核查挂载是否成功
  6. df -h
  7. lsblk
  8. # 4. 磁盘卸载(迁移/下线磁盘必备)
  9. umount /data # 通过挂载点卸载(推荐,不易出错)
  10. umount /dev/sdb1 # 通过分区设备卸载
  11. # 卸载报错解决:设备忙,先查询占用进程并结束
  12. fuser -m /data
  13. kill -9 占用PID
复制代码

1.6 永久挂载配置(/etc/fstab,生产核心)

生产业务磁盘必须配置永久挂载,避免重启服务器后挂载丢失、业务数据异常,优先使用UUID挂载,规避磁盘盘符错乱问题。

1.6.1 fstab文件格式详解

文件路径:/etc/fstab,开机自动挂载配置文件,格式:设备/UUID 挂载点 文件系统 挂载参数 备份标记 自检标记

  1. # 第一步:获取分区UUID(永久挂载唯一标识)
  2. blkid /dev/sdb1
  3. # 第二步:编辑fstab配置文件
  4. vim /etc/fstab
  5. # 两种挂载写法(生产优先UUID写法)
  6. # 写法1:UUID永久挂载(推荐,盘符变更不影响)
  7. UUID=xxxx-xxxx-xxxx-xxxx /data xfs defaults 0 0
  8. # 写法2:设备路径挂载(不推荐,多磁盘易盘符错乱)
  9. /dev/sdb1 /data xfs defaults 0 0
  10. # 字段参数详解
  11. # defaults:默认挂载参数(读写、自动挂载、权限兼容)
  12. # 第一个0:不备份磁盘数据
  13. # 第二个0:开机不执行磁盘自检(生产默认配置)
  14. # 第三步:加载fstab配置,测试挂载(关键!避免开机崩盘)
  15. mount -a
  16. # 第四步:核查永久挂载生效
  17. df -h
复制代码

1.7 核心挂载参数与进阶配置
  1. # 常用进阶挂载参数(写入fstab替换defaults)
  2. rw # 读写权限(默认)
  3. ro # 只读挂载(数据防篡改,备份磁盘专用)
  4. noauto # 开机不自动挂载,手动mount生效
  5. exec # 允许执行二进制程序
  6. noexec # 禁止执行程序(数据盘安全加固)
  7. # 示例:只读永久挂载
  8. 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 磁盘挂载完整生产流程(标准实操)
  1. lsblk/fdisk -l 核查新磁盘设备;

  2. fdisk 创建磁盘分区,partprobe 刷新分区;

  3. mkfs.xfs/mkfs.ext4 格式化分区;

  4. 创建空挂载目录,mount 临时挂载测试;

  5. blkid 获取分区UUID,写入/etc/fstab永久配置;

  6. mount -a 校验配置、生效挂载;

  7. df -h 核查挂载成功,完成磁盘上线。

  1. df -h # 磁盘分区使用
  2. du -sh * # 当前目录各文件夹大小
  3. du -h --max-depth=1
  4. fdisk -l # 磁盘分区列表
  5. mkfs.xfs /dev/sdb1 # 格式化分区
  6. mount /dev/sdb1 /data
  7. umount /data
  8. blkid # 查看磁盘UUID
  9. /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. # ===================== 1. tar.gz 格式【全网通用、速度快、兼容性最强】 =====================
  2. # 压缩:打包并压缩目录/文件
  3. tar zcvf test.tar.gz test_dir/ # 压缩整个目录
  4. tar zcvf file.tar.gz file1.txt file2.txt # 压缩多个单独文件
  5. tar zcvf bak.tar.gz /data/ --exclude=*.log # 压缩并排除所有日志文件
  6. # 解压:默认解压到当前目录
  7. tar zxvf test.tar.gz
  8. # 解压到指定目录(生产高频,避免混乱)
  9. tar zxvf test.tar.gz -C /tmp/
  10. # 解压并保留原文件权限属性
  11. tar zxvp test.tar.gz -C /data/
  12. # ===================== 2. tar.bz2 格式【压缩率更高、速度稍慢】 =====================
  13. # 适合大文件归档,压缩体积比tar.gz更小
  14. tar jcvf test.tar.bz2 test_dir/ # 压缩
  15. tar jxvf test.tar.bz2 -C /backup/ # 解压到指定目录
  16. # ===================== 3. tar.xz 格式【超高压缩率、超大文件首选】 =====================
  17. # 压缩率最高,耗时最长,适合静态大文件、长期备份归档
  18. tar Jcvf big_file.tar.xz big_dir/
  19. tar Jxvf big_file.tar.xz
  20. # ===================== 4. 查看压缩包内容(不解压预览,避免浪费磁盘) =====================
  21. tar ztvf test.tar.gz # 查看gz压缩包文件列表
  22. tar jtvf test.tar.bz2 # 查看bz2压缩包文件列表
  23. tar Jtvf test.tar.xz # 查看xz压缩包文件列表
复制代码

2.4 单文件压缩格式(无打包,仅压缩单个文件)

gz/bz2/xz 仅支持单个文件压缩,不支持目录,压缩后原文件默认消失,生成对应压缩包。

  1. # ===================== 1. gzip / .gz 单文件压缩 =====================
  2. gzip test.txt # 压缩:生成test.txt.gz,原文件删除
  3. gzip -c test.txt > test.txt.gz # 保留原文件压缩(核心实用技巧)
  4. gunzip test.txt.gz # 解压.gz文件,解压后压缩包删除
  5. # ===================== 2. bzip2 / .bz2 单文件压缩 =====================
  6. bzip2 test.txt # 压缩生成test.txt.bz2
  7. bunzip2 test.txt.bz2 # 解压bz2文件
  8. # ===================== 3. xz / .xz 单文件压缩 =====================
  9. xz test.txt # 超高压缩率压缩
  10. unxz test.txt.xz # 解压xz文件
复制代码

2.5 zip/unzip 格式【跨平台兼容、Windows互通首选】

zip 是跨系统通用格式,Windows/Linux/Mac 全兼容,支持目录、多文件,解压后不丢失权限,适合跨平台文件传输。

  1. # 需提前安装:yum install zip unzip -y / apt install zip unzip -y
  2. # 1. 压缩操作
  3. zip test.zip file1.txt file2.txt # 压缩多个文件
  4. zip -r dir.zip test_dir/ # 递归压缩整个目录(必须加-r)
  5. zip -r bak.zip /data/ -x "*.log" # 压缩目录并排除指定文件
  6. # 2. 解压操作
  7. unzip test.zip # 解压到当前目录
  8. unzip dir.zip -d /tmp/ # 解压到指定目录(-d 指定路径)
  9. unzip -l test.zip # 不解压,仅预览压缩包内容
  10. unzip -o test.zip # 强制覆盖解压,不交互式询问
  11. # 3. 解压乱码解决(Windows压缩包Linux解压中文乱码)
  12. unzip -O GBK test.zip
复制代码

2.6 7z 超高压缩率格式【超大文件专属】

7z 格式压缩率远超所有常规格式,适合超大文件、海量小文件归档,需手动安装工具。

  1. # 安装命令:yum install p7zip -y / apt install p7zip-full -y
  2. # 压缩
  3. 7z a test.7z test_dir/ file.txt # a:添加文件到压缩包
  4. # 解压
  5. 7z x test.7z # 完整解压,保留目录结构
  6. # 预览内容
  7. 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. # 1. 日志归档标准命令(排除无用日志,压缩备份)
  2. tar zcvf log_bak_$(date +%Y%m%d).tar.gz /var/log/ --exclude=*.tmp --exclude=old_log/
  3. # 2. 解压到指定目录并覆盖旧文件
  4. tar zxvf app.tar.gz -C /usr/local/
  5. # 3. 批量解压当前目录所有tar.gz文件
  6. for i in *.tar.gz;do tar zxvf $i;done
  7. # 4. 保留原文件单文件压缩
  8. gzip -c data.txt > data.txt.gz
  9. # 5. 跨平台安全解压(解决中文乱码)
  10. unzip -O GBK windows_file.zip -d ./file_bak/
复制代码

  1. # tar(最常用)
  2. tar zcvf 打包.tar.gz 目录 # 压缩gz
  3. tar zxvf 打包.tar.gz # 解压gz
  4. tar jcvf 打包.tar.bz2 # bz2压缩
  5. tar Jcvf 打包.tar.xz # xz压缩
  6. # zip/unzip
  7. zip -r test.zip dir
  8. unzip test.zip
  9. # gz/bz2单文件
  10. gzip file
  11. 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. # ========== 1. 软件安装(核心高频) ==========
  2. yum install nginx -y # 在线安装软件,自动解决依赖
  3. dnf install mysql-server -y # dnf等价yum,新版系统首选
  4. yum install nginx=1.20.1 -y # 指定版本安装(规避新版本兼容问题)
  5. yum groupinstall "Development Tools" -y # 安装开发工具组(gcc/make等编译工具)
  6. # ========== 2. 软件卸载(安全卸载) ==========
  7. yum remove nginx -y # 卸载软件,保留依赖文件(安全,不影响系统依赖)
  8. yum erase nginx -y # 彻底卸载软件+移除无用依赖(干净卸载)
  9. # ========== 3. 软件查询与检索 ==========
  10. yum list # 列出所有可安装/已安装软件包
  11. yum list installed # 仅查看当前系统已安装所有软件
  12. yum list updates # 查看可升级的软件包
  13. yum search docker # 模糊检索软件包名(未知精准包名必备)
  14. yum info nginx # 查看软件详细信息(版本、用途、依赖、仓库来源)
  15. # ========== 4. 软件升级与版本管理 ==========
  16. yum update -y # 全局更新所有可升级软件(谨慎生产执行,避免版本兼容问题)
  17. yum update nginx -y # 单独升级指定软件
  18. yum check-update # 检查可更新软件,不执行升级
  19. # ========== 5. 仓库缓存管理 ==========
  20. yum clean all # 清空本地yum缓存(源更新、缓存异常必执行)
  21. yum makecache # 重新生成仓库缓存,加速软件检索
  22. # ========== 6. 依赖修复与故障处理 ==========
  23. yum deplist nginx # 查看软件所有依赖包
  24. yum repolist # 查看当前生效的软件仓库数量与状态
  25. yum check # 检测系统软件依赖是否破损、冲突
  26. # ========== 7. 软件版本锁定(生产核心避坑) ==========
  27. yum install yum-plugin-versionlock -y # 安装版本锁定插件
  28. yum versionlock nginx # 锁定nginx当前版本,禁止自动升级
  29. yum versionlock delete nginx # 解锁版本,允许升级
  30. yum versionlock list # 查看所有锁定版本软件
复制代码

1.2 rpm 底层本地包管理(离线安装+包溯源)

rpm是RHEL系底层包工具,无需联网,仅处理本地rpm安装包,不自动解决依赖,适合离线服务器安装、软件版本溯源、破损包修复场景。

  1. # ========== 1. 本地离线安装 ==========
  2. rpm -ivh xxx.rpm # 安装本地rpm包(i安装 v可视化 h进度条)
  3. rpm -ivh --nodeps xxx.rpm # 强制忽略依赖安装(生产慎用,易导致软件无法启动)
  4. rpm -ivh --force xxx.rpm # 强制覆盖安装(版本降级、重装破损包使用)
  5. # ========== 2. 软件卸载 ==========
  6. rpm -e nginx # 卸载指定软件(仅包名,无需后缀)
  7. rpm -e --nodeps nginx # 强制卸载,忽略依赖关联(高危,慎操作)
  8. # ========== 3. 软件查询与溯源(排错必备) ==========
  9. rpm -qa # 查询系统所有已安装rpm包
  10. rpm -qa | grep mysql # 精准检索指定软件是否安装
  11. rpm -ql nginx # 查看软件安装目录、所有生成文件(配置/二进制/日志)
  12. rpm -qi nginx # 查看软件详细信息(版本、发布时间、开发者)
  13. rpm -qc nginx # 仅查看软件配置文件路径(修改配置必备)
  14. rpm -qd nginx # 查看软件帮助文档、手册路径
  15. rpm -qf /usr/sbin/nginx # 根据文件/命令反查所属软件包(未知文件溯源核心)
  16. # ========== 4. 包校验与修复 ==========
  17. rpm -V nginx # 校验软件文件完整性,检测是否被篡改、文件丢失
  18. rpm --rebuilddb # 重建rpm数据库(包数据库破损、查询异常修复)
复制代码

1.3 YUM源配置与替换(生产刚需)

yum默认官方源网速慢、部分包缺失,生产需替换国内阿里云、清华源,源文件统一存放路径:/etc/yum.repos.d/,后缀.repo为有效仓库文件。

  1. # 1. 备份原有默认源
  2. mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
  3. # 2. 下载阿里云CentOS官方源(CentOS7示例)
  4. curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
  5. # 3. 下载epel扩展源(补充nginx/redis/mysql等第三方软件包)
  6. yum install epel-release -y
  7. # 4. 刷新缓存生效
  8. yum clean all && yum makecache
  9. # 5. 查看生效仓库
  10. 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. # ========== 1. 仓库缓存更新(前置必备) ==========
  2. apt update # 更新软件仓库索引缓存(不升级软件,安装前必执行)
  3. apt upgrade -y # 升级所有可更新软件(安全升级,不卸载依赖)
  4. apt full-upgrade -y # 完整升级,可增减依赖(新版适配升级,生产谨慎)
  5. # ========== 2. 软件安装 ==========
  6. apt install nginx -y # 在线安装软件,自动解析依赖
  7. apt install nginx=1.18.0-0ubuntu1.3 -y # 指定版本安装
  8. apt install -y gcc make git # 批量安装多个软件
  9. # ========== 3. 软件卸载与清理 ==========
  10. apt remove nginx -y # 卸载软件,保留配置文件
  11. apt purge nginx -y # 彻底卸载+删除所有配置、残留文件(干净清理)
  12. apt autoremove -y # 自动清理系统无用冗余依赖(释放磁盘空间)
  13. # ========== 4. 软件查询与检索 ==========
  14. apt list # 列出所有软件包
  15. apt list --installed # 查看已安装软件
  16. apt list --upgradable # 查看可升级软件
  17. apt search mysql # 检索软件包
  18. apt show nginx # 查看软件详细信息、版本、依赖
  19. # ========== 5. 故障修复 ==========
  20. apt -f install # 强制修复破损依赖、解决依赖缺失报错
  21. apt clean # 清理apt缓存包
  22. apt autoclean # 清理过期缓存安装包
复制代码

2.2 dpkg 底层本地包管理(离线安装)

dpkg是Ubuntu底层包工具,用于本地.deb格式安装包处理,同样不自动解析依赖,适合离线服务器软件部署。

  1. # ========== 1. 离线安装deb包 ==========
  2. dpkg -i xxx.deb # 安装本地deb安装包
  3. # 依赖报错后执行修复:apt -f install
  4. # ========== 2. 软件卸载 ==========
  5. dpkg -r nginx # 卸载软件,保留配置
  6. dpkg -P nginx # 彻底卸载+清空配置
  7. # ========== 3. 软件查询溯源 ==========
  8. dpkg -l # 列出所有已安装软件
  9. dpkg -l | grep docker # 检索指定软件
  10. dpkg -L nginx # 查看软件所有安装文件、目录
  11. dpkg -s nginx # 查看软件状态、版本信息
  12. dpkg -S /usr/bin/nginx # 根据文件反查所属软件包
复制代码

2.3 Ubuntu源配置(国内镜像加速)

apt源配置文件路径:/etc/apt/sources.list,生产替换清华/阿里源提升下载速度。

  1. # 1. 备份原有源文件
  2. cp /etc/apt/sources.list /etc/apt/sources.list.bak
  3. # 2. 写入阿里云Ubuntu源(20.04示例)
  4. echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
  5. deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
  6. deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse" > /etc/apt/sources.list
  7. # 3. 更新缓存生效
  8. 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. # 1. 内核与架构信息
  2. uname -r # 查看内核版本(软件兼容适配核心)
  3. uname -a # 完整系统信息:内核、架构、系统时间、主机名
  4. uname -m # 查看系统架构(x86_64/arm64,软件安装适配必备)
  5. # 2. 发行版详细版本
  6. cat /etc/os-release # 完整系统发行版、版本号、ID、适配平台
  7. lsb_release -a # 简洁查看系统版本(通用全发行版)
  8. # 3. 系统运行时长与负载
  9. uptime # 查看系统开机时长、1/5/15分钟系统负载
复制代码

1.3 CPU硬件全维度查询(核心算力核验)

精准查看CPU物理参数、核心数、线程数、主频、型号、缓存,区分物理核、逻辑核,排查算力不足、CPU配置异常问题。

  1. # 1. CPU完整硬件信息(生产核心)
  2. lscpu # 结构化展示CPU所有参数,可读性极强
  3. # 关键参数解读(面试/运维必懂)
  4. # CPU(s):总逻辑线程数
  5. # Core(s) per socket:单颗CPU物理核心数
  6. # Socket(s):物理CPU颗数
  7. # Thread(s) per core:单核心线程数(超线程开启为2,关闭为1)
  8. # CPU MHz:CPU基准主频
  9. # L1/L2/L3 cache:各级缓存大小
  10. # 2. 简洁查看CPU型号
  11. cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
  12. # 3. 统计物理CPU总数、物理核心数、逻辑核心数
  13. cat /proc/cpuinfo | grep physical | uniq -c # 物理CPU颗数
  14. cat /proc/cpuinfo | grep core | uniq -c # 物理核心总数
  15. nproc # 快速查看逻辑核心数(进程配置核心适配)
复制代码

1.4 内存硬件精准查询(容量/频率/插槽)

区别系统虚拟内存与物理内存,可查询内存硬件参数、插槽占用、剩余插槽、内存频率,适配服务器内存扩容、内存故障排查场景。

  1. # 1. 内存整体使用与硬件概况
  2. lsmem # 结构化展示物理内存、内存分段、可用内存
  3. free -h # 人性化展示内存、缓存、交换分区使用情况
  4. # 2. 精准物理内存硬件信息(需安装dmidecode)
  5. yum install dmidecode -y || apt install dmidecode -y
  6. dmidecode -t memory # 查看内存型号、频率、容量、插槽、厂商
  7. # 3. 简洁统计总物理内存
  8. cat /proc/meminfo | grep MemTotal
  9. # 4. 交换分区查询
  10. swapon -s # 查看交换分区大小、使用状态、挂载设备
复制代码

1.5 磁盘硬件与设备信息(含分区/型号/转速)

覆盖磁盘物理设备、型号、容量、接口类型、读写状态,区别虚拟磁盘与物理磁盘,适配磁盘扩容、坏道排查、设备识别异常场景。

  1. # 1. 磁盘设备整体列表(简洁直观)
  2. lsblk # 查看所有磁盘、分区、挂载点、磁盘大小、类型
  3. # 2. 详细磁盘硬件信息(型号、厂商、序列号)
  4. fdisk -l # 全量磁盘分区、设备、容量、扇区信息
  5. blkid # 查看分区UUID、文件系统、设备类型
  6. # 3. 磁盘硬件精准参数(需安装hdparm)
  7. yum install hdparm -y || apt install hdparm -y
  8. hdparm -i /dev/sda # 查看磁盘型号、序列号、接口、转速、缓存
  9. # 4. 磁盘IO读写性能检测
  10. hdparm -Tt /dev/sda # 检测磁盘缓存读取、磁盘实际读取速度
复制代码

1.6 网卡与网络硬件信息

查询网卡物理设备、型号、MAC地址、带宽、状态,排查网卡异常、多网卡识别、带宽适配问题。

  1. # 1. 网卡设备全量信息
  2. lspci | grep -i net # 查看网卡型号、厂商、总线编号
  3. # 2. 网卡基础状态与MAC地址
  4. ip addr # 查看所有网卡IP、MAC、网卡状态
  5. ifconfig -a # 查看所有网卡(含未启用网卡)
  6. # 3. 网卡带宽与硬件参数
  7. ethtool eth0 # 查看网卡速率、双工模式、硬件参数、链路状态
复制代码

1.7 主板、BIOS、总线硬件信息

查询服务器主板型号、BIOS版本、出厂信息、设备总线,适配硬件年检、服务器溯源、BIOS升级场景。

  1. # 主板、BIOS、整机硬件信息
  2. dmidecode -t system # 查看主板型号、服务器厂商、出厂序列号
  3. dmidecode -t bios # 查看BIOS版本、发布时间、固件信息
  4. lspci # 查看所有PCI总线设备(显卡、声卡、外设硬件)
复制代码

1.8 硬件温度与功耗监控(物理机专属)

物理服务器专属,监控CPU、主板、硬盘温度,排查硬件过热、降频、死机故障,虚拟机/云服务器无硬件温度数据。

  1. # 安装温度监控工具
  2. yum install lm-sensors -y || apt install lm-sensors -y
  3. sensors # 查看CPU、主板、硬盘实时温度、风扇转速
复制代码

1.9 高频易错坑点与场景适配
  • 虚拟机硬件误区:云服务器/虚拟机的CPU、内存、磁盘均为虚拟化硬件,dmidecode、sensors 无法查询真实物理硬件参数,仅物理机生效。

  • 超线程识别误区:逻辑核心数=物理核心数×线程数,超线程开启后逻辑核翻倍,算力并非翻倍,配置进程并发需按需适配。

  • 内存信息区分:free -h 查看系统使用内存,lsmem/dmidecode查看物理硬件内存,扩容需以物理插槽信息为准。

  • 磁盘设备命名规则:物理机多为sda/sdb,虚拟机可能为vda/vdb,不可固化设备名称,优先用UUID挂载。

  • 网卡链路排查坑:网卡IP正常但无法联网,需用ethtool 排查硬件链路、带宽模式是否匹配交换机配置。

1.10 生产硬件巡检标准命令组合
  1. # 服务器硬件一键巡检组合
  2. echo "=== 系统版本 ===" && cat /etc/os-release
  3. echo "=== CPU信息 ===" && lscpu | grep -E "CPU\(s\)|Core|MHz"
  4. echo "=== 内存信息 ===" && free -h && lsmem
  5. echo "=== 磁盘信息 ===" && lsblk && df -h
  6. echo "=== 网卡信息 ===" && ip addr && ethtool eth0
  7. echo "=== 系统运行状态 ===" && uptime
复制代码

  1. uname -r # 内核版本
  2. uname -a # 完整系统信息
  3. cat /etc/os-release # 发行版版本
  4. lscpu # CPU信息
  5. lsmem # 内存硬件
  6. lsblk # 磁盘硬件
  7. lspci # PCI硬件
复制代码

2. 时间与时区【生产完整版+时区配置+时间同步+故障避坑+面试精讲】

2.1 模块总述

Linux服务器时间与时区是日志排查、定时任务、业务数据统计、集群服务同步的核心基础。时间错乱、时区不一致会导致日志时间错位、crontab定时任务失效、集群节点同步失败、业务订单时间异常、数据对账失误等线上故障。本节完整补全时区查看/切换、系统时间校准、硬件时间同步、NTP网络时间校准、定时同步、生产规范与高频坑点,全覆盖CentOS、Ubuntu全系系统。

2.2 基础时间与时区查看命令

日常运维首选简洁查询指令,快速核验服务器时间、时区、同步状态,是时间故障排查的第一步。

  1. # 1. 查看系统当前时间、日期、时区
  2. date # 输出完整系统时间、时区、星期
  3. date +"%Y-%m-%d %H:%M:%S" # 自定义格式化输出标准时间(日志、脚本刚需)
  4. date +%Y # 单独获取年份
  5. date +%m # 单独获取月份
  6. date +%d # 单独获取日期
  7. date +%H:%M:%S # 单独获取时分秒
  8. # 2. 查看系统时区、时间同步全状态(生产核心)
  9. timedatectl # 完整信息:时区、系统时间、硬件时间、NTP同步状态
  10. ls /etc/localtime # 查看时区软链接指向,确认当前生效时区
  11. # 3. 查看所有可用时区
  12. timedatectl list-timezones # 列出系统全部时区
  13. timedatectl list-timezones | grep Shanghai # 精准筛选亚洲上海时区
复制代码

2.3 时区配置与切换(生产统一北京时间)

生产服务器统一配置Asia/Shanghai北京时间,杜绝时区混乱,集群所有节点时区必须保持一致,避免跨节点时间错位。提供两种适配全系系统的配置方式,永久生效、重启不失效。

  1. # 方式一:timedatectl 标准配置(CentOS7+/Ubuntu16+ 推荐,一键生效)
  2. timedatectl set-timezone Asia/Shanghai
  3. # 方式二:软链接强制配置(兼容所有Linux发行版,通用无报错)
  4. ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  5. # 配置后核验时区是否生效
  6. date
  7. timedatectl
复制代码

2.4 系统时间手动校准(临时纠错)

适用于服务器时间偏差较小、临时时间纠错场景,手动修改系统时间,需区分系统时间与硬件时间,避免重启时间还原。

  1. # 1. 手动设置完整时间(年月日时分秒)
  2. date -s "2026-06-29 10:30:00"
  3. # 2. 单独设置日期(时间不变)
  4. date -s "2026-06-29"
  5. # 3. 单独设置时分秒(日期不变)
  6. date -s "10:30:00"
  7. # 4. 系统时间写入硬件时间(核心!防止重启时间重置)
  8. hwclock -w # 将系统时间同步写入主板硬件时钟
  9. hwclock # 查看硬件时间是否同步成功
复制代码

2.5 网络NTP时间自动同步(生产核心,永久校准)

手动修改时间会存在偏差,生产所有服务器必须配置NTP网络时间自动同步,实时校准标准北京时间,保证单机、集群时间精准统一。分为传统ntp服务和新版chrony服务(CentOS8+/Rocky/Ubuntu新版默认)。

2.5.1 chrony 时间同步(新版系统默认,推荐)
  1. # 1. 查看chrony服务状态
  2. systemctl status chronyd
  3. # 2. 开启开机自启、启动服务
  4. systemctl start chronyd
  5. systemctl enable chronyd
  6. # 3. 查看时间同步溯源、校准状态
  7. chronyc tracking # 查看当前时间同步源、偏差值、同步状态
  8. chronyc sources -v # 详细查看所有NTP同步服务器、同步优先级
  9. # 4. 手动强制立即同步时间
  10. chronyc makestep
复制代码

2.5.2 ntpdate 临时同步(老旧系统/临时校准)
  1. # 安装ntp工具(无则执行)
  2. yum install ntpdate -y || apt install ntpdate -y
  3. # 阿里云NTP公共服务器同步(国内速度最快、稳定)
  4. ntpdate ntp.aliyun.com
  5. ntpdate time1.aliyun.com
  6. # 腾讯云公共NTP服务器(备选)
  7. ntpdate time1.tencent.com
复制代码

2.5.3 固定NTP源配置(永久稳定同步)

修改chrony/ntp配置文件,替换为国内阿里云、腾讯云NTP源,杜绝国外源同步延迟、同步失败问题。

  1. # chrony配置文件:/etc/chrony.conf
  2. # 注释原有国外源,添加国内阿里源
  3. server ntp.aliyun.com iburst
  4. server time1.aliyun.com iburst
  5. server time2.aliyun.com iburst
  6. # 重启服务生效
  7. 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服务器,统一内网所有设备时间标准。

  1. # 时区查看与配置
  2. timedatectl
  3. timedatectl set-timezone Asia/Shanghai
  4. ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  5. # 系统时间操作
  6. date
  7. date -s "2026-06-29 10:30:00"
  8. # 硬件时间同步
  9. hwclock # 查看硬件时间
  10. hwclock -w # 系统时间写入硬件
  11. # 网络时间同步
  12. chronyc tracking
  13. chronyc sources -v
  14. ntpdate ntp.aliyun.com
复制代码

  1. date # 当前时间
  2. date -s "2026-01-01 12:00"
  3. timedatectl # 时区同步
  4. ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  5. 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. # 1. 实时监控系统全局日志(实时排错首选)
  2. tail -F /var/log/messages
  3. # 2. 排查登录暴力破解、异常登录
  4. grep -i "Failed password" /var/log/secure # 筛选登录失败记录
  5. grep -i "Accepted password" /var/log/secure # 筛选成功登录记录
  6. # 3. 排查定时任务执行异常
  7. tail -F /var/log/cron
  8. grep -i "error" /var/log/cron
  9. # 4. 排查内核硬件、内存溢出故障
  10. dmesg | grep -i error # 实时内核报错
  11. dmesg | grep -i oom # 排查内存溢出杀死进程
  12. # 5. 检索近1小时系统报错日志
  13. grep -i "error|warn|fail" /var/log/messages | grep "$(date -d '1 hour ago' +'%Y-%m-%d %H')"
  14. # 6. 大日志文件分页检索报错
  15. less -N /var/log/messages
  16. /error # 快速匹配报错关键词
复制代码

3.4 journalctl 日志精讲(Systemd系统专属,生产核心)

CentOS7+/Ubuntu16+ 系统默认使用Systemd管理服务,journalctl是专属服务日志工具,无需查找日志文件,可直接精准检索单个服务启停、报错、运行日志,是服务故障排查最优方案。

  1. # 1. 基础查看
  2. journalctl # 查看所有系统服务日志
  3. journalctl -f # 实时刷新监控所有服务日志(等价tail -F)
  4. journalctl -n 100 # 查看最新100条日志
  5. # 2. 精准查看单个服务日志(最高频)
  6. journalctl -u nginx.service # 查看Nginx服务全程日志
  7. journalctl -u mysqld.service # 查看MySQL服务日志
  8. journalctl -u crond.service # 查看定时任务服务日志
  9. # 3. 时段精准溯源(故障定位核心)
  10. journalctl --since "10 minutes ago" # 近10分钟日志
  11. journalctl --since "2026-06-29 10:00:00" --until "2026-06-29 11:00:00" # 指定时段日志
  12. # 4. 开机启动日志排查
  13. journalctl -b # 查看本次开机后所有日志
  14. journalctl -b -1 # 查看上一次开机的历史日志(重启故障溯源必备)
  15. # 5. 日志级别筛选(只看报错)
  16. journalctl -p err # 仅筛选错误级别日志,过滤无关冗余信息
  17. # 6. 日志持久化配置(默认重启丢失历史日志)
  18. # 修改配置:/etc/systemd/journald.conf
  19. # Storage=persistent 开启持久化,重启保留日志
复制代码

3.5 日志轮转 logrotate(生产必备,磁盘爆满核心解决方案)

系统日志会持续写入扩容,若无轮转规则会导致日志无限增大、磁盘爆满。Linux 默认通过 logrotate 实现日志自动切割、压缩、过期删除,是运维核心保障机制。

3.5.1 核心配置与原理
  • 主配置文件:/etc/logrotate.conf(全局默认规则)

  • 自定义服务轮转配置:/etc/logrotate.d/(所有服务专属轮转规则)

  • 执行机制:系统crontab定时触发,自动切割大日志、压缩归档、删除过期日志

3.5.2 生产标准轮转配置示例
  1. # Nginx日志生产轮转配置(/etc/logrotate.d/nginx)
  2. /var/log/nginx/*.log {
  3. daily # 按天切割
  4. rotate 7 # 保留最近7天日志
  5. compress # 压缩归档历史日志
  6. missingok # 日志文件不存在不报错
  7. notifempty # 空日志不切割
  8. dateext # 日志后缀加日期,避免覆盖
  9. create 0644 root root # 新建日志权限与属主
  10. }
  11. # 手动强制触发日志轮转(调试配置必备)
  12. 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日志持久化,保留完整历史故障溯源依据。

  1. # 核心日志路径
  2. /var/log/messages # 系统全局日志
  3. /var/log/secure # 安全登录审计日志
  4. /var/log/dmesg # 内核硬件日志
  5. /var/log/cron # 定时任务日志
  6. # 传统排查命令
  7. tail -F /var/log/messages
  8. grep -i error /var/log/secure
  9. dmesg | grep -i fail
  10. # journalctl服务日志
  11. journalctl -u nginx -f
  12. journalctl --since "30 minutes ago"
  13. journalctl -b -p err
  14. # 日志轮转调试
  15. logrotate -vf /etc/logrotate.d/服务名
复制代码

十、Shell 脚本基础配套命令【完整版|脚本开发必备|生产可直接复用】

Shell脚本是Linux自动化运维、批量处理、服务部署、日志清洗、定时任务的核心载体,所有运维提效、自动化场景均依赖Shell脚本实现。本节完整补全脚本语法基础、变量定义、数值运算、条件判断、循环语句、函数封装、输入输出、管道重定向、脚本调试、传参规则、高频避坑点,所有语法适配生产脚本编写,可直接复制复用。

1. 脚本基础规范与执行方式

1.1 脚本头部声明

所有Shell脚本首行必须指定解析器,规范脚本运行环境,避免系统默认Shell兼容问题。

  1. # 标准bash解析器声明(生产通用,必写首行)
  2. #!/bin/bash
  3. # 脚本注释规范:# 单行注释
  4. # 多行注释可通过 :<<EOF ... EOF 实现
  5. :<<COMMENT
  6. 此处为多行注释内容
  7. 可批量注释多行代码
  8. COMMENT
复制代码

1.2 脚本三种执行方式(权限区别)
  1. # 1. 绝对/相对路径执行(需要脚本执行权限)
  2. chmod +x test.sh # 赋予脚本执行权限
  3. ./test.sh # 相对路径执行(当前目录)
  4. /root/test.sh # 绝对路径执行
  5. # 2. 直接调用解析器执行(无需执行权限,生产调试常用)
  6. bash test.sh
  7. sh test.sh
  8. # 3. source 加载执行(在当前终端环境运行,变量全局生效)
  9. source test.sh
  10. . test.sh # source简写形式
  11. # 核心区别:./执行会新开子终端,source在当前终端执行,可读取脚本变量
复制代码

2. Shell变量体系(脚本核心)

2.1 变量定义与赋值规范
  1. # 1. 自定义普通变量(赋值=左右禁止空格!高频坑点)
  2. name="nginx服务"
  3. version=1.24
  4. num=100
  5. # 2. 变量调用({}包裹变量为规范写法,避免字符串拼接歧义)
  6. echo $name
  7. echo ${version}
  8. # 3. 只读变量(不可修改、不可删除,配置参数常用)
  9. readonly APP_NAME="java服务"
  10. # 4. 清空删除变量
  11. unset name
复制代码

2.2 系统特殊位置变量(脚本传参必备)

用于接收脚本执行时传入的参数,是脚本动态适配参数的核心。

  1. # 特殊参数变量大全
  2. $0 # 获取脚本本身名称
  3. $1-$9 # 获取脚本第1-9个传入参数
  4. ${10} # 获取10及以上参数,必须加花括号
  5. $# # 获取传入参数总个数(参数校验核心)
  6. $* # 获取所有传入参数,整体作为一个字符串
  7. $@ # 获取所有传入参数,逐个独立区分(循环遍历首选)
  8. $$ # 获取当前脚本运行PID
  9. $? # 获取上一条命令执行返回状态(0=执行成功,非0=失败,排错核心)
  10. # 实战示例:脚本传参
  11. # 执行:./test.sh a b c
  12. echo "脚本名:$0"
  13. echo "第一个参数:$1"
  14. echo "参数总数:$#"
  15. echo "所有参数:$@"
复制代码

3. 数值与字符串运算

3.1 整数运算(Shell仅原生支持整数)
  1. # 方式1:expr 运算(兼容所有系统)
  2. a=10
  3. b=20
  4. expr $a + $b # 加法
  5. expr $a - $b # 减法
  6. expr $a \* $b # 乘法(*必须加转义符\)
  7. expr $b / $a # 除法
  8. expr $b % $a # 取余
  9. # 方式2:$(( )) 运算(生产首选,简洁无转义)
  10. echo $((a + b))
  11. echo $((a * b))
  12. echo $((b / a))
  13. # 自增自减
  14. i=1
  15. i=$((i+1)) # 自增1
  16. i=$((i-1)) # 自减1
复制代码

3.2 字符串处理(脚本高频)
  1. str="linux-shell-script"
  2. # 1. 字符串长度
  3. echo ${#str}
  4. # 2. 字符串截取
  5. echo ${str:0:5} # 从第0位开始,截取5个字符
  6. echo ${str:5} # 从第5位开始,截取到末尾
  7. # 3. 字符串替换
  8. echo ${str/linux/LINUX} # 替换第一个匹配字符
  9. echo ${str//-/_} # 替换所有匹配字符
  10. # 4. 字符串判断
  11. [ -z "$str" ] # 判断字符串是否为空
  12. [ -n "$str" ] # 判断字符串是否非空
复制代码

4. 条件判断语法(test/[]/if)

Shell所有条件判断基于 test 或 [],中括号左右必须加空格(致命语法坑),适配文件、字符串、数字、权限全场景判断。

4.1 文件状态判断(运维脚本核心)
  1. # 文件判断参数
  2. [ -f "test.txt" ] # 判断是否为普通文件且存在
  3. [ -d "/data" ] # 判断是否为目录且存在
  4. [ -e "test.txt" ] # 判断文件/目录是否存在
  5. [ -r "test.txt" ] # 判断文件是否可读
  6. [ -w "test.txt" ] # 判断文件是否可写
  7. [ -x "test.sh" ] # 判断文件是否可执行
  8. [ -s "test.txt" ] # 判断文件非空
  9. # 实战if判断示例
  10. if [ -d "/usr/local/nginx" ];then
  11. echo "nginx目录已存在"
  12. else
  13. echo "nginx目录不存在"
  14. fi
复制代码

4.2 数字与字符串判断
  1. # 1. 数字比较(只能用 -eq/-ne/-gt/-lt/-ge/-le)
  2. a=10
  3. b=20
  4. [ $a -eq $b ] # 等于
  5. [ $a -ne $b ] # 不等于
  6. [ $a -gt $b ] # 大于
  7. [ $a -lt $b ] # 小于
  8. [ $a -ge $b ] # 大于等于
  9. [ $a -le $b ] # 小于等于
  10. # 2. 字符串比较(只能用 =/!=)
  11. str1="shell"
  12. str2="linux"
  13. [ "$str1" = "$str2" ] # 字符串相等
  14. [ "$str1" != "$str2" ] # 字符串不等
  15. [ -z "$str1" ] # 字符串为空
  16. [ -n "$str1" ] # 字符串非空
复制代码

4.3 多条件逻辑判断
  1. # -a 逻辑与(同时满足)
  2. [ -f "test.txt" -a -s "test.txt" ]
  3. # -o 逻辑或(满足其一)
  4. [ $a -gt 5 -o $b -lt 10 ]
  5. # && 与、|| 或(if语句常用)
  6. if [ $a -gt 0 ] && [ $b -gt 0 ];then
  7. echo "两个数均为正数"
  8. fi
复制代码

5. 循环语句(批量处理核心)

5.1 for循环(批量操作首选)
  1. # 1. 基础遍历循环
  2. for i in 1 2 3 4 5;do
  3. echo "数字:$i"
  4. done
  5. # 2. 有序区间循环(批量创建文件/目录必备)
  6. for i in {01..10};do
  7. touch test_${i}.txt
  8. done
  9. # 3. 命令结果遍历循环
  10. for file in $(ls /var/log);do
  11. echo "日志文件:$file"
  12. done
  13. # 4. C语言风格循环(数值迭代)
  14. for ((i=1;i<=5;i++));do
  15. echo "迭代:$i"
  16. done
复制代码

5.2 while循环(持续监听/逐行读取)
  1. # 1. 基础while循环
  2. i=1
  3. while [ $i -le 5 ];do
  4. echo "循环次数:$i"
  5. i=$((i+1))
  6. done
  7. # 2. 逐行读取文件内容(生产日志解析刚需)
  8. while read line;do
  9. echo "行内容:$line"
  10. done < test.txt
  11. # 3. 无限循环(服务监听、常驻脚本)
  12. while true;do
  13. echo "持续运行中"
  14. sleep 1
  15. done
复制代码

5.3 循环控制语句
  1. # break:终止整个循环
  2. # continue:跳过本次循环,直接进入下一次循环
  3. for i in {1..5};do
  4. if [ $i -eq 3 ];then
  5. continue # 跳过3,不执行本次输出
  6. fi
  7. echo $i
  8. done
  9. for i in {1..5};do
  10. if [ $i -eq 3 ];then
  11. break # 到3直接终止循环
  12. fi
  13. echo $i
  14. done
复制代码

6. 函数封装(脚本模块化)

将重复代码封装为函数,实现脚本复用、精简代码,是规范脚本的必备语法。

  1. # 1. 函数定义与调用
  2. function check_file() {
  3. # 函数内$1代表函数传入参数
  4. if [ -f "$1" ];then
  5. echo "文件 $1 存在"
  6. return 0 # 返回成功状态码
  7. else
  8. echo "文件 $1 不存在"
  9. return 1 # 返回失败状态码
  10. fi
  11. }
  12. # 调用函数并传参
  13. check_file "/etc/profile"
  14. # 2. 无function简写形式(生产常用)
  15. add() {
  16. echo $(( $1 + $2 ))
  17. }
  18. add 10 20
复制代码

7. 输入输出、管道与重定向(脚本核心)

7.1 交互式输入read
  1. # read 接收终端用户输入
  2. echo "请输入文件名:"
  3. read filename
  4. echo "你输入的文件名是:$filename"
  5. # 静默输入(不显示输入内容,密码输入必备)
  6. read -s -p "请输入密码:" pwd
复制代码

7.2 重定向全覆盖
  1. # 标准输出重定向
  2. echo "测试内容" > test.txt # 覆盖写入文件
  3. echo "追加内容" >> test.txt # 追加写入文件
  4. # 错误输出重定向
  5. ls /none 2> error.log # 错误信息单独写入日志
  6. # 标准输出+错误输出合并(生产日志必备)
  7. command > run.log 2>&1 # 所有输出统一写入日志
  8. command &> run.log # 简写形式,等价上方
  9. # 空设备清空输出(屏蔽无关日志)
  10. command > /dev/null 2>&1
复制代码

7.3 管道与特殊符号
  1. # 管道 | :将前一条命令输出作为后一条命令输入
  2. ps -ef | grep nginx
  3. ls -l | grep .log
  4. # 逻辑符号
  5. && # 前命令成功,才执行后命令(链式执行)
  6. || # 前命令失败,才执行后命令(容错兜底)
  7. ; # 前后命令顺序执行,互不影响
  8. # 实战链式执行
  9. yum install nginx -y && systemctl start nginx
复制代码

8. 脚本调试与容错

  1. # 1. 脚本调试模式
  2. bash -n test.sh # 仅检查语法错误,不执行脚本
  3. bash -v test.sh # 详细输出每一行执行代码
  4. bash -x test.sh # 分步调试,输出所有执行过程(排错神器)
  5. # 2. 脚本容错配置(生产脚本头部添加)
  6. set -e # 遇到命令执行失败,直接退出脚本,避免错误累积
  7. set -u # 遇到未定义变量,直接报错退出
  8. set -o pipefail # 管道命令任意环节失败,整体判定失败
复制代码

9. 高频避坑总结(脚本必看)

  • 中括号空格坑:[ $a -gt 0 ] 中括号左右必须有空格,无空格直接语法报错。

  • 变量赋值空格坑:变量赋值 a=10 禁止写 a = 10,=左右不能有空格。

  • 数字字符串判断混淆:数字比较用-eq/-gt,字符串比较用=/!=,不可混用。

  • 参数变量范围坑:10位以上参数必须 ${10} 加花括号,$10 识别为$1+0。

  • 循环遍历空格文件名坑:for遍历文件名含空格会拆分出错,优先用while read逐行读取。

  • 子终端变量失效坑:./执行脚本的变量无法在当前终端生效,需source执行。

10. 生产极简万能脚本模板

  1. #!/bin/bash
  2. # 生产脚本标准模板:容错+注释+传参+日志输出
  3. set -euo pipefail
  4. # 定义全局变量
  5. LOG_FILE="./run_$(date +%Y%m%d).log"
  6. # 定义功能函数
  7. main() {
  8. echo "脚本开始执行" >> ${LOG_FILE}
  9. # 自定义业务逻辑
  10. echo "执行成功" >> ${LOG_FILE}
  11. }
  12. # 调用主函数
  13. main
  14. 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

用途:精准筛选本次开机后的所有系统报错,排查开机故障、服务启动异常

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行