Linux 常用命令完整知识体系

Linux 常用命令完整知识体系

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

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

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

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

XML 复制代码
# ========== 远程登录操作 ==========
# 标准远程登录(默认22端口可省略 -p)
ssh 用户名@IP地址                 
# 非22端口远程登录
ssh 用户名@IP -p 端口号          
# 免交互远程执行命令(常用脚本调用)
ssh 用户名@IP "命令"              

# ========== 开关机与重启(生产慎用) ==========
shutdown -h now         # 立即关机(安全,终止进程、保存数据)
shutdown -h 10          # 10分钟后自动关机
shutdown -r now         # 立即重启
shutdown -r 15:30      # 指定时间重启
shutdown -c            # 取消已设置的关机/重启计划

reboot                 # 快速重启(生产常用)
halt                   # 停机,不切断电源
poweroff               # 彻底断电关机

# ========== 在线用户与系统状态查看 ==========
whoami                 # 查看当前登录用户名
who                    # 查看所有在线登录用户、登录终端、登录时间
w                      # 增强版who,显示用户操作、系统负载、运行时长
users                  # 简洁查看在线用户

# ========== 终端基础操作 ==========
clear                  # 清空当前终端屏幕(等价 Ctrl+L)
echo 内容              # 终端打印输出内容
echo $SHELL            # 查看当前终端Shell类型

# ========== 历史命令高效操作 ==========
history                # 查看所有执行过的历史命令
history 20             # 只查看最近20条历史命令
!数字                  # 执行对应序号的历史命令 例:!100
!!                     # 快速执行上一条命令
!字符串                # 执行最近一条包含该字符串的命令
Ctrl+R                 # 搜索历史命令(终端快捷键)

# ========== 官方帮助文档(查命令参数必备) ==========
man ls                 # 查看命令完整手册(上下翻页,q退出)
ls --help              # 查看命令精简帮助(大部分命令支持)
info ls                # 超详细官方文档(比man更完整)
whatis ls              # 快速查看命令功能简介

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

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

  • 绝对路径 /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所有操作的基石,所有文件、配置、程序操作都依赖目录切换与检索。本小节补全命令底层原理、高频参数详解、生产场景、易错坑点、特殊用法,无冗余冷门参数,完全贴合运维实操、面试考点。

XML 复制代码
# ===================== 1. pwd 查看当前目录 =====================
# 作用:打印当前工作目录绝对路径,脚本、路径校验刚需
pwd                     # 输出逻辑路径(默认,跟随软链接路径)
pwd -P                  # 输出物理真实路径(强制解析软链接,显示源目录)
pwd -L                  # 输出逻辑路径(默认参数,可省略)

# ===================== 2. cd 目录切换(最高频) =====================
# 核心特性:cd为Shell内置命令,无磁盘IO,切换速度最快
cd /home                # 绝对路径切换,不受当前目录影响
cd test                 # 相对路径切换,仅适配当前目录下级目录
cd ~                    # 快速进入当前用户家目录(root→/root,普通用户→/home/用户名)
cd -                    # 来回切换:切换到上一次操作目录(工作目录快速切换神器)
cd ..                   # 切换到上一级目录
cd ../..                # 切换到上两级目录(多级返回常用)
cd .                    # 保留当前目录(无实际切换作用,多用于脚本占位、路径初始化)

# 高阶技巧:空白cd
cd                      # 直接回车,等价 cd ~,快速回家目录

# ===================== 3. ls 目录内容查看(核心参数大全) =====================
# 作用:列出目录下所有文件、目录、软链接,生产必带组合参数
ls                      # 仅列出非隐藏文件,简洁展示
ls -l                   # 长格式详情:权限、属主、属组、大小、修改时间、文件类型
ls -a                   # 显示所有文件,包含 . 开头的隐藏文件
ls -A                   # 显示隐藏文件,排除 . 和 .. 两个特殊目录(生产更干净)
ls -h                   # 人性化单位显示(KB/MB/GB,必须搭配 -l 使用)
ls -t                   # 按修改时间倒序(最新文件置顶,排查最新日志首选)
ls -rt                  # 按修改时间正序(最旧文件置顶,日志回溯排查)
ls -d                   # 仅展示目录本身,不递归展示目录内部文件(排查目录属性刚需)
ls -i                   # 查看文件inode编号(软硬链接、文件异常排查核心)
ls -S                   # 按文件大小倒序排序(快速查找大文件)
ls -p                   # 目录尾部加 / 标识,区分文件和目录

# 生产高频组合参数
ls -lhtr                # 人性化大小+时间正序,日常目录巡检万能组合
ls -Ahl                 # 展示所有文件+详情+人性化大小,干净无冗余

# ===================== 4. mkdir 创建目录 =====================
# 基础创建
mkdir test01                    # 创建单个空目录
mkdir test02 test03 test04      # 批量创建多个同级目录

# 核心高阶参数(生产刚需)
mkdir -p /a/b/c/d/e             # 递归创建多级嵌套目录(目录不存在则创建,存在不报错)
mkdir -m 755 test05             # 创建目录同时指定权限,无需后续chmod修改
mkdir -v test06                 # 可视化创建,显示创建过程日志(脚本调试常用)

# 批量有序创建(实战技巧)
mkdir dir{01..10}               # 批量创建 dir01-dir10 十个有序目录

# ===================== 5. rmdir 删除空目录(安全删除) =====================
# 核心特性:仅删除空目录,不会误删文件,无高危风险,生产安全首选
rmdir test01                    # 删除单个空目录
rmdir dir01 dir02               # 批量删除多个空目录
rmdir -p /a/b/c                 # 递归逐级删除多级空目录(从子级到父级依次删除)
rmdir -v test03                 # 可视化删除,输出删除日志
1. 2 核心易错注意点
  • rmdir 严格限制 :仅能删除完全空白 的目录,目录内存在文件、子目录均删除失败,无任何误删风险;需要删除非空目录必须使用 rm -rf

  • cd .. 边界问题 :已经处于根目录 / 时,执行 cd .. 无任何报错、无任何变化,不会跳出系统根目录。

  • ls 排序误区 :单独 ls -t最新文件在顶部,查看历史日志建议用 ls -rt 正序,避免最新文件遮挡旧文件。

  • mkdir -p 容错性:多级目录已存在时,不会报错中断,非常适合脚本自动化部署,无需提前判断目录是否存在。

1.3 面试高频考点:逻辑路径 vs 物理路径

软链接目录下,pwd 显示链接路径(逻辑路径),pwd -P 显示真实源目录路径(物理路径),排查软链接目录异常、磁盘挂载问题必备。

1.4 生产最佳实践总结
  • 日常目录查看统一使用 ls -lhtr,兼顾大小、时间、可读性;

  • 脚本创建目录强制加 -p,避免目录已存在导致脚本报错;

  • 清理空目录优先用 rmdir,非空目录谨慎使用 rm -rf

  • 多目录切换熟练使用 cd -,大幅提升运维操作效率。

2. 文件增删改查与移动复制(touch/rm/cp/mv/ln)【生产完整版+原理+避坑】

2.1 命令总述

本节为Linux最高频文件操作集合,覆盖文件创建、删除、复制、移动、重命名、软硬链接。所有命令贴合线上运维、脚本自动化、日志整理场景,补齐官方高频参数、底层特性、生产禁忌、面试核心区别,无冷门参数、无冗余内容。

XML 复制代码
# ===================== 1. touch 文件创建 =====================
# 核心作用:创建空文件 / 更新文件时间戳
touch test.txt                  # 文件不存在则创建空文件,存在则更新「访问+修改时间」
touch file1.log file2.txt       # 一次性批量创建多个文件
touch -c nofile.txt             # -c 不创建新文件,仅更新已有文件时间戳(防止生成空文件)
touch -t 202601011200 test.txt  # 指定时间戳:2026-01-01 12:00

# 实战技巧:批量有序创建文件(脚本/测试刚需)
touch data{01..10}.txt

# ===================== 2. rm 文件/目录删除(高危命令) =====================
# 特性:Linux无回收站,删除默认永久丢失,生产严禁裸删
rm test.txt                     # 删除文件,交互式询问 y/n
rm -f test.txt                  # 强制删除,不询问、不报错、静默删除(日常主力)
rm -rf testdir/                 # 递归+强制删除目录及所有内容(生产高频,极度谨慎)
rm -ri testdir/                 # 交互式逐级确认删除(安全删未知目录)
rm -rv testdir/                 # 可视化删除,打印每一步删除日志

# 生产禁忌写法(绝对禁止)
# rm -rf /        彻底清空根目录
# rm -rf /*       清空系统所有数据

# ===================== 3. cp 文件/目录复制 =====================
# 特性:复制产生新文件,占用磁盘IO,生成独立inode
cp file.txt /tmp/               # 复制文件到指定目录,同名直接覆盖
cp file.txt /tmp/newfile.txt    # 复制并重命名
cp -r dir1 /tmp/                # 递归复制目录(复制目录必须带 -r)
cp -R dir1 /tmp/                # 递归复制,保留软链接本身(不递归跟进源文件)
cp -p file.txt /tmp/            # 保留原有:权限、属主、时间戳、属性
cp -rf dir1 /tmp/               # 强制覆盖、静默复制(脚本自动化专用)
cp -n file.txt /tmp/            # 不覆盖已有文件(安全复制首选)

# ===================== 4. mv 移动/重命名 =====================
# 核心特性:同分区移动仅修改路径指针,无磁盘IO、速度极快!
mv old.txt new.txt              # 同目录 = 重命名文件/目录
mv file.txt /home/              # 跨目录 = 移动文件
mv dir1 /data/                  # 移动整个目录(无需加-r,比cp高效百倍)
mv -f file.txt /data/           # 强制覆盖不提示
mv -n file.txt /data/           # 不覆盖已有文件(安全移动)
mv -v file.txt /data/           # 可视化移动日志

# ===================== 5. ln 软硬链接创建(面试TOP考点) =====================
# 软链接(符号链接)= Windows快捷方式
ln -s /etc/nginx/nginx.conf nginx.conf  

# 硬链接 = 同一文件多入口,共享inode
ln source.txt hard_link.txt       

# 链接查看
ls -li                            # 查看inode、区分软硬链接
2.2 核心原理精讲:软硬链接完整区别(面试必考)
  • 软链接(ln -s) :独立文件、存储路径指向;支持跨分区、跨磁盘、支持目录;源文件删除后链接失效(红标报错);权限继承源文件。

  • 硬链接(ln) :多个文件名共享同一个inode、同一磁盘数据;不支持跨分区、不支持目录、不能跨设备;删除任意一个链接文件,数据不丢失,所有链接正常使用。

  • 生产用途:软链接用于版本切换、日志统一目录、程序路径迁移兼容;硬链接用于文件备份、防止误删数据。

2.3 高频易错点 & 踩坑总结
  • touch 误区 :touch 不是单纯创建文件,已有文件会刷新时间戳 ,如需只创建不更新,使用 touch -c

  • rm 致命坑 :Linux无回收站,rm -rf 删除永久丢失,生产操作目录建议先 ls 确认路径。

  • cp 目录必带-r :不加-r复制目录会直接报错,日常脚本统一用 cp -rf 容错。

  • mv 高效特性:同分区移动不消耗IO,大文件迁移优先mv,跨分区mv等价「cp+rm」。

  • 软硬链接禁忌:目录不允许创建硬链接,跨磁盘/跨分区无法创建硬链接。

2.4 生产最佳实践
  • 自动化脚本创建文件统一使用 touch -c,避免多余空文件生成;

  • 线上删除目录优先先移动到垃圾目录,确认无误再删除,规避误删;

  • 复制重要配置文件使用 cp -p 保留权限时间属性,保证服务兼容;

  • 多版本软件切换全部使用软链接,灵活切换版本、无需改配置;

  • 批量文件操作优先使用 {} 批量语法,高效简洁。

3. 文件内容查看命令(cat/more/less/head/tail)全场景【生产完整版+原理+避坑】

3.1 命令总述

文件内容查看是日志排查、配置校验、文件解析的核心基础,本节涵盖5大高频查看命令,精准区分小文件全量查看、大文件分页查看、头部尾部检索、实时日志监控四大生产场景。补齐全套实用参数、专属操作快捷键、场景选型逻辑、易错坑点,无冗余冷门参数,完全贴合线上运维、面试实战。

XML 复制代码
# ===================== 1. cat 全量查看(小文件专属) =====================
# 核心原理:一次性读取文件所有内容加载到终端,不适合大文件,容易卡顿刷屏
cat test.txt                    # 查看文件全部内容
cat -n test.txt                 # 显示所有内容+全局行号(报错定位行号必备)
cat -b test.txt                 # 显示行号,空行不编号(更整洁,生产首选)
cat -E test.txt                 # 每行末尾加$符号,快速排查行尾空格、换行符
cat -s test.txt                 # 压缩连续空行,多个空行合并为一行

# 拓展用法:多文件合并查看
cat file1.txt file2.txt         # 依次查看多个文件内容

# ===================== 2. more 单向分页查看(中大文件基础分页) =====================
# 核心特性:单向翻阅,仅支持向下翻页/翻行,看完自动退出
more app.log                    # 分页查看文件内容
more -10 app.log                # 自定义每页展示10行

# 专属操作快捷键
# 空格 :向下翻一页
# 回车 :向下翻一行
# q    :立即退出查看
# Ctrl+F / Ctrl+B :快速翻页

# ===================== 3. less 全能分页查看(生产首选、功能最强) =====================
# 核心优势:支持上下翻阅、关键词搜索、行号查看、不会自动退出,适配超大日志文件
less app.log                    # 打开文件,全能分页查看
less -N app.log                 # 直接显示行号

# 生产高频快捷键(必背)
# /关键词   :向下搜索匹配关键词(日志查error核心)
# ?关键词   :向上搜索匹配关键词
# n        :跳转下一个匹配结果
# N        :跳转上一个匹配结果
# G        :快速跳转到文件末尾
# 1G       :快速跳转到文件开头
# 上下箭头 :逐行翻阅
# q        :退出查看

# ===================== 4. head 查看文件头部(检索文件开头信息) =====================
# 默认展示前10行,适配查看配置文件表头、日志开头规则
head nginx.conf                 # 默认查看前10行
head -n 20 nginx.conf           # 自定义查看前20行
head -n -5 test.txt             # 查看全部内容,排除最后5行(小众实用)

# ===================== 5. tail 查看文件尾部+实时日志监控(运维核心) =====================
# 核心场景:线上实时监控运行日志、排查实时报错信息
tail app.log                    # 默认查看最后10行
tail -n 30 app.log              # 自定义查看最后30行静态内容
tail -n 100 app.log             # 查看末尾100行,适配报错回溯

# 实时监控核心参数(生产重中之重)
tail -f app.log                 # 实时跟踪日志输出
# 缺陷:日志被切割/删除重建后,监控链路中断,失效停止输出

tail -F app.log                 # 强力实时监控(生产唯一推荐)
# 优势:自动监听文件inode变化,日志切割、删除重建后自动重连,持续监控不中断

# 组合用法:回溯100行并实时监控
tail -n 100 -F app.log
3.2 核心场景选型规则(生产标准规范)
  • cat :仅用于 10MB以内小文件、配置文件快速全量查看,禁止用于超大日志,避免终端卡顿、内存占用过高。

  • more:适配中等大小文件简单翻阅,功能单一,仅临时使用,生产优先替代为less。

  • less大文件查看首选,支持搜索、上下翻阅、灵活跳转,是运维查看静态日志、大文件的万能命令。

  • head:专门查看文件开头配置、表头、初始化信息,快速校验文件头部规则。

  • tail :静态回溯用tail -n,线上实时日志监控统一使用 tail -F,规避日志切割导致的监控中断问题。

3.3 高频易错点 & 面试核心考点
  • cat致命误区:大文件使用cat会一次性加载全部内容,瞬间刷屏、占用系统内存,严重时导致终端卡死,生产严禁滥用。

  • tail -f 与 tail -F 核心区别(面试必考):-f 跟随文件inode,文件重建后失效;-F 跟随文件名,自动适配文件重建、切割,稳定性更强。

  • less自动退出问题:less查看文件不会自动退出,需手动输入q退出,适合精细检索;more查看完毕会自动退出。

  • 行号参数区别:cat -b 空行不编号、cat -n 所有行均编号,排查代码、配置文件报错优先用-b。

3.4 生产最佳实践总结
  • 配置文件校验统一使用 cat -b,整洁展示行号,快速定位语法报错;

  • 10MB以上日志文件一律使用 less -N 分页查看,兼顾效率和可读性;

  • 线上服务日志实时监控强制使用 tail -F,适配日志切割场景,杜绝监控中断;

  • 排查日志历史报错,优先 tail -n 1000 回溯末尾内容,无需全量查看文件;

  • 精准检索日志报错,搭配less搜索快捷键,快速定位错误堆栈,排查效率翻倍。

4. 文件精准查找命令(find/locate/which/whereis)高阶精讲【生产完整版+原理+避坑】

4.1 命令总述

文件查找是运维日志清理、文件溯源、配置检索、批量处理的核心刚需。本节涵盖四大查找命令:find精准磁盘遍历、locate快速数据库检索、which命令路径查找、whereis系统文件全量定位。补全高阶筛选参数、批量处理动作、底层原理、命令差异、生产实战场景、面试高频考点,无冗余冷门参数,完全适配线上排错、自动化脚本编写。

XML 复制代码
# ===================== 四大查找命令核心定位 =====================
# find:实时扫描磁盘,精准度最高、功能最全,支持多条件复合筛选、批量操作
# locate:检索系统数据库,速度极快,存在时间延迟
# which:仅查找可执行命令的二进制路径
# whereis:查找命令二进制、配置、手册、源码全路径

# ===================== 1. find 高阶全量用法(生产核心) =====================
# 语法:find 查找路径 【筛选条件】 【执行动作】

# 1.1 按文件名筛选(精准/模糊/忽略大小写)
find /etc -name "nginx.conf"          # 全盘精准查找指定文件
find /var/log -name "*.log"           # 模糊匹配批量查找日志文件
find ./ -iname "DATA.TXT"             # -i 忽略大小写匹配文件

# 1.2 按文件类型筛选(精准过滤文件/目录/软链接)
find ./ -type f                       # 只查找普通文件
find ./ -type d                       # 只查找所有目录
find ./ -type l                       # 只查找所有软链接文件
find /dev -type b                     # 查找块设备文件(磁盘分区)

# 1.3 按文件大小筛选(日志清理、大文件排查刚需)
find ./ -size +100M                   # 查找大于100M的文件
find ./ -size -10M                    # 查找小于10M的文件
find ./ -size 50k                     # 查找等于50k的文件
find / -size +1G                      # 全盘查找1G以上大文件(磁盘爆满排查)

# 1.4 按时间筛选(文件归档、过期清理核心)
# mtime:修改时间  atime:访问时间  ctime:属性变更时间
find ./ -mtime -7                     # 近7天修改的文件
find ./ -mtime +30                    # 30天前修改的过期文件
find ./ -mmin -10                     # 10分钟内修改的文件(实时排查)

# 1.5 按权限/属主筛选(安全巡检、权限排查)
find ./ -perm 777                     # 查找权限为777的高危文件
find /home -user root                 # 查找root属主文件
find ./ -group nginx                  # 查找nginx属组文件

# 1.6 多条件复合筛选(高阶用法)
find ./ -name "*.log" -size +10M      # 查找所有大于10M的日志文件
find ./ -type f -mtime +15 -perm 644  # 15天前修改、权限644的普通文件

# 1.7 核心高阶:find批量执行动作(生产脚本刚需)
find /logs -name "*.log" -mtime +7 -delete              # 直接删除7天前过期日志
find ./ -name "*.tmp" -exec rm -f {} \;                 # 批量删除临时文件
find /etc -name "*.conf" -exec cp {} /backup/ \;        # 批量备份配置文件
find ./ -type f -exec ls -lh {} \;                       # 批量展示文件详情

# ===================== 2. locate 快速检索命令 =====================
locate nginx.conf                     # 快速匹配含关键词的所有文件路径
locate *.log                          # 批量匹配日志文件
updatedb                              # 更新系统检索数据库(核心依赖)

# ===================== 3. which 命令路径查找 =====================
which ls                              # 查看命令二进制可执行路径
which java                            # 定位JDK真实安装路径
which docker                          # 查找服务命令启动路径

# ===================== 4. whereis 全方位文件定位 =====================
whereis nginx                         # 输出:二进制路径+配置路径+手册路径
whereis java                          # 全方位检索程序相关所有文件
whereis -b nginx                      # 只查看二进制可执行文件
whereis -m nginx                      # 只查看帮助手册文件
4.2 四大查找命令底层原理与核心区别(面试必考)
  • find :实时遍历磁盘inode检索,精准无遗漏、无延迟,支持多条件复合筛选、批量操作;缺点是全盘检索速度较慢,适合精准排查、批量处理。

  • locate :检索 /var/lib/mlocate 系统预生成数据库,速度极快;新创建文件未录入数据库则无法检索,存在延迟,需手动执行 updatedb 更新。

  • which :仅遍历系统PATH 环境变量路径,只检索可执行命令,无法查找普通文件、配置文件。

  • whereis:专属系统程序检索,可同时查找二进制文件、配置文件、帮助文档、源码路径,仅适配系统命令/服务,不适合自定义文件查找。

4.3 高频易错点 & 踩坑总结
  • locate延迟坑 :新创建的文件、目录不会立刻被检索,必须执行 updatedb 更新数据库,生产排查新文件禁止用locate。

  • find -delete风险:find批量删除无回收站,执行前建议先去掉-delete,用ls确认匹配文件,避免误删系统文件。

  • which检索局限:自定义脚本、不在PATH环境变量中的命令,which无法查到,只能用find全盘检索。

  • 时间参数误区-mtime +7 代表7天前过期文件,不包含近7天;清理日志务必区分正负号,避免误删新日志。

  • exec语法坑-exec 结尾必须带 {} \;,空格和分号不可省略,否则命令报错。

4.4 生产最佳实践总结
  • 日常快速查已知系统命令路径,优先用 which/whereis,高效快捷;

  • 批量日志清理、大文件排查、自定义文件检索,统一使用 find,精准可控;

  • 服务器巡检、磁盘爆满排查,固定组合:find / -size +100M -type f快速定位大文件;

  • 自动化脚本清理过期日志,统一使用 find + -delete 语法,无需嵌套管道,简洁稳定;

  • 老旧服务器禁止频繁全盘find / 检索,IO占用极高,容易导致服务器卡顿,需指定精准目录检索。

5. 文件目录拓展实战技巧与避坑总结【生产完整版+高阶技巧+全局避坑】

5.1 模块总述

本小节整合前文所有文件、目录、查找命令的高阶实战技巧、批量操作语法、组合命令、全局致命坑点、生产通用规范。聚焦日常高频实操、脚本自动化、日志运维、批量处理场景,汇总面试高频综合考点,补齐单一命令未覆盖的组合用法、细节禁忌和通用最优实践,是文件目录模块的收尾精华总结。

5.2 核心高频易错坑点(全局避坑)
  • 正在写入的日志禁止rm删除 :服务正在写入的日志文件,直接rm -rf删除后,磁盘空间不会立即释放,进程仍占用文件句柄,导致磁盘爆满无法排查,必须用cat /dev/null > 文件清空。

  • 批量操作{}语法坑{01..10}为规范两位数命名,{1..10}为单数命名,混用会导致文件排序混乱,生产批量创建统一用补零格式。

  • 软链接删除误区 :删除软链接时禁止rm -rf 软链接名/(带斜杠),会直接删除源目录所有内容,正确写法:rm -f 软链接名

  • find延时执行坑:find搭配-delete/exec执行批量操作前,必须先去掉执行动作,仅保留筛选条件预览结果,避免批量误删系统文件。

  • 目录复制必带-r参数 :cp命令复制目录不加-r直接报错,日常脚本统一使用cp -rf,兼容文件、目录双重场景。

  • mv跨分区本质坑:同分区mv仅修改路径指针、无IO;跨分区mv等价「cp复制+原文件删除」,大文件跨分区移动耗时极高,需提前预留磁盘空间。

5.3 面试高频综合考点
  • 为什么生产不用tail -f而用tail -F?:-f跟随inode,日志切割、文件重建后监控中断;-F跟随文件名,自动适配文件变更,持续监控不中断,适配日志轮转场景。

  • 软链接和硬链接生产适用场景区别?:软链接用于版本切换、路径兼容、日志归集;硬链接用于本地文件防误删备份,不支持跨分区、目录。

  • 磁盘空间爆满但找不到大文件原因?:存在已删除但被进程占用的日志文件,句柄未释放,需重启对应服务或清空文件而非删除文件。

  • 批量操作优先用什么语法?:简单批量创建用大括号{},复杂条件批量处理用find+exec,高效稳定适配自动化脚本。

5.4 生产最终最佳实践总结
  • 所有线上文件删除遵循先备份、后删除、先预览、后执行原则,高危操作务必留痕;

  • 日志运维统一规范:大文件less查看、实时监控tail -F、过期文件find批量清理、活跃文件清空不删除;

  • 版本迭代、路径迁移全部使用软链接,灵活切换、无需修改服务配置;

  • 自动化脚本文件操作统一加容错参数:mkdir -p、cp -rf、rm -f,避免脚本异常中断;

  • 批量文件/目录命名统一规范化,使用{01..n}补零格式,便于检索、排序和批量处理。

XML 复制代码
# ===================== 1. 高阶批量创建技巧(测试/脚本刚需) =====================
# 1.1 有序批量创建文件(01-10规范命名,比1-10更规整)
touch test{01..10}.txt

# 1.2 有序批量创建多级目录
mkdir -p project/{code,log,config,backup}

# 1.3 混合批量创建(文件+目录一次性生成)
mkdir dir{1..5} && touch file{1..5}.txt

# 1.4 指定后缀批量创建日志文件
touch {error,info,warn}.log

# ===================== 2. 安全删除与清理实战(生产保命技巧) =====================
# 2.1 安全清空大文件(禁止直接rm删正在写入的日志)
cat /dev/null > big.log

# 2.2 批量清空当前目录所有日志文件(不删除文件,只清空内容)
find ./ -name "*.log" -exec truncate -s 0 {} \;

# 2.3 安全删除:先移动备份,确认无误再彻底删除
mv old_log/ /tmp/trash/
# rm -rf /tmp/trash/  # 确认无问题后执行

# 2.4 禁止高危裸删命令
# 严禁:rm -rf /* 、 rm -rf / 、 rm -rf ./*(根目录下致命操作)

# ===================== 3. 日志运维专属实战技巧 =====================
# 3.1 日志实时监控最优组合(生产标准)
tail -n 200 -F app.log

# 3.2 排查历史报错:结合筛选快速定位异常
tail -n 1000 app.log | grep -i error

# 3.3 大日志查看最优命令,杜绝cat卡死终端
less -N app.log

# ===================== 4. 软硬链接生产实战用法 =====================
# 4.1 软件版本切换(Nginx/Java版本切换神器)
ln -sf /usr/local/nginx1.24 /usr/local/nginx

# 4.2 日志统一归集(多目录日志汇总到统一路径)
ln -sf /var/log/nginx/*.log /data/logs/

# 4.3 重要文件防误删(硬链接备份)
ln important.txt important_bak.txt

# ===================== 5. find批量处理高阶实战(脚本核心) =====================
# 5.1 批量删除7天前过期日志(生产日志清理标准命令)
find /data/logs -name "*.log" -mtime +7 -delete

# 5.2 批量备份所有配置文件到备份目录
find /etc -name "*.conf" -exec cp {} /data/conf_backup/ \;

# 5.3 批量修改所有目录权限
find ./ -type d -exec chmod 755 {} \;

# ===================== 6. 路径切换高效技巧 =====================
# 6.1 双向快速切换两个工作目录(高频开发/运维场景)
cd /data/project && cd -

# 6.2 快速返回上多级目录简写
cd ../..

# 6.3 空白cd快速回家目录
cd

三、用户、用户组、权限体系【生产完整版+原理+避坑+面试精讲】

1. 模块总述

Linux 是多用户、多任务、权限隔离操作系统,用户与权限体系是系统安全、资源隔离、服务权限管控、线上故障排查的核心基石。所有文件、进程、服务、目录都归属特定用户与权限管控,权限配置错误是线上服务启动失败、文件无法读写、安全漏洞的高频原因。

本节完整补全用户/组管理、权限底层原理、普通/特殊/隐藏权限、sudo权限管控、生产避坑、面试核心考点,无冗余冷门参数,全覆盖运维生产与面试场景。

2. 用户与用户组核心管理(系统安全基础)【生产完整版+底层原理+全场景精讲】

2.1 核心模块总述

Linux 系统所有进程、文件、服务的运行都依赖用户身份权限约束 ,用户与用户组是系统资源隔离、权限分级、安全管控的底层核心。合理的用户管理可以避免root权限滥用、防止越权操作、规避服务提权漏洞。本小节完整补全用户分类、核心配置文件详解、UID/GID机制、全量命令高阶用法、批量管理、生产场景、致命坑点、面试高频考点,完全适配企业运维、服务器安全加固、自动化运维场景。

2.2 底层核心原理:用户分类与UID/GID机制

Linux 所有用户通过 UID(用户唯一ID)GID(用户组唯一ID) 系统身份识别,系统不识别用户名,仅识别UID/GID,用户名仅为人工可读标识。

  • 超级管理员用户(root):UID=0,系统最高权限,拥有系统所有操作权限,可修改、删除、启停任何资源,生产禁止直接登录、禁止业务程序运行。

  • 系统用户(服务用户):UID=1-999,无登录权限、无家目录,专属系统服务运行(nginx、mysql、docker),用于服务权限隔离,防止服务被提权后篡改系统文件。

  • 普通业务用户:UID≥1000,人工创建,拥有独立家目录、支持登录系统,权限受限,仅可操作自身权限内文件与命令,用于日常运维、业务开发。

用户组机制:每个用户默认拥有唯一主组 、可拥有多个附属组,主组为创建文件默认所属组,附属组用于跨组权限复用、多人协作授权。

2.3 三大核心配置文件深度解析(面试必考)

所有用户、组信息永久存储在系统配置文件,所有用户命令本质都是修改这三个文件。

  • /etc/passwd 用户信息文件(全局可读) 格式:用户名:密码占位符x:UID:GID:用户备注:家目录:登录Shell 核心作用:存储用户基础信息,x仅为密码占位,真实密码不存储于此,所有用户均可读取,无敏感信息。

  • /etc/shadow 密码影子文件(仅root可读) 核心作用:存储加密密码、密码有效期、过期时间、锁定状态,系统最高安全文件,普通用户无任何权限读取,防止密码泄露爆破。

  • /etc/group 用户组配置文件 格式:组名:x:GID:附属组成员列表 核心作用:记录所有用户组GID、组内附属用户,实现多用户批量权限统一管控。

2.4 全量高频命令高阶精讲(生产参数全覆盖)
XML 复制代码
# ===================== 一、用户创建 useradd 完整高阶用法 =====================
# 1. 默认创建:自动创建同名主组、自动生成家目录、默认登录bash
useradd test01

# 2. 生产标准创建(自定义UID、主组、家目录、登录shell,规范统一)
useradd -u 1010 -g dev -m -d /home/dev01 -s /bin/bash dev01
# 参数详解
# -u  指定固定UID(企业规范:业务用户UID统一1000以上,不重复)
# -g  指定主组(唯一主组,创建文件默认归属组)
# -m  强制创建家目录(默认必备,防止无家目录报错)
# -d  自定义家目录路径
# -s  指定登录Shell

# 3. 系统服务用户创建(禁止登录、无家目录,服务专用)
useradd -u 950 -g nginx -s /sbin/nologin -M nginx
# -M 不创建家目录,服务用户无需登录目录

# ===================== 二、用户删除 userdel 安全用法 =====================
userdel test01                    # 仅删除用户账号,保留家目录、残留文件(易产生垃圾文件)
userdel -r test01                 # 生产首选:删除账号+清空家目录+邮箱数据,彻底无残留

# ===================== 三、用户密码管理 passwd 全场景 =====================
passwd                            # root修改自身密码
passwd dev01                      # root强制修改普通用户密码(无需原密码)
passwd -l dev01                   # 锁定用户账号(冻结登录,运维封禁账号必备)
passwd -u dev01                   # 解锁锁定账号,恢复登录权限
passwd -d dev01                   # 清空密码(无密码登录,生产严禁使用,存在安全漏洞)

# ===================== 四、用户信息修改 usermod 高阶核心(重点避坑) =====================
# 1. 追加附属组(生产最高频!!!)
usermod -aG docker,netdev dev01   # -aG 追加多个附属组,不覆盖原有组权限

# 2. 修改用户主组
usermod -g ops dev01

# 3. 修改登录Shell,禁止用户登录系统(离职账号、服务账号加固)
usermod -s /sbin/nologin dev01

# 4. 修改UID、家目录
usermod -u 1011 dev01             # 修改用户UID
usermod -m -d /home/newdev dev01  # 迁移并修改家目录

# 致命禁忌:禁止单独使用 usermod -G !会清空原有所有附属组,导致权限丢失

# ===================== 五、用户组管理 group 全套命令 =====================
groupadd dev                      # 创建普通用户组
groupadd -g 1010 dev              # 指定GID创建用户组
groupmod -n new_dev dev           # 修改用户组名称
groupdel dev                      # 删除空用户组(组内有用户禁止删除)

# ===================== 六、用户信息排查命令(排错刚需) =====================
id                                # 查看当前用户UID/GID/所有所属组
id dev01                          # 精准查看指定用户身份信息、权限组
groups                            # 查看当前用户所有附属组+主组
whoami                            # 快速确认当前登录账号
w                                 # 查看在线用户、登录终端、系统负载、操作时长
who                               # 简洁查看在线登录用户

# ===================== 七、用户切换环境深度用法 =====================
su dev01                          # 切换用户,保留原root环境变量(极易权限错乱)
su - dev01                        # 生产标准:完全切换用户环境,重置家目录、环境变量、工作目录
# 核心区别:su - 等价完整登录系统,所有权限、环境完全匹配目标用户
XML 复制代码
# ===================== 1. 用户创建 useradd =====================
# 基础创建普通用户,自动创建家目录、默认组
useradd dev
# 自定义参数创建用户(生产规范用法)
useradd -u 1001 -g dev -m -s /bin/bash testuser
# 参数解析
# -u 指定UID、-g 指定主组、-m 自动创建家目录、-s 指定登录Shell

# ===================== 2. 用户删除 userdel =====================
userdel testuser                 # 仅删除用户,保留家目录数据
userdel -r testuser              # 彻底删除用户+家目录+邮箱数据(生产清理首选)

# ===================== 3. 密码管理 passwd =====================
passwd                           # root修改自身密码
passwd dev                       # root修改指定用户密码
passwd -l dev                    # 锁定用户(禁止登录,账号冻结)
passwd -u dev                    # 解锁锁定用户
passwd -d dev                    # 清空用户密码(无密码登录,生产禁止)

# ===================== 4. 用户信息修改 usermod =====================
usermod -aG docker dev           # 追加附属组(核心!-a 追加不覆盖)
usermod -g root dev              # 修改用户主组
usermod -s /sbin/nologin dev     # 禁止用户登录系统(服务账号专用)
usermod -u 1002 dev              # 修改用户UID

# ===================== 5. 用户组管理 groupadd/groupdel =====================
groupadd dev                     # 创建自定义用户组
groupdel dev                     # 删除空用户组
groupmod -n newdev dev           # 修改用户组名称

# ===================== 6. 用户信息查看(排查刚需) =====================
id                               # 查看当前用户UID/GID/所属所有组
id dev                           # 查看指定用户详细权限信息
groups                           # 查看当前用户所属组列表
whoami                           # 查看当前登录用户名
w/ who                           # 查看在线用户及操作状态

# ===================== 7. 用户切换与权限提升 =====================
su dev                           # 切换用户,保留原环境变量
su - dev                         # 完全切换用户,加载全新环境、家目录(生产标准)
sudo command                     # 临时借用root权限执行单条命令
visudo                           # 编辑sudo权限配置(唯一规范编辑方式,自带语法校验)
2.5 高频致命坑点 & 生产避坑细则
  • usermod 权限丢失致命坑(Top1踩坑) :单独使用 usermod -G 组名覆盖清空用户原有所有附属组 ,直接导致业务权限失效、服务启动失败;追加组必须固定使用 -aG

  • su 切换环境坑su 用户 不重置环境变量、PATH路径,会出现「身份切换成功但命令执行报错、权限错乱」问题,生产运维、脚本切换用户强制使用 su - 用户

  • 服务用户登录风险 :Nginx、MySQL、Redis等系统服务用户,必须配置 /sbin/nologin 禁止登录,若配置/bin/bash会导致恶意人员利用服务账号登录系统,造成安全入侵。

  • userdel 残留隐患 :不加-r删除用户,会残留无主无属组文件 ,此类文件无法被正常权限管理,长期堆积会造成磁盘垃圾、权限漏洞,用户离职清理必须 userdel -r

  • 空用户组删除报错:groupdel 无法删除存在用户的用户组,强制删除会导致用户组权限紊乱,需先迁移用户再删组。

  • UID重复冲突坑 :系统不允许重复UID,手动指定UID需提前 id 用户名 校验,UID冲突会导致用户权限错乱、文件归属异常。

2.6 面试高频核心考点
  • root UID和普通用户UID区别? root固定UID=0,拥有最高权限;系统用户UID 1-999,普通用户UID≥1000,系统通过UID区分用户权限等级。

  • -G 和 -aG 核心区别? -G 覆盖式赋值附属组,清空原有组;-aG 追加式新增附属组,保留原有所有权限,生产仅用-aG。

  • su 和 su - 本质区别? su 仅切换用户身份,保留原环境;su - 完整登录,重置所有环境变量、工作目录,是标准切换方式。

  • 为什么服务用户禁止登录? 防止服务漏洞被利用提权登录服务器,实现服务权限隔离,最小化安全风险。

  • passwd -l 锁定原理? 在shadow文件中修改密码标识位,禁止账号密码登录,属于临时账号冻结,不影响文件权限。

2.7 生产标准化最佳实践
  • 业务用户统一规范:固定UID≥1000、独立主组、家目录自动创建、登录Shell为/bin/bash;

  • 所有后台服务统一使用独立系统用户运行,禁止root启动业务,禁止服务账号开启登录权限;

  • 用户权限分组管理:运维组、开发组、业务组拆分权限,通过附属组实现批量授权;

  • 人员离职账号清理标准:先锁定账号观察7天,确认无业务依赖后,使用 userdel -r 彻底清理;

  • 所有用户组追加权限统一使用 usermod -aG,杜绝权限覆盖丢失问题;

  • 定期巡检系统用户,清理无主文件、废弃账号、重复UID/GID,加固系统安全。

3. 文件基础权限体系(rwx 核心精讲)【生产完整版+底层逻辑+故障排错】

3.1 模块总述

rwx基础权限是Linux权限体系的核心基石 ,所有文件、目录、脚本、配置的访问与执行权限均由该体系管控。线上90%的服务启动失败、文件读写报错、权限越权漏洞,均源于rwx权限配置错乱。本节完整补全三段九位权限模型、字符+数值双解析、文件/目录权限差异化逻辑、权限搭配规范、报错故障场景、生产标准配置模板,全覆盖运维实操、故障排查、面试考点。

3.2 权限底层三段九位模型(核心原理)

Linux所有文件/目录默认拥有9位基础权限 ,分为三段权限主体,优先级从高到低:所有者(u) → 所属组(g) → 其他用户(o),系统严格按照身份匹配权限,匹配到高优先级身份后,不再校验低优先级权限。

三段权限主体释义:

  • u(user 所有者):文件/目录的归属创建用户,拥有最高权限支配权,默认权限优先级最高;

  • g(group 所属组):文件/目录归属的用户组,组内所有用户共享该段权限;

  • o(other 其他用户):既不是所有者、也不在所属组内的系统所有普通用户,权限优先级最低。

  • a(all 所有用户):统一指代 u+g+o 全部主体,用于全局批量修改权限。

3.3 rwx权限字符释义 + 数值换算细则

权限分为读、写、执行三种基础权限,每种权限对应固定数值,权限数值为累加计算,是数字授权的核心依据,生产全量权限配置均基于该规则。

权限字符 数值 权限含义 文件作用 目录作用
r(read) 4 读权限 查看、读取文件内容、复制文件 ls 列出目录内文件/子目录名称,无法访问文件内容
w(write) 2 写权限 修改、编辑、覆盖文件内容,不支持删除文件 对目录内文件进行新增、删除、重命名操作,无法修改目录本身
x(execute) 1 执行权限 运行脚本、二进制程序、可执行文件 核心必备权限:cd进入目录、访问目录内文件/子目录、读取文件完整属性
-(无权限) 0 无任何权限 无法读取、修改、执行文件 无法查看、进入、操作目录及内部资源
3.4 文件与目录权限本质差异(面试必考+故障核心)

绝大多数权限报错的核心原因:文件和目录的x权限作用完全不同,不能混用配置规则,具体差异化场景如下:

  • 文件权限核心逻辑:聚焦「内容操作」 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 符号授权模式(精准局部修改,安全可控)

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

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

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

XML 复制代码
# 基础标准授权
chmod 644 nginx.conf      # 普通配置文件标准权限
chmod 755 /data/nginx     # 业务目录标准权限
chmod 700 ssh.key         # 密钥文件私密权限
chmod 600 user.pass       # 密码配置文件权限

# 递归批量授权(目录全局统一权限)
chmod -R 755 /home/project/  # 目录及内部所有文件递归赋权
chmod -R 644 /etc/conf/      # 批量统一配置文件权限
3.7 权限修改全量命令(chmod+chown 完整版|生产全参数+避坑+批量运维)

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

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

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

XML 复制代码
# ===================== 一、符号授权(精准局部修改,无权限覆盖风险) =====================
# 语法:chmod [用户身份][±=][权限] 文件/目录
# 身份:u(所有者)、g(所属组)、o(其他)、a(全部)
# 动作:+(新增权限)、-(移除权限)、=(强制赋值权限,覆盖原有)

# 1. 单身份精准改权
chmod u+x start.sh          # 所有者新增执行权限(脚本、程序必备)
chmod g-w nginx.conf        # 移除所属组写权限,防止配置被误改
chmod o-rwx secret.key     # 清空其他用户所有权限,保护私密文件
chmod g=rx /data/project    # 强制给所属组赋值读+执行权限,清空原有多余权限

# 2. 多身份同时改权(逗号分隔,无空格)
chmod u+x,g-w,o-r app.sh    # 所有者加执行、组去写、其他清空所有权限
chmod a-w test.txt          # 所有用户移除写权限,全局只读

# 3. 全局统一赋值权限
chmod a=r test.log          # 所有用户仅保留读权限,无写、无执行

# ===================== 二、数字授权(生产主流,一次性全覆盖权限) =====================
# 权限数值:r=4、w=2、x=1,三段数值分别对应u/g/o,累加赋值
chmod 644 *.txt             # 批量普通文件标准权限:rw-r--r--
chmod 755 /data/*           # 批量目录/脚本标准权限:rwxr-xr-x
chmod 700 /root/ssh/*       # 私密密钥最高权限:仅所有者全权
chmod 600 database.pwd      # 密码配置文件权限:仅所有者读写

# ===================== 三、递归批量授权(目录全局统一权限) =====================
# -R 递归作用于目录内所有文件、子目录(生产高频,谨慎使用)
chmod -R 755 /home/www/     # 业务目录全局赋予755权限
chmod -R 644 /etc/nginx/conf.d/  # 批量统一配置文件只读权限

# 递归授权进阶:区分文件/目录单独赋权(高阶避坑)
find /data/project -type d -exec chmod 755 {} \;  # 所有目录赋755
find /data/project -type f -exec chmod 644 {} \;  # 所有文件赋644

# ===================== 四、特殊权限叠加(基础+特殊权限组合) =====================
# 特殊权限数值:SUID=4000、SGID=2000、Sticky=1000
chmod 4755 /usr/bin/testcmd # 赋予SUID权限,普通用户执行临时拥有所有者权限
chmod 2755 /data/share      # 赋予SGID权限,目录内文件自动继承所属组
chmod 1777 /tmp/test        # 赋予Sticky粘滞位,共享目录防互删文件
3.7.2 chown 属主属组修改全量用法(权限归属核心)

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

XML 复制代码
# ===================== 一、基础单文件修改 =====================
chown nginx test.conf              # 仅修改文件所有者为nginx,所属组不变
chown :nginx test.conf             # 仅修改文件所属组为nginx,所有者不变
chown nginx:nginx test.conf        # 同时修改属主、属组为nginx(生产最常用)

# ===================== 二、递归批量修改目录归属(业务部署刚需) =====================
chown -R nginx:nginx /var/log/nginx/  # 递归统一nginx日志目录归属
chown -R mysql:mysql /data/mysql/     # 修复数据库目录权限归属(启动报错必备)

# ===================== 三、高阶精准修改(避坑优化) =====================
# 仅修改目录归属,不改动内部文件
find /data/project -type d -exec chown nginx:nginx {} \;
# 仅修改文件归属,不改动目录
find /data/project -type f -exec chown nginx:nginx {} \;

# ===================== 四、特殊场景:同步归属权限 =====================
chown --reference=src.txt dest.txt  # 参考src文件权限,同步dest的属主属组
3.7.3 权限重置与故障修复命令(排错专属)

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

XML 复制代码
# 1. 目录权限全局标准重置
find /data/business -type d -exec chmod 755 {} \; -exec chown 业务用户:业务组 {} \;

# 2. 配置文件全局标准重置
find /etc/xxx -type f -exec chmod 644 {} \; -exec chown root:root {} \;

# 3. 私密文件权限强制重置
chmod 600 *.key *.pwd *.secret
chmod 700 /root/.ssh/

# 4. 清空所有特殊权限(修复提权漏洞)
chmod 0755 文件名   # 清零SUID/SGID/Sticky,仅保留基础rwx权限
3.7.4 核心参数详解与生产避坑准则
  • -R 递归参数致命坑 :直接chmod -R 755 目录 会统一修改目录+文件权限,导致静态文件拥有x执行权限,存在篡改漏洞;生产优先用find区分文件/目录单独赋权

  • chown 空参数误区 :chown 不加组名仅改属主、不加用户名仅改属组,格式必须严格区分 用户:组,冒号不可缺失。

  • 权限赋值=与±区别chmod g=rx 强制覆盖权限,chmod g+rx 叠加权限,权限错乱修复必须用赋值模式。

  • 系统目录禁止乱改权限:/etc、/usr、/root、/bin 等系统核心目录,禁止递归chmod/chown,极易导致系统瘫痪、命令失效。

3.7.5 生产标准权限修复模板(直接套用)
XML 复制代码
# 业务站点目录标准权限修复(Nginx/Apache通用)
find /usr/local/nginx/html -type d -exec chmod 755 {} \;
find /usr/local/nginx/html -type f -exec chmod 644 {} \;
chown -R nginx:nginx /usr/local/nginx/html

# 服务日志目录标准权限修复
find /var/log/nginx -type d -exec chmod 755 {} \;
find /var/log/nginx -type f -exec chmod 644 {} \;
chown -R nginx:nginx /var/log/nginx

# 密钥SSH目录安全权限修复(防登录漏洞)
chmod 700 /root/.ssh
chmod 600 /root/.ssh/id_rsa
chown -R root:root /root/.ssh
XML 复制代码
# ===================== 1. chmod 修改权限(符号/数字两种方式) =====================
# 符号权限:精准修改单一权限,不影响原有权限
chmod u+x test.sh                # 所有者增加执行权限
chmod g-w test.txt               # 所属组去除写权限
chmod o-rwx test.txt             # 其他用户清空所有权限
chmod a+r test.txt               # 所有用户增加读权限

# 数字权限:生产主流、简洁高效
chmod 644 test.txt               # u=rw- g=r-- o=r-- 普通文件默认权限
chmod 755 testdir                # u=rwx g=rx o=rx 目录默认权限
chmod 700 secret.key             # 仅所有者可读写执行,私密文件专属

# 递归修改目录所有文件权限(批量运维刚需)
chmod -R 755 /data/project

# ===================== 2. chown 修改属主属组 =====================
chown root:nginx test.conf       # 同时修改所有者为root、所属组为nginx
chown nginx test.conf            # 仅修改所有者
chown :nginx test.conf           # 仅修改所属组

# 递归批量修改目录属主属组
chown -R nginx:nginx /var/log/nginx
3.8 高频权限报错与故障排错(生产核心)
  • 故障1:目录有rw权限,无法访问内部文件 根因:目录缺少x准入权限 ,rw仅能查看目录文件名,无法进入访问内容; 解决方案:chmod +x 目录名 补充执行权限。

  • 故障2:脚本文件无法执行,提示Permission denied 根因:脚本文件无x执行权限,普通文件默认644无执行权限; 解决方案:chmod +x 脚本名.sh 赋予执行权限。

  • 故障3:其他用户可修改公共配置文件 根因:文件权限大于644,开放了其他用户写权限; 解决方案:统一重置为 644 标准权限。

  • 故障4:递归授权后系统目录权限错乱 根因:滥用chmod -R 根目录/系统目录,批量覆盖系统默认权限; 解决方案:禁止对/etc、/usr、/root等系统目录递归授权。

3.9 生产避坑细则 & 最佳实践
  • 严格区分文件/目录权限:静态文件禁止755权限(存在篡改风险),目录禁止644权限(无法正常访问);

  • 杜绝777高危权限:全局开放所有用户读写执行权限,极易被恶意提权、篡改文件,生产零容忍;

  • 递归-R谨慎使用:批量授权前确认路径,仅对业务自定义目录使用,严禁操作系统核心目录;

  • 私密资源最小权限:密钥、密码、隐私配置统一使用700/600权限,仅管理员可访问;

  • 公共业务目录规范:业务运行目录755、配置文件644、日志文件644,统一标准化权限,规避未知报错。

3.10 面试高频核心考点汇总
  • 目录只有rw没有x会怎样? 无法cd进入目录、无法读取内部文件内容、无法执行任何操作,权限完全失效;

  • 644和755分别适配什么文件? 644适配所有静态文本、配置、日志文件;755适配目录、脚本、可执行程序;

  • 文件w权限和目录w权限区别? 文件w权限修改内容,不删除文件;目录w权限管控内部文件增删改,不修改目录本身;

  • 为什么生产禁止777权限? 所有用户可任意读写执行、篡改文件、植入恶意程序,存在严重安全漏洞。

4. 特殊权限与隐藏权限(进阶安全管控·全量精讲)

基础rwx权限仅能满足常规文件目录管控,Linux 额外提供SUID、SGID、Sticky 三大特殊权限,以及chattr/lsattr文件系统隐藏权限,用于解决普通权限无法实现的精细化管控、安全防篡改、共享目录防误删、普通用户提权等核心场景。该模块是服务器安全加固、漏洞排查、高阶运维、高薪面试的核心考点,所有内容均为生产实战可用的完整规范,补齐全网通用简略知识点。

4.1 系统三大特殊权限 SUID/SGID/Sticky(原理+参数+场景+避坑)

三大特殊权限独立于rwx基础权限,叠加在九位基础权限之上,对应专属数值,可与基础权限组合使用,核心用于临时权限提升、目录权限继承、共享文件安全防护,生产需严格管控,避免恶意提权漏洞。

特殊权限 专属数值 适用对象 核心作用原理 生产适用场景
SUID 4000 仅二进制可执行文件 普通用户执行该文件时,临时继承文件所有者权限,执行过程中脱离自身权限约束,程序结束权限恢复 普通用户修改自身密码、特定系统命令提权
SGID 2000 可执行文件/目录 文件:执行时临时继承文件所属组权限;目录:目录内所有新建文件/目录自动继承目录所属组 多人协作目录统一权限、团队文件共享授权
Sticky粘滞位 1000 仅目录 目录内所有文件,仅文件所有者、root用户可删除/修改,其他用户无权限篡改他人文件 公共共享目录、临时目录防误删、防恶意篡改

系统特殊权限 SUID/SGID/Sticky(面试高频)

基础rwx之外的高级权限,用于特殊权限提升与目录安全管控,对应数值:SUID=4、SGID=2、Sticky=1

XML 复制代码
# 1. SUID 特殊权限(文件专属)
# 作用:普通用户执行该文件时,临时拥有文件所有者权限
chmod u+s /usr/bin/passwd        # passwd命令默认带SUID,普通用户可改自己密码

# 2. SGID 特殊权限(文件/目录均可)
# 作用:目录内新建文件自动继承目录所属组
chmod g+s /data/share

# 3. Sticky 粘滞位(仅目录专属,/tmp默认权限)
# 作用:目录内文件仅文件所有者/root可删除,他人无法误删
chmod o+t /tmp
4.2 Ext文件系统隐藏权限(企业安全加固必备)

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

XML 复制代码
# 查看文件隐藏权限
lsattr /etc/nginx/nginx.conf

# +i 不可变权限(最高安全级别)
chattr +i /etc/passwd            # 锁定文件:任何人(root)无法修改、删除、重命名
chattr -i /etc/passwd            # 解除锁定

# +a 追加权限(日志文件专属)
chattr +a /var/log/nginx.log     # 仅允许追加写入,禁止修改、删除、覆盖
chattr -a /var/log/nginx.log     # 解除追加锁定
4.3 特殊权限生产场景与避坑
  • SUID安全风险:非系统命令禁止配置SUID,会导致普通用户提权,引发系统安全漏洞。

  • Sticky位核心用途:多人共享目录必须配置粘滞位,防止用户互相删除文件。

  • chattr锁文件刚需场景:系统关键配置文件(passwd、hosts、nginx.conf)可加+i锁定,防止误改、病毒篡改。

  • 日志文件专属+a权限:业务日志文件加a权限,保障日志正常写入,杜绝日志被清空或删除。

5. Sudo权限精细化管控(生产核心·全量精讲)

5.1 模块总述与核心价值

sudo是Linux权限分级管控、最小权限落地、安全运维 的核心机制,核心解决两大生产痛点:一是规避root账号直接登录、全员持有root密码的安全风险;二是给普通用户精准分配临时提权权限,仅开放工作所需命令,不泄露完整系统权限。该模块是企业服务器安全加固、人员权限管控、自动化脚本运行的刚需核心,全覆盖运维实操、安全合规、面试高频考点。

核心特性:普通用户无需知晓root密码,可临时执行授权的管理员命令,权限可精准到「单命令、多命令、免密、指定主机、限定参数」,支持精细化管控与日志审计。

5.2 Sudo底层运行原理与权限校验机制
  • 身份校验逻辑 :用户执行sudo命令时,系统读取/etc/sudoers配置文件,校验当前用户是否拥有对应命令的提权权限,校验通过则临时切换为root权限执行命令,执行完毕立即回收权限。

  • 权限隔离特性 :sudo授权为临时单次权限,仅针对当前执行命令生效,不会永久切换用户身份、不会泄露root权限,安全性远高于su切换root。

  • 日志审计机制 :所有sudo执行操作会自动记录到/var/log/secure安全日志,包含操作用户、执行命令、操作时间、主机IP,可全程溯源,满足企业安全合规要求。

  • 配置优先级/etc/sudoers主配置 > /etc/sudoers.d/目录下自定义配置(企业推荐拆分配置,便于权限管理)。

5.3 核心配置规范与合法编辑方式(生产硬性要求)

绝对禁止使用vi/vim直接编辑/etc/sudoers !该文件拥有系统最高权限校验机制,直接编辑无语法校验,配置语法错误会导致所有用户sudo权限瘫痪、无法提权修复系统故障

XML 复制代码
# 唯一合法编辑命令:自带语法校验、保存自动检测错误
visudo

# 拓展:编辑sudoers.d自定义配置(企业最佳实践,拆分权限、便于维护)
visudo /etc/sudoers.d/dev-user

# 语法校验命令(修改后手动校验,规避隐性错误)
visudo -c

# 查看当前用户所有sudo授权权限、权限限制、免密状态
sudo -l
sudo -ll  # 详细模式,展示完整授权规则
5.4 Sudo配置语法全解(核心模板)

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

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

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

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

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

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

5.5 全场景生产授权模板(直接落地使用)
5.5.1 超级管理员授权(全权运维)
XML 复制代码
# 允许dev用户所有主机、所有root权限,执行需输自身密码
dev  ALL=(ALL) ALL

# 免密全权授权(自动化运维账号专用,禁止普通运维使用)
admin  ALL=(ALL) NOPASSWD: ALL
5.5.2 精细化单类命令授权(最小权限核心场景)
XML 复制代码
# 1. 仅授权Nginx服务启停、重载、查看状态
dev  ALL=(ALL) /usr/bin/systemctl start nginx,/usr/bin/systemctl stop nginx,/usr/bin/systemctl restart nginx,/usr/bin/systemctl status nginx

# 2. 仅授权网络排查命令
dev  ALL=(ALL) /usr/bin/ping,/usr/bin/curl,/usr/bin/ss,/usr/bin/netstat

# 3. 仅授权日志查看、文件查询命令(禁止删除/修改高危操作)
dev  ALL=(ALL) /usr/bin/less,/usr/bin/tail,/usr/bin/head,/usr/bin/find -name *
5.5.3 批量授权用户组(团队统一权限)
XML 复制代码
# 给dev组所有用户授权开发常用运维命令
%dev  ALL=(ALL) /usr/bin/systemctl status *,/usr/bin/tail *,/usr/bin/curl,/usr/bin/ip
5.5.4 免密精细化授权(脚本专属)
XML 复制代码
# 仅免密执行指定备份脚本,禁止其他免密操作
script  ALL=(ALL) NOPASSWD: /root/backup.sh,/root/clean_log.sh
5.5.5 受限参数授权(极致安全管控)
XML 复制代码
# 仅允许修改指定配置文件,禁止修改其他系统配置
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 基础必备配置(生产通用模板)

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

XML 复制代码
# 核心编辑命令(唯一合法方式,严禁vim直接改文件)
visudo
# 自定义配置文件拆分(企业最佳实践,权限隔离、便于维护)
visudo /etc/sudoers.d/ops-auth
# 配置语法校验(修改后必执行,规避语法报错)
visudo -c

# 1. 超级管理员账号(运维负责人,完整权限)
admin   ALL=(ALL:ALL) ALL

# 2. 普通运维账号(仅系统运维权限,无高危篡改权限)
ops     ALL=(ALL) /usr/bin/systemctl,/usr/bin/journalctl,/usr/bin/ss,/usr/bin/lsof,/usr/bin/top,/usr/bin/free

# 3. 开发账号(仅日志查看、服务状态查询,禁止启停服务、改配置)
dev     ALL=(ALL) /usr/bin/tail,/usr/bin/less,/usr/bin/head,/usr/bin/curl,/usr/bin/ping,/usr/bin/ip
5.10.2 高频免密配置(自动化专属,生产刚需)

免密sudo仅用于定时任务、CI/CD自动化部署、监控脚本、备份脚本,人工账号禁止全局免密,防止恶意操作。

XML 复制代码
# 1. 专属脚本免密执行(精准授权,最小权限)
robot   ALL=(ALL) NOPASSWD: /root/auto-backup.sh,/root/log-clean.sh,/usr/local/monitor/start.sh

# 2. 定时任务常用命令免密(无需人工干预)
cron-user  ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx,/usr/bin/mkdir,/usr/bin/rm

# 3. 全局免密(仅测试环境使用,生产环境严禁配置)
test-user  ALL=(ALL) NOPASSWD: ALL
5.10.3 用户组批量授权(团队统一权限管理)

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

XML 复制代码
# 1. 运维组全权运维
%ops-group  ALL=(ALL) ALL

# 2. 开发组受限授权(仅查询、日志排查权限)
%dev-group  ALL=(ALL) /usr/bin/tail,/usr/bin/less,/usr/bin/grep,/usr/bin/curl,/usr/bin/ping

# 3. 测试组专属服务权限(仅管控测试环境服务)
%test-group ALL=(ALL) /usr/bin/systemctl start tomcat,/usr/bin/systemctl stop tomcat,/usr/bin/systemctl status tomcat
5.10.4 精细化参数受限授权(极致安全管控)

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

XML 复制代码
# 1. 仅允许编辑指定Nginx配置文件,禁止修改其他系统配置
ops  ALL=(ALL) /usr/bin/vim /etc/nginx/nginx.conf,/usr/bin/vim /etc/nginx/conf.d/*.conf

# 2. 仅允许重启指定业务服务,禁止操作数据库、系统服务
dev  ALL=(ALL) /usr/bin/systemctl restart app-service,/usr/bin/systemctl status app-service

# 3. 仅允许备份指定目录,无删除、修改权限
backup-user  ALL=(ALL) /usr/bin/tar zcvf /data/backup/*.tar.gz /data/project/
5.10.5 sudo权限查询与审计实战

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

XML 复制代码
# 1. 查看当前用户所有sudo授权权限(简洁模式)
sudo -l

# 2. 查看完整权限详情、授权规则、免密状态(详细模式)
sudo -ll

# 3. 查看指定用户权限
sudo -l -U dev

# 4. 溯源所有sudo操作日志(核心审计)
# 查看安全日志(CentOS/Rocky)
grep sudo /var/log/secure
# 查看系统日志(Ubuntu/Debian)
grep sudo /var/log/auth.log

# 5. 统计今日sudo操作记录
grep sudo /var/log/secure | grep "$(date +%d/%b)"
5.10.6 生产高频故障实战修复

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

XML 复制代码
# 故障1:用户不在sudoers文件中
# 解决方案:visudo 新增用户/组授权,或加入wheel附属组(CentOS)
usermod -aG wheel ops

# 故障2:sudo语法报错、权限失效
# 解决方案:校验语法并修复
visudo -c

# 故障3:免密配置不生效,仍需输入密码
# 根因:普通权限规则覆盖免密规则
# 解决方案:将NOPASSWD配置放到sudoers文件末尾,优先级最高

# 故障4:sudoers.d自定义配置不生效
# 根因:配置文件权限异常
# 解决方案:强制标准化权限
chmod 440 /etc/sudoers.d/*
chown root:root /etc/sudoers.d/*

# 故障5:sudo命令提示权限不足、授权命令无法执行
# 根因:使用相对路径授权
# 解决方案:查询命令绝对路径,重新授权
which systemctl
# 替换为绝对路径配置 /usr/bin/systemctl
5.10.7 生产最终sudo安全规范(强制执行)
  • 配置规范 :统一拆分/etc/sudoers.d/独立配置,禁止所有权限写入主配置文件,便于权限迭代清理;

  • 权限规范:严格最小权限原则,人工账号禁止ALL全权、禁止全局免密,仅自动化账号开放精准免密;

  • 编辑规范:100%使用visudo编辑,修改后必执行语法校验,杜绝语法错误导致sudo瘫痪;

  • 审计规范:每周巡检sudo授权列表、操作日志,清理离职用户、冗余权限;

  • 安全规范:生产服务器关闭root远程登录,所有运维操作通过普通用户sudo提权实现。

6. 全模块面试汇总 & 生产最终规范

6.1 面试高频核心考点
  • 文件权限与目录权限区别? 文件x权限是执行权限,目录x权限是进入/访问权限,目录无x权限无法正常使用。

  • usermod -G 和 -aG区别? -G 覆盖原有附属组,-aG 追加不覆盖,生产追加组必须用-aG。

  • chattr +i 和 +a区别? +i 完全锁定不可修改,+a 仅允许追加,日志文件专用+a。

  • SUID/Sticky作用? SUID临时提权,Sticky防共享目录文件误删。

6.2 生产统一权限规范(全维度落地·强制执行)

本规范适配CentOS/Rocky/Ubuntu全系列Linux生产服务器,统一文件、目录、用户、特殊权限、Sudo、系统目录权限标准,杜绝权限错乱、安全漏洞、服务启动异常,为企业运维标准化、安全加固、故障规避提供统一依据,所有规则均可直接落地执行。

6.2.1 文件权限统一标准(生产零争议规范)
  • 普通静态文件 :业务配置、日志、文本、脚本源码、静态资源统一 644(rw-r--r--),仅所有者可编辑,其他用户只读,禁止开放写权限,杜绝篡改风险。

  • 可执行文件/业务脚本 :sh/bash/python可运行脚本、程序启动文件统一 755(rwxr-xr-x),保障执行权限,最小化开放权限范围。

  • 私密核心文件 :密钥、证书、数据库密码文件、SSH私钥、账号配置统一 600(rw-------),仅root/所属用户可读写,其他用户无任何访问权限。

  • 系统核心配置文件:passwd、shadow、hosts、sudoers等系统文件,保持系统默认权限,禁止随意修改、放宽权限。

  • 日志专属文件 :业务运行日志统一644,核心审计日志可追加 chattr +a 隐藏权限,仅允许追加写入,禁止删除、清空、篡改。

  • 高危权限禁令 :生产环境严禁出现777、666全局开放权限,一经发现立即整改,此类权限存在恶意提权、文件篡改、服务器入侵重大漏洞。

6.2.2 目录权限统一标准(服务运行必备)
  • 普通业务目录 :站点目录、程序目录、日志目录、备份目录统一 755(rwxr-xr-x),保障用户可进入、可读取、程序可正常读写运行。

  • 私密权限目录 :SSH目录、密钥存储目录、核心配置目录统一 700(rwx------),仅管理员可访问操作,杜绝越权查看。

  • 多人共享协作目录 :团队共用业务目录,默认755权限+开启Sticky粘滞位(1777),仅文件所有者、root可删除/修改文件,防止用户互删数据。

  • 系统核心目录禁令 :/、/etc、/usr、/root、/bin、/sbin 等系统根目录及核心目录,禁止递归修改权限、禁止放宽默认权限,避免系统瘫痪、命令失效。

6.2.3 用户与用户组权限规范(安全隔离标准)
  • root账号管控 :生产环境关闭root远程SSH登录,禁止业务程序以root身份启动,禁止日常运维直接使用root账号操作,规避权限滥用风险。

  • 服务用户规范 :Nginx、MySQL、Redis、Docker等所有服务,必须创建独立系统用户(UID1-999),配置/sbin/nologin禁止登录,无家目录,仅用于服务运行,实现权限隔离。

  • 普通运维/开发用户:业务用户UID统一≥1000,按需分配附属组权限,严格遵循最小权限原则,不随意赋予root、wheel等高权限组。

  • 用户清理规范 :离职、废弃用户统一使用 userdel -r 彻底删除,同步清理家目录、残留文件、权限配置,杜绝无主文件、冗余权限漏洞。

  • 用户组规范:按业务、团队划分用户组,通过组批量授权,禁止单个用户零散授权,权限迭代、人员更替统一通过组管理。

6.2.4 特殊权限与隐藏权限规范(安全加固标准)
  • SUID/SGID权限管控 :仅系统默认必要命令保留SUID权限,自定义业务文件、目录禁止配置SUID/SGID,定期扫描清理非法提权权限,杜绝恶意提权漏洞。

  • Sticky粘滞位强制规范:所有公共共享目录、临时文件目录必须配置粘滞位,防止跨用户文件误删、篡改。

  • 隐藏权限加固 :系统核心配置、业务关键配置文件统一配置 chattr +i 不可变权限,防止误改、病毒篡改、恶意修改;日志文件统一配置chattr +a追加权限。

  • 特殊权限清零规范:业务文件、目录权限错乱时,优先清零SUID/SGID/Sticky特殊权限(chmod 0xxx),再重置基础rwx权限,避免权限叠加异常。

6.2.5 Sudo权限精细化规范(最小权限落地)
  • 编辑规范:100%使用visudo编辑权限配置,禁止直接vim修改/etc/sudoers,修改后必做语法校验,杜绝sudo全局瘫痪。

  • 权限拆分规范:采用/etc/sudoers.d/拆分配置,按用户、团队、业务拆分独立配置文件,禁止所有权限写入主配置文件。

  • 授权规范 :所有sudo授权必须使用命令绝对路径,禁止相对路径,杜绝环境变量劫持提权漏洞;严格按需授权,禁止普通用户配置ALL全权权限。

  • 免密权限规范 :NOPASSWD免密仅用于自动化脚本、定时任务、监控账号,人工运维账号禁止全局免密,需密码验证提权,留存操作溯源。

  • 权限审计规范:每周巡检sudo授权列表、/var/log/secure安全日志,清理冗余权限、离职用户权限,全程操作可溯源审计。

6.2.6 批量授权运维规范(避坑标准)
  • 禁止滥用chmod -R:不直接对业务目录递归统一权限,优先通过find命令区分文件、目录单独赋权,避免静态文件被赋予执行权限,产生安全漏洞。

  • 标准批量赋权模板:业务目录统一执行「目录755、文件644」标准化授权,配套chown统一属主属组,适配所有业务场景。

  • 权限重置规范:权限错乱、递归误改后,立即执行标准化权限重置脚本,恢复文件、目录默认规范权限,快速修复服务异常。

6.2.7 权限巡检常态化规范
  • 每日排查服务器777/666高危权限文件,一键扫描清理违规权限;

  • 每周核查用户列表、sudo授权、特殊权限文件,清理冗余、违规配置;

  • 新业务上线前,强制校验文件目录权限、用户运行权限,符合规范方可上线;

  • 所有权限修改、授权操作留痕记录,便于故障排查、安全审计。

四、文本三剑客:grep sed awk(文本处理核心)

1. grep 过滤匹配(日志检索/文本筛选核心·生产完整版)

1.1 命令总述

grep 是Linux文本过滤、日志排查、内容检索的核心高频命令,核心作用是从文件、管道输出中匹配筛选符合规则的文本行,支持基础字符匹配、正则表达式匹配、递归检索、反向过滤、高亮匹配等全场景功能。是日常运维报错排查、配置检索、日志分析、脚本筛选的刚需工具,本节摒弃冷门参数,聚焦生产高频用法、正则实战、踩坑细节与面试核心考点。

1.2 核心高频基础参数(生产必背)
XML 复制代码
# 基础精准匹配
grep "error" app.log                  # 匹配包含error的所有行(区分大小写)
grep -i "warn" app.log               # -i 忽略大小写匹配(warn/WARN/Warn全部匹配)
grep -v "info" app.log               # -v 反向匹配,过滤掉包含info的行(排查报错屏蔽冗余日志)
grep -n "timeout" app.log            # -n 显示匹配行的行号(精准定位报错代码/日志行)
grep -c "success" app.log            # -c 统计匹配到的总行数(统计成功请求数、报错次数)
grep -o "http://.*" app.log          # -o 只输出匹配到的内容,不输出整行(精准提取指定字段)
grep -q "fail" app.log               # -q 静默匹配,不输出内容,仅返回执行状态(脚本判断专用)

# 高亮显示匹配内容(终端可视化,默认开启)
grep --color=auto "error" app.log

# 匹配前后行查看(报错上下文排查刚需)
grep -A5 "Exception" app.log         # -A n 显示匹配行及后5行(After)
grep -B5 "Exception" app.log         # -B n 显示匹配行及前5行(Before)
grep -C5 "Exception" app.log         # -C n 显示匹配行及前后5行(Context,上下文完整排查)
1.3 递归检索与多文件匹配(全局排查必备)
XML 复制代码
# 递归检索目录下所有文件(全局排查配置/日志)
grep -r "port=8080" /etc/            # -r 递归检索/etc下所有文件,匹配包含8080端口的内容
grep -R "root" /home/                # -R 递归检索,包含软链接文件(-r不跟进软链接)

# 多文件批量匹配
grep "404" access.log error.log      # 同时匹配多个文件的404报错记录
grep -l "debug" *.log                # -l 只显示匹配成功的文件名(筛选含指定内容的文件)
grep -L "debug" *.log                # -L 只显示未匹配的文件名(筛选无指定内容的干净文件)
1.4 正则表达式高阶匹配(精准筛选核心)

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

XML 复制代码
# 基础正则匹配
grep "^2026" app.log                 # ^ 匹配行首:筛选2026年开头的日志行
grep "log$" app.log                  # $ 匹配行尾:筛选以log结尾的文本行
grep "[0-9]" app.log                 # 匹配任意数字
grep "[a-zA-Z]" app.log              # 匹配任意大小写字母
grep "[^0-9]" app.log               # 匹配非数字字符(反向区间匹配)

# 扩展正则(egrep/grep -E 专用,生产复杂筛选首选)
egrep "error|warn|fail" app.log      # 匹配包含error或warn或fail的行(多条件或匹配)
grep -E "timeout|retry" app.log     # 等价egrep,无需转义竖线
egrep "1[0-9]{2}" app.log           # 匹配100-199数字(正则区间+次数匹配)
egrep "^$" app.log                  # 匹配空行(清理文本空行刚需)

# 精准匹配整词
grep -w "root" /etc/passwd           # -w 整词匹配,仅匹配独立root单词,不匹配root123、superroot
1.5 生产高频组合实战命令(日志排查刚需)
XML 复制代码
# 1. 过滤报错日志并显示上下文,定位异常堆栈
grep -C10 "Exception" app.log

# 2. 忽略大小写筛选所有报错,屏蔽冗余info日志
grep -i "error|fail|timeout" app.log | grep -v "info"

# 3. 统计当日报错总次数
grep -ic "error" app.log

# 4. 批量检索配置文件中所有端口配置
grep -r "listen" /etc/nginx/

# 5. 过滤非空行内容(清理文本冗余空行)
grep -v "^$" test.txt

# 6. 脚本中判断文件是否包含指定内容(静默匹配)
if grep -q "enable" config.ini;then echo "配置已开启";fi
1.6 高频易错坑点与生产避坑
  • 大小写匹配坑 :默认区分大小写,排查日志时优先加 -i 参数,避免遗漏大写ERROR、WARN报错。

  • 正则转义坑 :普通grep使用|、()、{}需加转义符\,推荐统一用grep -E/egrep,无需转义,语法更简洁。

  • 递归检索软链接坑grep -r 不跟进软链接文件,需要检索软链接源文件必须用 grep -R

  • 整词匹配误区 :直接匹配root会匹配衍生单词,精准匹配独立用户/单词必须加 -w 参数。

  • 静默参数坑 :脚本判断场景必须用 -q 静默模式,无冗余输出,仅通过命令返回值判断结果,避免日志输出污染。

1.7 面试高频核心考点
  • grep -r 和 -R 区别? -r 递归检索目录,不跟进软链接文件;-R 递归检索且跟进软链接,读取源文件内容。

  • grep 和 egrep 区别? grep默认基础正则,特殊符号需转义;egrep(grep -E)支持扩展正则,|、()、{}无需转义,适配复杂匹配。

  • -A/-B/-C 参数作用? 分别匹配后行、前行、前后上下文行,是日志报错定位完整堆栈信息的核心参数。

  • 如何过滤文件空行? 使用 grep -v "^$" 文件名,反向匹配并过滤所有空行。

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

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

2.1 命令总述与核心原理

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

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

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

2.2 核心参数与基础语法(生产必背)
XML 复制代码
# sed 标准语法
# sed [参数] '匹配规则+编辑操作' 文件名

# 核心高频参数
sed -n '操作' file      # -n 静默模式,只输出匹配处理的行(默认输出所有行)
sed -i '操作' file      # -i 直接修改原文件(生产核心,慎用!)
sed -e 规则1 -e 规则2   # 多规则叠加执行,支持一次执行多个编辑动作
sed -r '规则' file      # -r 支持扩展正则,无需转义特殊符号()|{}
sed -f 脚本文件 file    # 读取sed脚本文件执行批量编辑规则

# 关键补充:-i 备份参数(生产高危操作必备)
sed -i.bak 's/old/new/g' file  # 修改原文件,同时生成file.bak备份文件,出错可回滚
2.3 核心操作精讲:替换(生产最高频)

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

XML 复制代码
# 基础替换语法:s/原内容/新内容/修饰符
# 修饰符:g全局、n指定行、i忽略大小写

# 1. 基础单行替换(只替换每行第一个匹配内容)
sed 's/8080/8090/' nginx.conf

# 2. 全局替换(整行所有匹配内容全部替换,生产必备g参数)
sed 's/127.0.0.1/0.0.0.0/g' hosts

# 3. 忽略大小写替换
sed 's/error/success/gi' app.log

# 4. 指定行范围替换(仅第5行替换 / 2-10行批量替换)
sed '5s/enable/disable/g' config.ini
sed '2,10s/localhost/192.168.1.100/g' nginx.conf

# 5. 匹配关键词行替换(只替换包含指定内容的行)
sed '/port/s/80/443/g' nginx.conf

# 6. 正则分组替换(高阶脱敏、内容截取核心)
# 匹配手机号并脱敏,保留前3后4位
sed -r 's/(1[0-9]{2})[0-9]{4}([0-9]{4})/\1****\2/g' user.txt

# 7. 特殊符号替换(斜杠/、点.无需转义,可自定义分隔符#@)
sed 's#/usr/local/old#/usr/local/new#g' path.conf

# 8. 直接修改原文件+备份(生产规范操作)
sed -i.bak 's/debug/info/g' log.conf
2.4 行操作:删除、插入、追加、替换整行

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

XML 复制代码
# ========== 1. 删除操作 d ==========
sed '3d' file.txt              # 删除第3行
sed '2,5d' file.txt            # 删除2-5行
sed '10,$d' file.txt           # 删除第10行到末尾所有行
sed '/^$/d' file.txt           # 删除所有空行(文本规整刚需)
sed '/#/d' file.txt            # 删除所有含注释的行
sed '/error/d' app.log         # 删除含指定关键词的行

# ========== 2. 追加操作 a(匹配行后新增内容) ==========
sed '2a max_conn=1024' nginx.conf          # 第2行后追加一行配置
sed '/port/a timeout=60' nginx.conf       # 匹配port行,后方追加超时配置
sed '$a # end of config' file.txt         # 文件末尾追加注释

# ========== 3. 插入操作 i(匹配行前新增内容) ==========
sed '1i # new config 2026' config.ini     # 文件第一行插入头部注释
sed '/listen/i # 端口配置' nginx.conf     # 匹配行前方插入说明

# ========== 4. 整行替换 c(覆盖替换整行内容) ==========
sed '5c server_port=8090' config.ini      # 第5行整行替换为新内容
sed '/enable/c enable=false' service.conf # 匹配行直接覆盖整行
2.5 高阶实用功能(生产脚本刚需)
XML 复制代码
# 1. 多规则批量编辑(一次执行多个操作)
sed -e 's/80/443/g' -e '/ssl/a ssl_on=true' nginx.conf

# 2. 静默输出指定行内容(等同于精准截取文本)
sed -n '10,20p' app.log        # 只打印10-20行内容(p打印匹配行)
sed -n '/error/p' app.log      # 只输出含error的行,过滤冗余内容

# 3. 批量修改目录下所有文件内容(全局配置迭代)
sed -i 's/old_domain/new_domain/g' /etc/nginx/*.conf

# 4. 注释指定行(配置临时禁用刚需)
sed '30s/^/#/' config.ini      # 第30行行首添加#注释
sed '30s/^#//' config.ini      # 取消第30行注释

# 5. 空白行、冗余注释一键清理
sed -e '/^$/d' -e '/^#/d' config.ini
2.6 高频致命坑点与生产避坑细则
  • -i参数高危坑 :sed -i 直接修改原文件,无回收站、无法撤回,生产修改配置必须先加.bak备份,验证无误后再删除备份文件。

  • 替换缺失g参数坑:不加g仅替换每行第一个匹配内容,批量全局修改必须带g,否则出现内容替换不完整问题。

  • 正则转义坑 :默认sed为基础正则,(){}|等特殊符号需转义,复杂正则统一加**-r参数**,简化语法避免报错。

  • 空行删除误区 :/^/仅匹配纯空行,含空格的伪空行需用 `sed '/^[[:space:]]*/d'` 彻底清理。

  • 批量文件修改坑:批量修改多配置文件前,先去掉-i参数预览输出结果,确认无误再执行真实修改,避免批量改错配置。

  • 行匹配范围坑:$代表文件末尾,匹配行区间需注意文件行数边界,避免误删末尾有效配置。

2.7 生产最佳实践与高频组合命令
  • 配置文件批量迭代:统一使用 sed -i.bak 先备份后修改,杜绝配置丢失、服务故障;

  • 文本内容规整:固定组合 sed -e '/^[[:space:]]*$/d' -e '/^#/d' 清理空行与冗余注释;

  • 临时禁用配置:优先用sed行首加#注释,而非直接删除配置,便于后续恢复;

  • 复杂内容替换、字段脱敏,统一使用-r扩展正则+分组替换,精准可控;

  • 大文件内容修改全程用sed,禁止vim打开编辑,避免文件卡顿、内存溢出。

2.8 面试高频核心考点
  • sed -i 和 -i.bak 区别? -i直接修改原文件无备份,风险极高;-i.bak修改同时生成备份文件,支持故障回滚,生产必备。

  • sed替换g参数作用? 不加g仅替换每行第一个匹配字符,g代表全局替换,批量修改必须携带。

  • a和i操作区别? a是匹配行后方追加内容,i是匹配行前方插入内容,位置完全相反。

  • 如何批量清理文件所有空行? 使用 sed '/^[[:space:]]*$/d' 文件名,兼容纯空行、含空格伪空行。

  • sed和vim编辑区别? sed流式逐行非交互式编辑,适合批量、脚本、大文件处理;vim交互式编辑,适合单文件精细化手动修改。

3. awk 列处理、统计(日志分析神器)【生产完整版+原理+高阶统计+日志实战+避坑精讲】

3.1 命令总述与核心原理

awk 是Linux列级文本处理、数据统计、日志分析 的终极神器,相较于grep行过滤、sed行替换,awk主打字段拆分、数据提取、逻辑判断、数值运算、分组统计、报表输出,是运维日志分析、数据清洗、批量统计、脚本数据处理的核心工具。

核心运行机制:逐行读取文本 → 按分隔符拆分多列字段 → 匹配条件执行自定义逻辑 → 运算统计并格式化输出,支持变量、循环、数组、条件判断,具备轻量编程语言特性,处理超大日志文件效率极高。

核心生产场景:Nginx/业务日志流量统计、接口请求耗时分析、IP访问频次排序、数据筛选去重、批量字段提取、服务器资源数据汇总报表。

3.2 核心语法与基础参数(生产必背)
XML 复制代码
# awk 标准通用语法
# awk [参数] 'BEGIN{初始化逻辑} 条件{执行动作} END{收尾统计逻辑}' 文件名

# 核心高频参数
awk -F ":" '{print $1}' file.txt       # -F 指定字段分隔符(默认空格/制表符)
awk -v num=10 '{print $1+num}' file    # -v 自定义外部变量,传入awk逻辑
awk 'NR>10' file.txt                   # NR 行号,筛选指定行数据
awk -f awk脚本文件.awk file.txt        # 读取awk脚本批量执行复杂逻辑

# 核心内置变量(生产高频)
# $0  整行所有内容
# $1~$n  第1/2/n列字段
# NR  当前处理行号(全局总行数)
# NF  当前行字段总列数(自动统计列数)
# FILENAME 当前处理文件名
# FS  自定义输入分隔符(等价-F)
# OFS 自定义输出分隔符(默认空格)
3.3 基础列处理:字段提取与格式化输出

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

XML 复制代码
# 1. 默认空格分隔:提取第1、3列字段
awk '{print $1,$3}' access.log

# 2. 自定义分隔符:解析冒号分隔文件(passwd、hosts等)
awk -F ":" '{print "用户名:"$1,"UID:"$3}' /etc/passwd

# 3. 自定义输出分隔符(替换默认空格为逗号/竖线)
awk -F ":" -v OFS="|" '{print $1,$3,$7}' /etc/passwd

# 4. 提取最后一列、倒数第二列(适配不确定列数文本)
awk '{print $NF}' file.txt       # 最后一列
awk '{print $(NF-1)}' file.txt   # 倒数第二列

# 5. 输出整行内容(等价cat,用于数据筛选前置)
awk '{print $0}' file.txt

# 6. 过滤空行并输出有效内容
awk 'NF>0' file.txt
3.4 条件筛选与逻辑判断(精准数据过滤)

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

XML 复制代码
# 1. 行号筛选:只处理10-100行数据
awk 'NR>=10 && NR<=100 {print $0}' file.txt

# 2. 数值条件筛选:第三列数值大于1000的行(请求量、耗时筛选)
awk '$3>1000 {print $0}' log.txt

# 3. 字符串精准匹配:第一列为指定IP的访问日志
awk '$1=="192.168.1.100" {print $0}' access.log

# 4. 模糊匹配:包含error异常的日志行
awk '/error|Exception/ {print $0}' app.log

# 5. 反向匹配:过滤空行、注释行
awk '!/^#/ && NF>0 {print $0}' config.ini

# 6. 多条件组合:IP为指定段且请求耗时大于500ms
awk '$1~/^10.0.0/ && $NF>500 {print $1,$NF}' access.log

# 7. 三元运算简化输出(条件判断赋值)
awk '$3>200 ? print "异常请求" : print "正常请求"' log.txt
3.5 数值运算与批量统计(核心能力)

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

XML 复制代码
# 1. 基础计数:统计有效数据总行数
awk 'NF>0 {count++} END{print "有效总行数:",count}' log.txt

# 2. 字段累加:统计所有请求总耗时
awk '{sum+=$NF} END{print "请求总耗时:",sum,"ms"}' access.log

# 3. 求平均值:计算平均请求耗时
awk '{sum+=$NF;count++} END{print "平均耗时:",sum/count,"ms"}' access.log

# 4. 最值统计:筛选最大/最小请求耗时
awk 'BEGIN{max=0;min=999999} {if($NF>max) max=$NF;if($NF<min) min=$NF} END{print "最大耗时:",max,"最小耗时:",min}' access.log

# 5. 条件统计:统计4xx/5xx异常请求总数
awk '$9~/^4|^5/ {err++} END{print "异常请求总数:",err}' access.log

# 6. 多维度统计:同时输出总请求、异常请求、正常请求
awk '{total++} $9~/^4|^5/ {err++} END{ok=total-err;print "总请求:"total,"正常请求:"ok,"异常请求:"err}' access.log
3.6 数组分组统计(日志分析核心·面试/生产Top1)

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

XML 复制代码
# 1. 统计各IP访问次数(日志分析刚需)
awk '{ip[$1]++} END{for(i in ip) print ip[i],"次",i}' access.log

# 2. 统计各接口请求频次(按接口路径分组)
awk '{uri[$7]++} END{for(u in uri) print uri[u],"次",u}' access.log

# 3. 统计HTTP状态码分布(200/404/500占比)
awk '{code[$9]++} END{for(c in code) print c,"状态码:",code[c],"次"}' access.log

# 4. 统计单个IP总请求耗时、平均耗时
awk '{ip[$1]++;sum[$1]+=$NF} END{for(i in ip) print i,"请求数:"ip[i],"总耗时:"sum[i],"平均耗时:"sum[i]/ip[i]}' access.log

# 5. 异常IP批量统计(仅输出访问量大于100次的IP,排查攻击)
awk '{ip[$1]++} END{for(i in ip) if(ip[i]>100) print ip[i],"高访问IP:",i}' access.log
3.7 生产高频实战完整案例(直接复用)
XML 复制代码
# 案例1:Nginx日志TOP10高频访问IP(排查CC攻击、异常访问)
awk '{ip[$1]++} END{for(i in ip) print ip[i],i}' access.log | sort -nr | head -10

# 案例2:统计当日所有5xx服务器异常请求,输出TOP10异常接口
awk '$9~/^5/ {uri[$7]++} END{for(u in uri) print uri[u],u}' access.log | sort -nr | head -10

# 案例3:筛选请求耗时超过1s的慢接口,精准排查性能瓶颈
awk '$NF>1000 {print $1,$7,$9,$NF}' access.log

# 案例4:统计接口请求平均耗时、最大耗时、总请求数
awk 'BEGIN{max=0;sum=0;count=0} {count++;sum+=$NF;if($NF>max) max=$NF} END{print "总请求:"count,"总耗时:"sum,"平均耗时:"sum/count,"最大耗时:"max}' access.log

# 案例5:过滤有效配置,输出纯净配置文件(清理注释、空行)
awk 'NF>0 && !/^#/ {print $0}' nginx.conf > nginx_clean.conf

# 案例6:批量提取系统所有普通用户(UID≥1000)
awk -F ":" '$3>=1000 {print $1,$3}' /etc/passwd

# 案例7:统计定时任务执行日志,筛选失败任务
awk '/error|fail/ {task[$0]++} END{for(t in task) print t}' cron.log
3.8 高频易错坑点与生产避坑细则
  • 分隔符匹配坑 :默认仅识别空格/制表符,逗号、冒号、竖线分隔文本必须手动加-F指定分隔符,否则字段提取错乱。

  • 数组遍历无序坑 :awk数组遍历for(i in arr)默认无序,统计后需搭配sort排序,才能得到TOP排名。

  • 空行空字段坑 :日志存在空行、残缺行时,需加NF>0过滤有效行,避免空数据参与统计导致结果异常。

  • 数值类型坑:字段含特殊字符、字母时无法运算,需先筛选纯数字行,否则统计结果为0或报错。

  • BEGIN/END执行时机坑:BEGIN仅在读取文本前执行一次(初始化变量),END仅在所有行处理完执行一次(汇总输出),逐行逻辑必须写在外部。

  • 多分隔符坑 :文本同时含空格、逗号、冒号等混合分隔符,需用-F "[,: ]"正则匹配多分隔符。

3.9 生产最佳实践总结
  • 简单行过滤用grep、行替换用sed,字段提取、数据统计、日志分析优先用awk,一站式处理无需管道嵌套多层命令。

  • 批量日志统计固定套路:字段分组数组统计 + 结尾遍历输出 + sort排序,适配所有访问日志分析场景。

  • 复杂数据处理优先用awk变量预初始化,避免重复计算,提升大日志文件处理效率。

  • 生产统计必加数据过滤:空行、注释、残缺数据提前过滤,保证统计结果精准无误。

  • 混合分隔符、不规则文本,统一使用正则分隔符,适配复杂日志格式。

3.10 面试高频核心考点
  • NR和NF的区别? NR是当前处理全局行号,NF是当前行拆分后的字段总列数,常用于过滤空行、规整文本。

  • awk BEGIN和END作用? BEGIN用于初始化变量、设置分隔符,前置执行;END用于所有数据处理完成后汇总统计、输出结果。

  • awk数组统计原理? 以目标字段为数组下标,逐行累加计数,最终遍历数组实现分组统计,是日志TOP排名的核心原理。

  • awk相较于sort+uniq的优势? 一站式完成筛选、分组、统计,无需多层管道,效率更高、支持多维度复合统计,逻辑更简洁。

  • 如何解决awk统计排序无序问题? awk仅负责统计,输出结果后搭配sort -nr数值倒序排序,实现TOP排名。

4. 文本处理配套小工具(生产高频完整版)

以下工具是 grep/sed/awk 文本三剑客的黄金配套工具,主打文本截取、排序去重、内容对比、字数统计、字段拼接,是日志清洗、数据规整、文本分析的必备组合,运维脚本、数据处理、日志排查高频复用,补全全量参数、实战场景与避坑要点。

4.1 cut 精准字段截取(固定列文本拆分神器)

核心作用:针对分隔符规整文本精准截取指定列、指定字符区间,适配密码文件、日志、配置文件固定格式提取,简单字段截取优先用cut,比awk更简洁高效。

XML 复制代码
# 核心语法:cut [参数] 文件名
# 1. 按分隔符截取列(最常用)
cut -d ":" -f1 /etc/passwd          # -d指定分隔符:,-f1截取第1列(提取所有用户名)
cut -d " " -f1,3 /var/log/access.log # 截取空格分隔的第1、3列字段
cut -d "," -f2-5 data.csv            # 截取逗号分隔的2-5列区间(适配csv表格文本)

# 2. 按字符位置截取(固定长度文本)
cut -c1-10 test.txt                  # 截取每行前10个字符
cut -c5- test.txt                    # 截取第5字符到行尾

# 3. 进阶参数
cut -s file.txt                      # 静默模式,不输出无分隔符的残缺行
cut --complement -f1 test.txt       # 反向截取,排除第1列,输出剩余所有列
4.2 sort 文本排序(数据规整核心)

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

XML 复制代码
# 基础排序
sort test.txt                        # 默认字典序正序(字母、字符排序)
sort -r test.txt                     # -r 反向倒序排序

# 核心生产参数(高频必用)
sort -n num.txt                      # -n 纯数字排序(解决字典序10<2的问题)
sort -nr num.txt                     # 数字倒序,适配TOP排名统计
sort -k2 -n test.txt                 # -k 指定按第2列数字排序
sort -t "," -k3 -nr data.csv         # 逗号分隔,按第3列数字倒序排序

# 去重排序
sort -u test.txt                     # 排序并自动去除重复行
4.3 uniq 去重统计(日志计数刚需)

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

XML 复制代码
# 基础去重
uniq test.txt                        # 去除相邻重复行,保留单行

# 核心生产参数
uniq -c                              # -c 统计重复次数(最核心参数)
uniq -d                              # 只输出重复的行
uniq -u                              # 只输出唯一不重复的行

# 生产标准组合(全局去重统计,必背)
sort access.log | uniq -c            # 先排序再统计全局重复数据
sort -nr | uniq -c | sort -nr        # 排序+计数+二次倒序,实现TOP排名
4.4 wc 文本统计(行数/字数/字节数)

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

XML 复制代码
# 核心参数
wc -l test.txt                       # -l 统计文本总行数(生产最高频)
wc -w test.txt                       # -w 统计文本单词数(空格分隔)
wc -c test.txt                       # -c 统计文件字节大小
wc -L test.txt                       # -L 统计文本最长行的字符长度

# 实战组合用法
grep "error" app.log | wc -l         # 统计日志报错总条数
ls | wc -l                           # 统计当前目录文件总数
4.5 diff & patch 文件对比与补丁更新

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

XML 复制代码
# diff 文件差异对比
diff old.conf new.conf               # 常规对比,输出差异行
diff -u old.conf new.conf            # -u 统一格式对比(清晰展示上下文,生产首选)
diff -r dir1 dir2                    # -r 递归对比两个目录下所有文件差异
diff -q file1 file2                  # -q 仅判断文件是否不同,不展示详情

# patch 补丁更新
diff -u old.txt new.txt > update.patch  # 生成补丁文件
patch old.txt update.patch               # 应用补丁,更新文件内容
patch -R old.txt update.patch            # 回滚补丁,恢复原文件
4.6 tr 字符替换与删除(简单文本清洗)

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

XML 复制代码
# 字符替换
tr "a-z" "A-Z" < test.txt           # 小写全部转大写
tr " " "\n" < test.txt              # 空格替换为换行

# 字符删除
tr -d "0-9" < test.txt              # -d 删除所有数字字符
tr -d "\r" < win.txt > linux.txt   # 去除windows换行符,适配Linux格式

# 压缩重复字符
tr -s " " < test.txt                # -s 压缩多个连续空格为单个空格
4.7 高频组合实战(生产直接复用)
XML 复制代码
# 1. 统计TOP10高频访问IP(日志分析标配)
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10

# 2. 清洗文本:去空行、去重复、规整排序
grep -v "^$" test.txt | sort -u

# 3. 统计配置文件有效配置行数(过滤空行、注释)
grep -v "^#" nginx.conf | grep -v "^$" | wc -l

# 4. 批量转换文本小写、清理多余空格
tr "A-Z" "a-z" < data.txt | tr -s " "

# 5. 对比新旧配置差异,只输出变更内容
diff -u nginx.old.conf nginx.new.conf
4.8 核心避坑要点(生产必看)
  • uniq核心坑 :uniq仅识别相邻重复行,单独使用无法统计全局重复数据,必须先执行sort排序再去重统计。

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

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

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

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

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

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

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

1.1 模块总述

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

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

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

XML 复制代码
# 两大生产万能组合(必背,全覆盖进程信息)
ps -ef                # 标准全量查看:父PID、启动用户、完整命令、进程状态
ps aux                # 资源维度查看:CPU/内存占比、进程状态、常驻内存、虚拟内存

# ===================== 参数详解 =====================
# ps -ef 核心字段
# UID    进程所属用户
# PID    进程唯一ID(查杀、管控核心标识)
# PPID   父进程ID(排查进程父子关系、僵尸进程必备)
# STIME  进程启动时间
# TIME   进程占用CPU总时长
# CMD    进程启动完整命令

# ps aux 核心字段(运维排错重点)
# USER   进程运行用户
# PID    进程ID
# %CPU   CPU占用百分比
# %MEM   物理内存占用百分比
# VSZ    虚拟内存占用
# RSS    实际物理内存占用
# STAT   进程状态(核心排查字段,下文详解)
# START  进程启动时刻
# TIME   CPU累计占用时间
# COMMAND 进程启动命令

# ===================== 精准检索进程(生产高频) =====================
ps -ef | grep nginx       # 检索指定服务所有进程
ps aux | grep java       # 过滤Java进程,排查服务运行状态
ps -ef | grep -v grep    # 过滤grep自身进程,纯净输出结果

# ===================== 进阶精准查看 =====================
ps -p 12345              # 查看指定PID进程详细信息
ps -L 12345              # 查看进程下所有线程(线程排查必备)
ps aux --sort=-%cpu      # 按CPU占用倒序排序,快速定位高负载进程
ps aux --sort=-%mem      # 按内存占用倒序排序,排查内存溢出进程
1.3 进程状态 STAT 精讲(面试/排错核心)

ps aux 输出的 STAT 状态码是进程异常排查的关键,不同状态对应进程运行、阻塞、休眠、僵尸等状态,重点区分高频异常状态。

  • R(Running):运行态,进程正在CPU执行或等待CPU调度,正常活跃状态。

  • S(Sleeping):可中断休眠态,进程等待资源、IO、信号,绝大多数常规服务进程常态。

  • D(Disk Sleep) :不可中断休眠态,进程阻塞在磁盘IO、挂载读写,无法被kill终止,大概率磁盘故障、挂载异常。

  • Z(Zombie):僵尸进程,子进程退出、父进程未回收资源,进程残留占用PID,无业务运行,长期堆积会耗尽系统PID资源。

  • T(Stopped):暂停态,进程被挂起、暂停运行(Ctrl+Z触发),后台休眠暂停。

  • 额外标识Ss 主进程、S+ 前台进程、Sl 多线程进程、< 高优先级进程、N低优先级进程

1.4 动态进程监控 top(实时资源监控,性能排查核心)

top 为动态实时监控工具,默认3秒刷新一次,实时展示全局进程CPU、内存、负载、状态变化,是排查服务器卡顿、CPU飙高、内存溢出的核心命令。

XML 复制代码
# 基础实时监控
top                     # 全局进程动态监控
top -d 1                # 1秒刷新一次(高频排查刚需)
top -p 12345            # 仅监控指定PID进程动态
top -u nginx            # 仅查看指定用户的所有进程

# ===================== top 交互快捷键(生产必背) =====================
# P    按CPU占用倒序排序(默认)
# M    按内存占用倒序排序
# N    按PID倒序排序
# T    按进程运行时间排序
# 1    展开所有CPU核心负载
# f    自定义展示字段
# k    输入PID直接查杀进程
# q    退出监控界面
# shift+h 展示线程层级信息

# ===================== 核心系统指标解读 =====================
# load average: 1分钟、5分钟、15分钟系统负载
# 单核CPU:负载≤1正常;多核CPU:负载≤核心数为正常
# %Cpu(s):us用户进程、sy系统进程、id空闲CPU(id过低代表CPU满载)
# Mem:总内存、已用、空闲、缓存占用
# Swap:交换分区使用(Swap占用升高代表物理内存不足,严重卡顿)
1.5 增强版进程监控 htop(极简高效,生产首选)

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

XML 复制代码
# 安装命令
yum install htop -y     # CentOS/Rocky
apt install htop -y     # Ubuntu/Debian

# 基础用法
htop                    # 可视化动态进程监控
htop -u nginx           # 筛选指定用户进程
1.6 进程树查看 pstree(父子进程关系排查)

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

XML 复制代码
# 基础用法
pstree                  # 展示全量进程树
pstree -p               # 显示所有进程PID(核心参数,精准定位进程)
pstree -u               # 显示进程所属用户
pstree nginx            # 仅展示nginx服务进程树,过滤冗余进程
1.7 精准获取进程 PID(pidof/pgrep 高效检索)

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

XML 复制代码
# pidof:精准获取进程PID(纯PID输出,适配脚本)
pidof nginx             # 输出nginx所有进程PID
pidof java              # 获取Java服务进程PID

# pgrep:进阶进程筛选(支持模糊匹配、用户筛选)
pgrep nginx             # 仅输出进程PID
pgrep -l nginx          # 同时输出PID+进程名称(生产首选)
pgrep -u root           # 筛选root用户所有进程PID
pgrep -f "test.jar"    # 模糊匹配完整进程命令,精准定位自定义脚本进程
1.8 高频易错坑点与生产避坑细则
  • ps 检索冗余坑 :grep 检索进程会自带grep自身进程,需加 grep -v grep 过滤,避免误判进程常驻。

  • D态进程不可杀坑 :处于D不可中断IO状态的进程,kill -9 无法终止,需排查磁盘挂载、硬盘故障,重启服务器方可恢复。

  • 僵尸进程处理坑 :Z态僵尸进程无需杀进程,需重启对应父进程回收资源,直接杀僵尸进程无效。

  • top负载误区:load average 负载数值无绝对阈值,需匹配CPU核心数,多核服务器负载高不一定过载,需结合id空闲CPU综合判断。

  • pidof精准性坑 :pidof 仅精准匹配进程名,自定义复杂启动命令的进程,需用 pgrep -f 模糊检索。

1.9 生产最佳实践与面试高频考点
  • 进程排查选型规范:静态检索用ps、动态监控用top/htop、查父子关系用pstree、脚本取PID用pgrep/pidof。

  • CPU飙高排查流程:top定位高CPU进程 → ps -p 查看进程详情 → 排查程序日志定位异常。

  • 内存溢出排查流程:top按M排序 → 定位高内存进程 → 查看线程占用、分析内存泄漏。

  • 僵尸进程面试考点:成因是子进程退出后父进程未调用wait()回收资源;危害是占用PID、消耗系统资源;解决方案是重启父进程。

  • D态进程面试考点:不可中断IO阻塞,多为磁盘、NFS挂载、硬件IO异常,无法通过kill命令终止。

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

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

2.1 模块总述

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

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

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

XML 复制代码
# 查看所有进程信号列表
kill -l

# 三大生产核心信号(必背)
# 1. SIGTERM 15 默认优雅终止信号
# 作用:通知进程收尾、保存数据、关闭连接、释放资源后退出
# 特点:可控、安全、不会丢失业务数据,生产首选默认信号
kill -15 PID  # 等价 kill PID

# 2. SIGKILL 9 强制终止信号
# 作用:系统强制回收进程,进程无权限、无时间收尾,直接销毁
# 特点:暴力终止,容易丢失数据、产生僵尸进程、文件损坏
# 适用场景:进程卡死、无响应、15信号无法终止的异常进程
kill -9 PID

# 3. SIGINT 2 中断信号
# 作用:等同于终端 Ctrl+C,终止前台运行进程
# 仅对前台活跃进程生效,后台进程无法接收该信号

# 小众实用信号
# SIGSTOP 19 暂停进程(挂起进程,不销毁、不释放资源)
# SIGCONT 18 恢复暂停进程,继续运行
# SIGHUP 1 重载配置、重启进程(Nginx/Tomcat热重载核心)
2.3 进程终止全量命令(精准/批量/优雅/强制)

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

XML 复制代码
# ========== 1. 精准PID进程查杀(单进程管控首选) ==========
kill 12345                # 默认15信号,优雅终止进程(生产优先)
kill -15 12345            # 显式优雅终止,等待进程资源释放、数据落地
kill -9 12345             # 强制杀死卡死/无响应进程(谨慎使用)

# ========== 2. 按程序名批量查杀(批量运维刚需) ==========
pkill nginx               # 批量优雅终止所有nginx进程
pkill -9 java             # 批量强制杀死所有java进程(应急收尾)
pkill -f "test.jar"       # 模糊匹配进程命令,精准查杀自定义脚本进程

# ========== 3. 进阶批量查杀组合(生产高频) ==========
# 筛选进程并优雅批量终止
pgrep -f "app.jar" | xargs kill -15
# 筛选卡死异常进程强制查杀
pgrep -f "error_app" | xargs kill -9

# ========== 4. 进程暂停与恢复 ==========
kill -19 PID              # 暂停进程运行(挂起,资源保留)
kill -18 PID              # 恢复暂停进程继续运行
2.4 前后台进程调度(终端任务托管核心)

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

XML 复制代码
# ========== 1. 后台运行符号 &(临时后台运行) ==========
./test.sh &              # 脚本后台运行,终端可继续操作
# 缺陷:关闭终端、断开远程连接,进程会自动终止(SIGHUP信号退出)

# ========== 2. 后台任务查看与切换 ==========
jobs                     # 查看当前终端所有后台任务
jobs -l                  # 查看后台任务+对应PID(精准管控)
fg 1                     # 将编号1的后台任务切换到前台运行
bg 1                     # 将编号1的暂停任务,放入后台继续运行

# ========== 3. 前台任务快速挂起 ==========
# 快捷键 Ctrl+Z
# 作用:暂停当前前台运行任务,自动放入后台暂停状态
2.5 守护进程 nohup(生产后台服务标准)

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

XML 复制代码
# 生产标准后台启动命令(万能模板,直接复用)
nohup java -jar app.jar > app.log 2>&1 &

# 命令逐段解析
# nohup:屏蔽终端退出信号,进程脱离终端常驻后台
# > app.log:标准输出日志写入日志文件
# 2>&1:错误输出重定向到标准输出,统一存入日志文件
# 末尾&:启动时直接放入后台运行

# 进阶用法:不输出日志(极简后台运行)
nohup ./run.sh > /dev/null 2>&1 &

# 注意:nohup默认生成nohup.out空日志,指定输出路径可避免冗余文件
2.6 核心底层区别与选型规范
  • & 和 nohup & 核心区别:单独&仅后台运行,依赖终端会话,断连即终止;nohup & 彻底脱离终端,永久后台常驻,不受会话影响。

  • kill -15 与 kill -9 选型原则:常规进程停止、服务重启统一用15优雅终止;进程卡死、僵尸进程残留、无响应异常进程,才使用9强制查杀。

  • pkill 与 kill+pgrep 区别:pkill简洁适合批量同名进程查杀;pgrep精准匹配,适合自定义复杂进程、精准筛选查杀。

2.7 高频致命坑点 & 生产避坑细则
  • 禁止滥用kill -9 :强制杀进程会导致数据未落地、文件句柄未释放、配置丢失、数据库事务中断,引发服务启动异常、文件损坏,生产优先15优雅终止。

  • nohup日志阻塞坑:nohup不重定向日志时,默认持续写入nohup.out,长期运行会导致日志文件无限膨胀、占用磁盘空间,必须手动指定日志路径或黑洞输出。

  • 后台任务终端依赖坑 :jobs命令仅查看当前终端后台任务,新开终端无法查看其他终端后台任务,常驻服务必须用nohup/systemd托管。

  • 批量杀进程误杀坑:pkill模糊匹配易误杀同名无关进程,批量操作前必须先用pgrep预览进程列表,确认无误再执行查杀。

  • 僵尸进程无法kill -9:僵尸进程为已退出残留进程,无运行逻辑,kill -9无法销毁,必须重启父进程回收资源。

2.8 面试高频核心考点
  • **kill -15和kill -9的核心区别与生产场景?**15为优雅终止,进程自主收尾释放资源、保存数据,安全无副作用,适用于常规启停;9为强制销毁,进程无收尾机会,易造成数据丢失,仅用于卡死异常进程。

  • **为什么nohup后台进程关闭终端不会退出?**nohup屏蔽了SIGHUP挂断信号,脱离终端会话独立运行,不受终端关闭、断连影响,实现常驻后台。

  • **Ctrl+C和Ctrl+Z区别?**Ctrl+C发送SIGINT信号,直接终止前台进程;Ctrl+Z挂起进程,暂停运行并放入后台,进程仍占用资源。

  • **如何彻底结束后台nohup进程?**需先用ps/pgrep获取PID,执行kill -15优雅终止,仅关闭终端无法停止进程。

2.9 生产最佳实践万能组合
XML 复制代码
# 1. 服务标准启停(优雅终止+重启)
pgrep -f app.jar | xargs kill -15 && nohup java -jar app.jar > app.log 2>&1 &

# 2. 异常进程应急查杀(预览+强制终止)
pgrep -f "error_task"  # 预览确认进程
pgrep -f "error_task" | xargs kill -9

# 3. 批量清理后台暂停任务
jobs | grep Stopped | awk '{print $1}' | xargs kill -9

# 4. 轻量脚本永久后台运行(无日志冗余)
nohup ./task.sh > /dev/null 2>&1 
XML 复制代码
kill -9 PID         # 强制杀死进程
kill -15 PID         # 优雅终止
pkill java          # 按程序名杀进程
&                   # 后台运行
jobs                # 查看后台任务
fg 1                # 后台切前台
bg 1                # 暂停任务后台运行
nohup ./run.sh &    # 脱离终端后台运行
复制代码

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

3.1 模块总述

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

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

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

XML 复制代码
# 1. 快速查看系统负载(最简核心命令)
uptime

# 输出字段解析:
# 14:30:00  当前系统时间
# up 30days  服务器运行时长
# 2 users  当前在线用户数
# load average: 0.25, 0.40, 0.35  
# 依次为:1分钟、5分钟、15分钟平均负载

# 2. 负载高低判断标准(生产通用规范)
# 单核CPU:负载 <1 正常,1~1.5 轻微拥堵,>2 严重过载卡顿
# 多核CPU(N核):负载 <N 正常,N~1.2*N 负载偏高,>1.5*N 严重过载
# 负载趋势:1min>5min>15min 代表负载持续升高,需紧急排查
# 负载趋势:1min<5min<15min 代表负载逐步回落,系统恢复正常
3.3 内存资源监控(free)原理+指标精讲

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

XML 复制代码
# 查看内存、Swap使用情况(-h 人性化单位,生产必带)
free -h

# 核心字段解析(生产重点)
# total:总内存大小
# used:已使用内存(进程运行+缓存+缓冲区)
# free:完全空闲内存(系统预留,不代表可用内存)
# shared:共享内存
# buff/cache:文件缓存、目录缓存、磁盘读写缓冲区
# available:真正可用内存(生产判断内存余量唯一标准!)

# Swap交换分区核心说明
# Swap:硬盘虚拟内存,物理内存不足时,系统将闲置进程数据存入磁盘
# 风险:Swap一旦持续占用,磁盘IO会飙升,系统严重卡顿、服务超时
# 生产规范:正常服务器Swap使用率应趋近于0

# 内存过载判断标准
# 1. available持续过低,接近耗尽
# 2. Swap占用持续升高(核心告警指标)
# 3. 系统日志出现OOM killer进程杀死记录
3.4 全局系统状态监控(vmstat)性能基线排查

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

XML 复制代码
# 语法:vmstat 刷新间隔秒数 刷新次数
vmstat 1       # 每秒刷新一次,持续监控(排错首选)
vmstat 1 10    # 每秒刷新,共输出10次后退出

# 核心关键字段解读(故障定位核心)
## 1. 进程字段
# r:等待CPU运行的任务数(就绪队列,对应CPU负载)
# b:不可中断阻塞进程数(D态进程,磁盘IO阻塞核心指标)

## 2. 内存字段
# swpd:已使用Swap大小(数值持续上涨=内存不足)
# free:空闲内存
# buff:缓冲区
# cache:文件缓存

## 3. IO字段
# bi:磁盘读数据量
# bo:磁盘写数据量
# bi/bo持续过高 = 磁盘IO打满瓶颈

## 4. CPU字段
# us:用户进程CPU占比(业务程序占用)
# sy:系统内核CPU占比
# id:空闲CPU(id持续趋近于0=CPU满载)
# wa:IO等待CPU占比(wa过高=磁盘IO瓶颈,CPU空闲但等磁盘读写)
3.5 磁盘IO专项监控(iostat)读写性能排查

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

XML 复制代码
# 每秒刷新一次磁盘IO状态
iostat 1

# 核心关键指标(生产排错必看)
# %util:磁盘设备繁忙百分比(核心指标)
# 100%util:磁盘IO完全打满,所有读写请求阻塞,服务严重卡顿
# avgqu-sz:IO请求队列长度,队列越长,拥堵越严重

# 字段说明
# tps:每秒IO读写次数
# rMB/s:每秒读取数据量
# wMB/s:每秒写入数据量

# 磁盘IO瓶颈判定标准
# 1. %util长期90%~100%
# 2. wa(IO等待CPU占比)持续大于20%
# 3. 业务接口响应缓慢、日志写入卡顿、文件操作超时
3.6 网络流量监控(sar)带宽/报文排查

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

XML 复制代码
# 每秒刷新一次网络设备流量
sar -n DEV 1

# 关键字段解析
# rxpck/s:每秒接收报文数
# txpck/s:每秒发送报文数
# rxkB/s:每秒接收流量
# txkB/s:每秒发送流量

# 网络异常判定
# 流量持续打满带宽上限 = 带宽瓶颈
# 报文数异常飙升 = 存在异常请求、CC攻击、日志疯狂输出
3.7 生产标准性能排查流程(卡顿/超时万能排查链路)

第一步:全局初判 执行 uptime 查看负载,判断系统整体拥堵状态,区分瞬时波动和持续过载。

第二步:CPU瓶颈定位 top 按P排序,查看高CPU进程,确认是业务程序耗CPU还是系统内核耗CPU。

第三步:内存校验 free -h 查看available可用内存、Swap占用,判断是否内存不足、OOM风险。

第四步:IO瓶颈定位 iostat 1 查看磁盘%util利用率、wa IO等待,确认磁盘是否打满阻塞。

第五步:网络校验 sar -n DEV 1 排查带宽、报文是否异常,排除网络瓶颈。

第六步:全局汇总 vmstat 1 综合核对进程、IO、CPU状态,锁定最终瓶颈根源。

3.8 高频致命坑点与生产避坑细则
  • 负载与CPU使用率混淆坑:负载高不代表CPU占用高,负载是等待任务数,大量IO阻塞会导致负载飙升、CPU空闲,切勿盲目杀进程。

  • 内存空闲误区 :Linux系统会默认利用空闲内存做buff/cache缓存,free空闲内存小是正常现象,判断内存余量只看available。

  • Swap占用致命坑 :Swap一旦持续上涨,优先排查内存泄漏,而非重启服务器,临时解决方案可执行swapoff -a && swapon -a释放缓存。

  • 磁盘util误区:机械硬盘容易100%util卡顿,固态硬盘IO性能更强,若SSD仍100%util,大概率是程序疯狂读写小文件。

  • vmstat b队列异常:b列阻塞进程数持续大于0,代表存在大量D态不可中断IO进程,需排查磁盘挂载、NFS、硬盘故障。

3.9 面试高频核心考点
  • 系统负载过高可能的原因? CPU密集进程占用、大量任务排队、磁盘IO阻塞、网络IO拥堵、僵尸进程堆积。

  • 为什么内存充足但系统依然卡顿? 磁盘IO打满、CPU IO等待过高、网络带宽耗尽,属于IO瓶颈,非资源容量瓶颈。

  • Swap频繁使用的危害? 磁盘读写速度远低于物理内存,会导致服务响应超时、接口卡顿、进程阻塞、业务异常。

  • iostat中wa指标含义? CPUIO等待时间占比,wa过高说明CPU大量时间等待磁盘读写,核心瓶颈为磁盘IO。

  • Linux cache占用大量内存需要清理吗? 不需要,是系统优化机制,内存空闲时自动缓存文件,提升读写速度,内存不足时系统会自动回收。

3.10 生产最佳实践总结
  • 日常巡检固定组合:uptime && free -h && iostat,快速核验整机性能状态;

  • 性能卡顿优先排查IO瓶颈,多数线上卡顿均为磁盘/网络IO阻塞,而非CPU内存不足;

  • 线上服务器禁止长期占用Swap,需配置合理内存阈值告警,提前规避OOM风险;

  • 小文件频繁读写场景,重点监控磁盘util和IO队列,避免磁盘IO打满引发批量超时;

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

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

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

4.1 模块总述

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

4.2 核心语法标准(必背)

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

XML 复制代码
# 标准语法格式
# 分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-7)  执行任务
# 周0和7均代表周日

# 基础示例:每天凌晨3点执行备份脚本
0 3 * * * /root/backup.sh
4.3 全量用户操作命令

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

XML 复制代码
# 1. 编辑当前用户定时任务(核心命令)
crontab -e           # 编辑定时任务,不存在则新建,自带语法校验

# 2. 查看当前用户所有定时任务
crontab -l           # 罗列所有已配置的定时任务

# 3. 清空当前用户所有定时任务(高危!生产慎用)
crontab -r           # 直接清空全部任务,无确认提示、不可恢复
crontab -ir          # 带确认提示删除,安全删除首选

# 4. 管理指定用户定时任务(仅root权限可用)
crontab -u nginx -l  # 查看nginx用户的定时任务
crontab -u dev -e    # 编辑普通用户dev的定时任务
crontab -u dev -r    # 清空指定用户定时任务
4.4 五大特殊符号精讲(批量/周期定时核心)

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

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

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

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

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

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

XML 复制代码
# 特殊符号实战示例
*/5 * * * * /root/test.sh        # 每5分钟执行一次
0 8-18 * * * /root/run.sh        # 每天8点-18点,整点执行
0 0,6,12,18 * * * /root/sync.sh  # 每天0点、6点、12点、18点执行
0 2 * * 1-5 /root/work.sh       # 每周一到周五凌晨2点执行
4.5 生产高频定时场景(直接复用)

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

XML 复制代码
# 1. 每日凌晨3点清理7天前日志(生产日志清理标配)
0 3 * * * find /var/log -name "*.log" -mtime +7 -delete

# 2. 每小时同步系统时间(解决时间偏差问题)
0 * * * * /usr/sbin/chronyc -a makestep

# 3. 每周日凌晨2点全量数据备份
0 2 * * 0 /root/data_backup.sh

# 4. 工作日(周一至周五)9点自动重启Nginx
0 9 * * 1-5 systemctl restart nginx

# 5. 每10分钟检测服务状态,异常自动重启
*/10 * * * * /root/service_check.sh

# 6. 每月1号凌晨4点清理系统垃圾文件
0 4 1 * * rm -rf /tmp/* /var/tmp/*

# 7. 每天12点、18点自动同步业务数据
0 12,18 * * * /root/data_sync.sh
4.6 定时任务日志排查(排错核心)

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

XML 复制代码
# centos/rocky 定时任务日志路径
tail -f /var/log/cron

# ubuntu/debian 定时任务日志路径
tail -f /var/log/syslog

# 自定义任务日志(生产最佳实践,必加)
0 3 * * * /root/backup.sh >> /var/log/backup_cron.log 2>&1
# 释义:任务执行日志追加写入指定文件,错误日志统一输出,便于排错
4.7 系统级定时任务(全局配置)

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

XML 复制代码
# 系统全局定时配置文件
/etc/crontab

# 系统自带定时目录(无需手动配置,放入脚本自动执行)
/etc/cron.hourly/  # 每小时自动执行
/etc/cron.daily/   # 每天自动执行
/etc/cron.weekly/  # 每周自动执行
/etc/cron.monthly/ # 每月自动执行
4.8 高频致命坑点(生产必避)
  • 路径缺失坑(Top1踩坑) :crontab 无完整环境变量,执行脚本必须写绝对路径,相对路径会直接执行失败,所有命令、脚本、配置均需全路径。

  • 周日冲突坑:日期和星期同时配置会触发「或逻辑」,而非且逻辑,容易导致定时任务提前执行,精准定时建议只配日期或只配星期。

  • 无日志排错难:默认无任务执行日志,失败无提示,所有生产定时任务必须配置日志输出,否则无法排查异常。

  • crontab -r 误删坑:清空命令无二次确认,极易误删所有定时任务,生产禁止直接使用,优先备份任务配置。

  • 脚本权限不足 :定时执行脚本需提前加执行权限 chmod +x 脚本名,否则任务静默失败。

  • 并发重复执行:短周期定时任务(每分钟/每5分钟),若脚本执行耗时过长,会产生并发进程,需加锁控制避免重复执行。

4.9 面试高频核心考点
  • crontab 日期和星期同时生效规则? 两者是「或关系」,满足任意一个条件即执行,不是同时满足,容易导致定时逻辑错乱。

  • 为什么终端能执行的脚本,crontab执行失败? crontab环境变量不完整、不识别相对路径,必须使用绝对路径,且需独立配置脚本所需环境变量。

  • 如何避免定时任务并发执行? 可通过文件锁、进程PID判断,保证同一时间仅有一个脚本进程运行。

  • **crontab 0和7的区别?**分钟/星期字段中,0和7均代表周日,无区别,周一至周五为1-5,周六为6。

4.10 生产最佳实践总结
  • 所有定时任务统一使用绝对路径,强制配置日志输出,方便异常排查;

  • 配置前先测试脚本手动可执行,再写入crontab,避免语法、脚本报错;

  • 定期备份crontab配置:crontab -l > /root/cron_backup.txt,防止误删丢失;

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

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

XML 复制代码
crontab -e          # 编辑定时任务
crontab -l          # 查看定时任务
crontab -ir         # 安全删除定时任务(带确认)
tail -f /var/log/cron # 查看定时执行日志
crontab -u 用户名 -l # 查看指定用户定时
XML 复制代码
crontab -e          # 编辑当前用户定时
crontab -l          # 查看定时任务
crontab -r          # 清空定时
# 格式:分 时 日 月 周 命令
0 3 * * * /root/backup.sh
复制代码

六、网络命令(运维排查必备)

1. 网卡、IP、路由【生产完整版+原理+排错+避坑精讲】

1.1 模块总述

网卡、IP地址、路由是Linux网络通信的底层核心,所有外网访问、内网互通、服务端口监听、跨机器通信、网关跳转、网络不通故障,均围绕该模块展开。本小节摒弃过时命令,以**ip系列命令(现代Linux标准)**为主、传统ifconfig/route为辅,补全网卡配置、IP增减、网关路由、静态路由、路由优先级、网络故障排查、高频坑点与面试考点,完全适配生产网络配置、网络异常排错、服务器组网场景。

1.2 网卡基础信息查看(核心实操)

Linux 网卡命名规范:传统eth0/eth1,现代服务器多为ens33/enp0s3等物理网卡名,lo为本地回环网卡(127.0.0.1),仅本机内部通信。

XML 复制代码
# 1. 全量网卡信息查看(现代首选,替代ifconfig,信息最全)
ip addr

# 关键字段解析
# LINK:网卡物理状态(UP=网卡启用、DOWN=网卡禁用)
# INET:IPv4地址/子网掩码
# INET6:IPv6地址
# LOOPBACK:回环网卡,永不宕机
# BROADCAST:广播地址

# 2. 简洁查看本机所有IP(运维快速核查首选)
hostname -I

# 3. 查看网卡物理硬件信息(MAC地址、网卡型号、速率)
ip link
ip link show ens33   # 查看指定网卡详细链路信息

# 4. 传统兼容命令(老旧系统可用)
ifconfig             # 查看网卡IP、掩码、MAC、收发数据包
ifconfig ens33 up    # 启用网卡
ifconfig ens33 down  # 禁用网卡
1.3 网卡启停与IP动态/静态配置(生产核心)

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

XML 复制代码
# ========== 1. 网卡启停操作(临时生效) ==========
ip link set ens33 up      # 启用网卡
ip link set ens33 down    # 禁用网卡

# ========== 2. 临时配置IP(重启/重启网络失效,调试专用) ==========
ip addr add 192.168.1.100/24 dev ens33   # 给ens33网卡临时添加IP
ip addr del 192.168.1.100/24 dev ens33   # 删除网卡临时IP

# 临时配置广播地址
ip addr add 192.168.1.100/24 broadcast 192.168.1.255 dev ens33

# ========== 3. 重启网络服务(生效配置) ==========
# CentOS7+/Rocky
systemctl restart network
# Ubuntu/Debian
systemctl restart networking
# 通用重载网络配置
nmcli reload
1.4 路由体系核心原理(面试必考、网络通断底层)

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

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

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

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

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

1.5 路由全量实操命令(生产全覆盖)
XML 复制代码
# ========== 1. 路由表查看(生产首选) ==========
ip route show          # 查看完整路由表(现代标准)
route -n               # 数字格式查看路由,不解析域名,排查更快

# 路由字段解读
# Destination:目标网段
# Gateway:下一跳网关地址
# Genmask:子网掩码
# Flags:路由标识(U=路由生效、G=默认网关)

# ========== 2. 默认网关配置(上网核心) ==========
# 临时添加默认网关(重启失效)
ip route add default via 192.168.1.1 dev ens33
# 删除默认网关
ip route del default

# ========== 3. 静态路由配置(跨网段互通刚需) ==========
# 指定网段走固定网关(访问10.0.0.0/8网段,走192.168.1.2网关)
ip route add 10.0.0.0/8 via 192.168.1.2 dev ens33
# 删除指定静态路由
ip route del 10.0.0.0/8

# 本机路由:指定IP走本地网卡(内网互通优化)
ip route add 192.168.1.0/24 dev ens33

# ========== 4. 路由清空与重置(故障应急) ==========
ip route flush all     # 清空所有路由,重置网络路由规则
1.6 永久网卡与路由配置(企业规范)

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

CentOS/Rocky 永久网卡配置

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

XML 复制代码
# 核心配置参数
TYPE=Ethernet
BOOTPROTO=static       # 静态IP(dhcp为动态获取)
NAME=ens33
DEVICE=ens33
ONBOOT=yes             # 开机自启网卡
IPADDR=192.168.1.100   # 静态IP
NETMASK=255.255.255.0  # 子网掩码
GATEWAY=192.168.1.1    # 默认网关
DNS1=223.5.5.5         # DNS服务器
Ubuntu 永久网卡配置

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

XML 复制代码
network:
  ethernets:
    ens33:
      addresses: [192.168.1.100/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [223.5.5.5,8.8.8.8]
  version: 2
1.7 高频网络故障排查流程(生产万能链路)
  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),避免域名解析失败。

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

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

2.1 模块总述

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

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

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

XML 复制代码
# 1. 基础连通性测试(默认无限发包,Ctrl+C终止)
ping www.baidu.com
ping 223.5.5.5

# 2. 生产标准测试(指定发包次数,自动退出,脚本/巡检刚需)
ping -c 4 www.baidu.com      # 发送4个数据包后自动终止(Linux通用)
ping -c 4 192.168.1.1        # 测试内网网关连通性

# 3. 限定超时时间、间隔时间(精准排查网络延迟)
ping -c 5 -W 2 www.baidu.com # 发包5次,单次超时2秒,超时判定故障
ping -i 0.5 www.baidu.com    # 缩短发包间隔为0.5秒,快速压测链路稳定性

# 4. 后台静默ping测试(长期监测链路稳定性)
ping -c 1000 www.baidu.com > ping_log.txt 2>&1 &

# 5. 仅查看连通结果(脚本判断专用)
ping -c 1 IP/域名 && echo "链路正常" || echo "链路中断"
2.3 路由链路追踪(traceroute/mtr)定位丢包节点

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

XML 复制代码
# 1. 基础路由追踪(全程网关跳转路径)
traceroute www.baidu.com

# 2. 生产精准追踪(忽略反向解析,加速排查)
traceroute -n www.baidu.com  # 只显示IP,不解析域名,避免卡顿

# 3. 全能链路检测(mtr 生产首选,比traceroute精准百倍)
# 结合ping+路由追踪,统计每一跳丢包率、延迟,定位故障网关
mtr -c 100 www.baidu.com     # 发送100包,统计链路丢包
mtr -n -c 50 223.5.5.5       # 无解析+50次发包,快速定位丢包节点
2.4 DNS解析核心命令(nslookup/dig)精准排错

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

XML 复制代码
# ========== 1. nslookup 快速解析(日常排查首选) ==========
# 基础域名解析,查看默认DNS、解析IP
nslookup www.baidu.com

# 指定DNS服务器解析(排查DNS服务器故障核心)
nslookup www.baidu.com 223.5.5.5   # 用阿里DNS单独解析
nslookup www.baidu.com 8.8.8.8     # 用谷歌DNS单独解析

# 反向解析(IP查域名)
nslookup 14.215.177.38

# ========== 2. dig 详细解析(深度排错、运维高阶) ==========
# 完整解析过程、耗时、DNS服务器、解析记录类型
dig www.baidu.com

# 精简解析结果(只看最终IP,生产快速核查)
dig +short www.baidu.com

# 指定DNS服务器解析
dig @223.5.5.5 www.baidu.com

# 解析特定记录类型(企业域名排查刚需)
dig www.baidu.com A    # 解析IPv4 A记录
dig www.baidu.com AAAA # 解析IPv6记录
dig www.baidu.com CNAME # 解析别名记录
dig www.baidu.com MX   # 解析邮件服务器记录
2.5 DNS核心配置与生效规则(生产必懂)

Linux DNS解析遵循本地优先、DNS服务器兜底规则,核心配置文件决定解析优先级,是解决解析异常的底层关键。

  • 本地hosts文件/etc/hosts,最高解析优先级,强制指定域名对应IP,优先于所有DNS服务器解析

  • DNS配置文件/etc/resolv.conf,系统默认DNS服务器配置文件,存储公共DNS地址

  • 解析优先级顺序:/etc/hosts 本地解析 > resolv.conf 公共DNS解析

XML 复制代码
# 1. 临时修改DNS(立即生效,重启网络失效)
echo "nameserver 223.5.5.5" > /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf

# 2. 永久DNS配置(CentOS/Rocky)
# 编辑网卡配置文件,添加DNS参数
vim /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1=223.5.5.5
DNS2=8.8.8.8

# 3. 永久DNS配置(Ubuntu)
vim /etc/netplan/00-installer-config.yaml
nameservers:
  addresses: [223.5.5.5,8.8.8.8]

# 4. 本地hosts强制解析(临时域名映射、测试环境刚需)
vim /etc/hosts
# 格式:IP 域名
180.101.49.11 www.baidu.com
2.6 DNS缓存清理(解析异常核心解决方案)

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

XML 复制代码
# CentOS7+/Rocky 清理DNS缓存
systemctl restart nscd

# Ubuntu/Debian 清理DNS缓存
systemctl restart systemd-resolved

# 手动清空本地hosts缓存(通用)
cat /dev/null > /etc/hosts

# 测试DNS缓存是否生效
# 第一次解析慢,第二次快速返回即为缓存生效
time dig www.baidu.com
2.7 网络连通&DNS故障标准化排错流程

第一步:基础链路校验 ping 网关、ping 内网IP,排查物理链路、网卡、网关故障

第二步:区分故障范围 ping 公网IP(223.5.5.5)通、ping 域名不通,判定为DNS解析故障;公网IP也不通,判定为链路故障

第三步:核查DNS配置 查看resolv.conf是否有有效DNS服务器,替换阿里/谷歌公共DNS测试

第四步:排查本地hosts 检查/etc/hosts是否存在错误域名映射,导致解析异常

第五步:刷新DNS缓存 重启DNS服务、清空缓存,重新解析域名

第六步:精准链路追踪 mtr排查链路丢包节点,解决延迟高、间歇性超时问题

2.8 高频致命坑点&生产避坑细则
  • hosts优先级误区:本地hosts解析优先级高于公共DNS,测试环境修改hosts后,线上域名解析会被强制覆盖,上线前务必清理无效hosts配置。

  • DNS单节点故障 :只配置单个DNS服务器,会导致DNS服务宕机后所有域名无法解析,生产必须配置双DNS冗余

  • ping域名失败≠网络中断:大概率是DNS解析故障,而非链路故障,需通过ping公网IP快速区分,切勿盲目重启网络。

  • 缓存不更新坑:域名IP变更后,服务器会缓存旧解析结果,导致访问异常,必须手动刷新DNS缓存或重启解析服务。

  • ICMP被拦截误区:部分公网服务器、防火墙会禁止ICMP协议,ping超时不代表业务不通,需用curl/telnet测试端口业务连通性。

2.9 面试高频核心考点
  • 域名解析优先级顺序? 本地/etc/hosts > 系统DNS缓存 > /etc/resolv.conf配置的公共DNS服务器。

  • ping IP通、ping域名不通的原因? DNS服务器配置错误、DNS服务宕机、域名解析缓存异常、hosts配置错误。

  • nslookup和dig的区别? nslookup命令简洁,适合快速校验解析结果;dig输出完整解析链路、耗时、报文信息,适合深度排错。

  • 为什么需要配置双DNS? 单DNS存在单点故障,主DNS宕机后,备用DNS可自动接管,保证域名解析持续可用。

  • ICMP协议被禁止的影响? 无法ping通服务器,但不影响HTTP、TCP业务端口通信,需通过端口测试判断业务状态。

2.10 生产最佳实践总结
  • 所有生产服务器统一配置**阿里DNS(223.5.5.5)+谷歌DNS(8.8.8.8)**双冗余,杜绝DNS单点故障;

  • 域名解析异常优先清空DNS缓存、核查hosts配置,无需重启服务器;

  • 网络卡顿、间歇性超时,优先用mtr排查链路丢包节点,精准定位内网/外网故障;

  • 公网业务排查不依赖ping结果,最终以curl、端口连通性测试为准,规避ICMP拦截问题;

  • 测试环境hosts映射用完及时清理,避免上线后解析错乱影响业务。

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

3. 端口、连接查看【生产完整版+状态解析+排错避坑+面试精讲】

3.1 模块总述

端口与网络连接排查是服务端口冲突、端口占用、连接爆满、接口超时、TCP异常 故障的核心排查手段。Linux 主流两大工具:ss(系统原生、速度快、推荐首选)netstat(经典兼容、老牌运维常用),搭配 lsof 精准定位端口占用进程。本节完整补全监听端口、已建立连接、连接状态、进程绑定、端口扫描、高并发连接排查、生产坑点、面试核心考点,覆盖99%线上端口与连接异常场景。

3.2 核心前置知识:TCP连接状态(面试必考)

所有网络连接均遵循TCP状态机,线上卡顿、连接超时、服务拒绝连接,本质都是连接状态异常,核心状态如下:

  • LISTEN:监听状态,端口正常开启,等待客户端连接(服务正常启动标志)

  • ESTABLISHED:已建立有效连接,正在正常数据传输(业务活跃连接)

  • TIME_WAIT:连接主动关闭后等待释放状态,短期残留正常,数量暴涨会导致端口耗尽

  • CLOSE_WAIT :被动关闭未释放,严重异常,大量存在代表服务未主动关闭连接、连接泄漏

  • SYN_SENT/SYN_RECV:握手阶段异常,大概率网络拦截、端口未放行、服务过载

3.3 ss 命令(生产首选,替代netstat,高性能)

ss 是 Linux 新一代网络连接查看工具,无需遍历内核链表,查询速度远超netstat,高并发服务器排查首选,参数精简高效。

XML 复制代码
# ===================== ss 核心高频命令 =====================
# 1. 查看所有TCP监听端口(生产最常用)
ss -lntp
# 参数详解
# l:仅展示监听端口(服务端口)
# n:数字端口显示,不解析域名,排查更快
# t:仅筛选TCP连接(业务主流)
# p:展示对应绑定进程名/PID

# 2. 查看所有已建立TCP连接(排查在线用户、活跃请求)
ss -antp

# 3. 查看UDP端口/连接
ss -lnup

# 4. 查看所有socket连接(包含本地、域套接字)
ss -a

# 5. 统计各类连接状态数量(瓶颈排查核心)
ss -ant | awk '{print $1}' | sort | uniq -c

# 6. 筛选指定端口连接
ss -antp | grep :80
ss -antp | grep :443

# 7. 筛选指定状态连接(异常排查刚需)
ss -antp | grep TIME_WAIT
ss -antp | grep CLOSE_WAIT
3.4 netstat 命令(经典兼容,老旧系统适配)

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

XML 复制代码
# ===================== netstat 经典全套用法 =====================
# 1. 查看所有监听端口、绑定进程(端口排查标配)
netstat -lntp

# 2. 查看所有TCP全网连接
netstat -antp

# 3. 查看UDP端口与连接
netstat -lunp

# 4. 持续刷新连接状态(实时监控连接波动)
netstat -antp -c 1

# 5. 统计TCP连接状态,快速定位连接溢出瓶颈
netstat -ant | awk '{print $6}' | sort | uniq -c

# 6. 筛选指定端口、指定进程连接
netstat -antp | grep 80
netstat -antp | grep nginx
3.5 lsof 精准定位端口/文件占用(解决端口冲突神器)

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

XML 复制代码
# ===================== lsof 端口/进程排查 =====================
# 1. 精准查看80端口被哪个进程占用(端口冲突必备)
lsof -i :80

# 2. 查看所有网络端口占用情况
lsof -i

# 3. 筛选TCP/UDP端口占用
lsof -i TCP
lsof -i UDP

# 4. 查看指定进程所有占用端口与文件
lsof -p 进程PID

# 5. 递归查看目录被哪些进程占用(磁盘文件占用排查)
lsof +D /data/
3.6 端口连通性测试(telnet/nc/curl)

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

XML 复制代码
# ===================== 端口连通性全场景测试 =====================
# 1. telnet 单端口连通测试(简洁快速)
telnet 192.168.1.100 80     # 测试80端口是否通
# 连通成功显示Connected,失败显示Connection refused/超时

# 2. nc 全能端口测试(生产首选,功能最强)
nc -zv 192.168.1.100 80     # z:仅扫描不传输数据,v:可视化详情
nc -zv www.baidu.com 443

# 3. 批量端口扫描(区间扫描,排查端口开放情况)
nc -zv 192.168.1.100 1-1000

# 4. curl 业务端口测试(HTTP/HTTPS服务专属)
curl -I http://192.168.1.100:80   # 仅返回响应头,快速校验服务可用性
curl https://www.baidu.com
3.7 高频端口异常故障排查流程(生产万能)

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

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

XML 复制代码
ss -lntp                # 查看所有TCP监听端口(首选)
ss -antp                 # 查看所有已建立TCP连接
ss -ant | awk '{print $1}' | sort | uniq -c  # 统计连接状态
lsof -i :80              # 精准查询端口占用进程
nc -zv IP 端口           # 端口连通性测试
curl -I 域名/IP:端口     # 校验HTTP服务可用性
telnet IP 端口           # 基础端口通断测试
XML 复制代码
netstat -lntp           # 监听端口+进程
ss -lntp                # 替代netstat,更快
lsof -i :80             # 查看80端口占用
curl www.xxx.com        # 访问http接口
wget url                # 下载文件
telnet IP 端口          # 端口连通测试
nc -zv IP 1-1000        # 批量端口扫描
复制代码

4. 防火墙【全系列精讲:firewalld/iptables/ufw|生产配置+规则持久化+避坑面试】

4.1 模块总述

Linux防火墙是服务器网络安全的核心屏障,核心作用为端口放行、IP访问管控、流量拦截、安全防护,90%的外网端口无法访问、服务被恶意扫描、非法IP接入问题均与防火墙规则配置异常相关。当前主流防火墙分为三大体系:CentOS/Rocky主流的firewalld、通用底层iptables、Ubuntu专属ufw,本节全覆盖生产常用配置、持久化规则、启停管控、高危坑点、面试核心考点,适配所有Linux发行版运维场景。

4.2 firewalld 精讲(CentOS7+/Rocky 默认防火墙|生产首选)

firewalld为动态防火墙,支持规则实时生效、无需重启服务,具备区域规则、临时/永久配置、富规则管控特性,配置简单、兼容性强,是企业服务器主流防火墙方案。

4.2.1 基础启停与状态查看
XML 复制代码
# 查看防火墙运行状态
systemctl status firewalld

# 开机自启/关闭自启
systemctl enable firewalld
systemctl disable firewalld

# 启停重启服务
systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld

# 查看防火墙所有规则(核心排查命令)
firewall-cmd --list-all

# 仅查看已放行端口
firewall-cmd --list-ports

# 查看放行服务
firewall-cmd --list-services
4.2.2 核心端口放行与删除规则(生产高频)

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

XML 复制代码
# 1. 永久放行单个端口(TCP协议最常用)
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --add-port=22/tcp --permanent

# 2. 永久放行端口区间(批量开放端口)
firewall-cmd --add-port=3306-3308/tcp --permanent

# 3. 删除已放行端口(关闭端口访问权限)
firewall-cmd --remove-port=80/tcp --permanent

# 4. 放行系统预设服务(快捷配置,无需写端口)
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --remove-service=http --permanent

# 重点:所有永久规则配置后,必须重载生效
firewall-cmd --reload
4.2.3 高级富规则(精准IP管控|生产安全加固必备)

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

XML 复制代码
# 1. 仅允许指定IP访问22端口(SSH安全加固,禁止全网访问)
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' port protocol='tcp' port='22' accept"

# 2. 拒绝指定恶意IP访问所有端口
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='xxx.xxx.xxx.xxx' reject"

# 3. 允许指定IP访问3306数据库端口(禁止外网数据库暴露)
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='10.0.0.0/8' port protocol='tcp' port='3306' accept"

# 4. 删除指定富规则
firewall-cmd --permanent --remove-rich-rule="对应规则内容"

# 重载规则生效
firewall-cmd --reload
4.2.4 防火墙默认区域与全局配置
XML 复制代码
# 查看默认区域
firewall-cmd --get-default-zone

# 修改默认区域为public(生产标准)
firewall-cmd --set-default-zone=public

# 开启/关闭防火墙(全局拦截)
firewall-cmd --set-default-zone=block  # 拦截所有流量
firewall-cmd --set-default-zone=public # 恢复常规放行
4.3 iptables 精讲(底层通用防火墙|全发行版兼容)

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

4.3.1 基础查看与启停
XML 复制代码
# 安装iptables(新系统默认未装)
yum install iptables-services -y

# 关闭firewalld,启用iptables(二选一,避免冲突)
systemctl stop firewalld && systemctl disable firewalld
systemctl start iptables && systemctl enable iptables

# 查看所有规则(默认过滤表)
iptables -L -n

# 清空所有规则(调试专用,生产谨慎)
iptables -F
4.3.2 核心放行与拦截规则
XML 复制代码
# 1. 放行指定TCP端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 2. 放行指定IP所有访问权限
iptables -A INPUT -s 192.168.1.100/32 -j ACCEPT

# 3. 拒绝指定IP访问
iptables -A INPUT -s 恶意IP -j DROP

# 4. 放行本地回环网卡(必须配置,否则本地服务异常)
iptables -A INPUT -i lo -j ACCEPT

# 5. 允许已建立的连接持续通行(生产必备)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 6. 默认拒绝所有未放行端口(全局拦截)
iptables -P INPUT DROP
4.3.3 规则持久化(核心重点)

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

XML 复制代码
# CentOS/Rocky 保存规则
service iptables save

# 规则文件路径(永久存储)
/etc/sysconfig/iptables
4.4 ufw 精讲(Ubuntu/Debian 专属防火墙|简洁高效)

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

4.4.1 基础启停与状态
XML 复制代码
# 查看防火墙状态
ufw status

# 开启/关闭防火墙
ufw enable
ufw disable

# 重置所有规则(清空配置)
ufw reset
4.4.2 核心端口与IP管控规则
XML 复制代码
# 查看防火墙状态
ufw status

# 开启/关闭防火墙
ufw enable
ufw disable

# 重置所有规则(清空配置)
ufw reset
4.5 生产高频易错坑点(必避)
  • 规则不生效坑 :firewalld配置永久规则后,必须执行firewall-cmd --reload重载,否则规则不生效;临时规则重启服务直接失效。

  • 双防火墙冲突坑:firewalld和iptables、ufw和iptables不可同时启用,会导致规则冲突、端口拦截异常、服务访问错乱。

  • SSH端口误封致命坑:远程服务器操作防火墙时,务必先放行22端口再重载规则,否则直接断开远程连接,无法重新登录。

  • 规则持久化误区:iptables/ufw默认规则临时生效,未手动保存的配置,重启服务器全部丢失。

  • 全局拦截风险:设置默认拒绝所有流量后,必须提前放行22、业务端口,否则服务器彻底断连。

  • 云服务器双重防护坑 :阿里云/腾讯云服务器,防火墙规则需配合云平台安全组,仅配置系统防火墙、未放行安全组端口,依然无法外网访问。

4.6 面试高频核心考点
  • firewalld临时规则和永久规则区别? 临时规则实时生效、重启服务/服务器失效;永久规则写入配置文件,需reload重载,永久保存。

  • firewalld和iptables的关系? iptables是内核底层防火墙框架,firewalld是上层动态封装工具,简化配置、支持动态更新,无需重启服务。

  • 为什么端口监听正常但外网无法访问? 大概率是防火墙未放行端口、云服务器安全组未开放、默认策略拦截流量。

  • 富规则的作用? 实现精准IP网段管控,区别全局端口放行,仅授权指定IP访问敏感端口(3306、22),提升服务器安全性。

4.7 生产最佳实践总结
  • CentOS/Rocky系列统一使用firewalld,配置简单、动态生效、稳定性强,优先放弃原生iptables复杂配置;

  • 所有远程服务器优先加固SSH安全,仅放行内网固定IP访问22端口,禁止全网开放;

  • 数据库、Redis等敏感服务端口,禁止全局放行,必须通过防火墙富规则/IP白名单管控;

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

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

XML 复制代码
# ========== firewalld(CentOS/Rocky) ==========
firewall-cmd --list-all                          # 查看所有规则
firewall-cmd --add-port=80/tcp --permanent       # 永久放行端口
firewall-cmd --add-service=http --permanent      # 放行预设服务
firewall-cmd --permanent --add-rich-rule=xxx     # 配置IP白名单
firewall-cmd --reload                            # 重载规则生效

# ========== iptables(通用底层) ==========
iptables -L -n                                   # 查看规则
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    # 放行端口
service iptables save                            # 持久化规则

# ========== ufw(Ubuntu/Debian) ==========
ufw status                                       # 查看状态
ufw allow 80/tcp                                 # 放行端口
ufw allow from 192.168.1.0/24                    # 放行网段
XML 复制代码
# CentOS7+/Rocky firewalld
firewall-cmd --list-ports
firewall-cmd --add-port=80/tcp --permanent
# Ubuntu ufw
ufw allow 22
# iptables底层
iptables -L -n

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

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

1.1 模块总述

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

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

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

XML 复制代码
# ========== 1. 整体磁盘使用率排查(日常巡检首选) ==========
df -h                  # 人性化显示所有分区挂载、使用率、剩余空间、挂载点
df -i                  # 查看分区inode使用率(inode爆满导致磁盘有空间无法写入)
df -Th                 # 显示分区文件系统类型(xfs/ext4)+ 使用率

# ========== 2. 文件夹大小排查(磁盘爆满定位) ==========
du -sh *               # 查看当前目录所有文件夹/文件总大小,快速定位大文件
du -h --max-depth=1    # 只统计一级目录,简洁高效
du -sh /var/log/       # 精准查看指定目录占用大小

# ========== 3. 磁盘硬件与分区列表查看 ==========
lsblk                  # 简洁查看所有磁盘、分区、挂载点、磁盘大小(新手首选)
fdisk -l               # 详细列出所有磁盘设备、分区类型、扇区、大小、分区信息
blkid                  # 查看所有分区UUID、文件系统类型(永久挂载核心参数)

# 磁盘设备命名规范
# /dev/sda 第一块磁盘、/dev/sdb 第二块磁盘
# /dev/sda1 第一磁盘第一个分区、sda2第二个分区
1.3 磁盘分区创建(fdisk实操,MBR分区)

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

XML 复制代码
# 1. 进入磁盘分区编辑界面(以/dev/sdb新磁盘为例)
fdisk /dev/sdb

# 2. 分区交互操作指令(核心必背)
n           # 新建分区
p           # 选择主分区(默认首选)
1           # 分区编号1
回车默认     # 起始扇区默认
回车默认     # 结束扇区默认(占用整块磁盘)
w           # 保存分区并退出

# 3. 刷新分区表(无需重启生效)
partprobe /dev/sdb

# 4. 核查新分区是否创建成功
lsblk /dev/sdb
1.4 磁盘格式化(文件系统创建)

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

XML 复制代码
# ========== 1. xfs格式化(CentOS/Rocky默认,大文件高性能) ==========
mkfs.xfs /dev/sdb1

# ========== 2. ext4格式化(通用稳定,兼容性最强) ==========
mkfs.ext4 /dev/sdb1

# ========== 3. 格式化核心参数 ==========
-f         # 强制格式化(覆盖原有文件系统,谨慎使用)
-L 磁盘名  # 自定义磁盘标签,便于识别

# 格式化后核查文件系统类型
blkid /dev/sdb1
1.5 临时挂载与卸载(临时生效,重启失效)

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

XML 复制代码
# 1. 创建挂载目录(挂载点必须是空目录,专属磁盘挂载)
mkdir -p /data

# 2. 临时挂载分区
mount /dev/sdb1 /data

# 3. 核查挂载是否成功
df -h
lsblk

# 4. 磁盘卸载(迁移/下线磁盘必备)
umount /data          # 通过挂载点卸载(推荐,不易出错)
umount /dev/sdb1      # 通过分区设备卸载

# 卸载报错解决:设备忙,先查询占用进程并结束
fuser -m /data
kill -9 占用PID
1.6 永久挂载配置(/etc/fstab,生产核心)

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

1.6.1 fstab文件格式详解

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

XML 复制代码
# 第一步:获取分区UUID(永久挂载唯一标识)
blkid /dev/sdb1

# 第二步:编辑fstab配置文件
vim /etc/fstab

# 两种挂载写法(生产优先UUID写法)
# 写法1:UUID永久挂载(推荐,盘符变更不影响)
UUID=xxxx-xxxx-xxxx-xxxx  /data  xfs  defaults  0  0

# 写法2:设备路径挂载(不推荐,多磁盘易盘符错乱)
/dev/sdb1  /data  xfs  defaults  0  0

# 字段参数详解
# defaults:默认挂载参数(读写、自动挂载、权限兼容)
# 第一个0:不备份磁盘数据
# 第二个0:开机不执行磁盘自检(生产默认配置)

# 第三步:加载fstab配置,测试挂载(关键!避免开机崩盘)
mount -a

# 第四步:核查永久挂载生效
df -h
1.7 核心挂载参数与进阶配置
XML 复制代码
# 常用进阶挂载参数(写入fstab替换defaults)
rw        # 读写权限(默认)
ro        # 只读挂载(数据防篡改,备份磁盘专用)
noauto    # 开机不自动挂载,手动mount生效
exec      # 允许执行二进制程序
noexec    # 禁止执行程序(数据盘安全加固)

# 示例:只读永久挂载
UUID=xxx  /backup  xfs  ro  0  0
1.8 高频故障排查与生产致命坑点
  • fstab语法错误开机崩盘坑 :修改/etc/fstab后必须执行mount -a校验,语法错误会导致服务器开机无法进入系统、进入急救模式。

  • 挂载点非空目录坑 :挂载目录存在原有文件,挂载后原有文件会临时隐藏,卸载磁盘后恢复,生产禁止在有数据目录直接挂载。

  • 磁盘盘符错乱坑 :服务器增减磁盘会导致sda/sdb盘符变更,永久挂载严禁使用设备路径,必须用UUID。

  • inode爆满误区 :磁盘空间充足但无法写入,大概率是inode耗尽,通过df -i排查,多为大量小文件、日志碎片导致。

  • 卸载设备忙报错:目录被进程占用、终端处于挂载目录内,需退出目录、结束占用进程后再卸载。

  • 重复挂载隐患:同一分区重复挂载会导致数据错乱、文件丢失,挂载前先核查挂载状态。

1.9 面试高频核心考点
  • UUID和设备路径挂载的区别? 设备路径(/dev/sdb1)会随磁盘增减变更,易导致挂载失效;UUID是分区唯一固定标识,不受磁盘顺序影响,稳定性更强,生产首选。

  • fstab两个0的作用? 第一个0:dump备份开关,关闭备份;第二个0:fsck磁盘自检开关,业务盘无需开机自检,避免开机卡顿。

  • 磁盘空间充足但无法写入的原因? ①inode耗尽;②目录权限不足;③磁盘只读挂载;④文件系统损坏。

  • mount -a的作用? 自动加载/etc/fstab所有挂载配置,校验语法错误、生效新挂载,是修改fstab后的必执行命令。

  • 临时挂载和永久挂载区别? 临时挂载重启失效,适用于临时调试;永久挂载写入fstab,开机自动生效,适配生产业务磁盘。

1.10 生产最佳实践总结
  • 所有业务数据磁盘统一采用UUID+defaults参数永久挂载,杜绝盘符错乱导致的挂载失效;

  • 修改fstab后强制执行mount -a校验,规避语法错误引发开机故障;

  • 数据盘、备份盘单独分区挂载,禁止数据存储在系统盘(/),避免系统盘爆满宕机;

  • 只读数据盘配置ro只读挂载参数,防止误删、篡改数据,提升数据安全性;

  • 磁盘巡检同时核查df -h磁盘空间与df -iinode使用率,双重规避磁盘写入异常。

1.11 磁盘挂载完整生产流程(标准实操)
  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 核查挂载成功,完成磁盘上线。

XML 复制代码
df -h               # 磁盘分区使用
du -sh *            # 当前目录各文件夹大小
du -h --max-depth=1
fdisk -l            # 磁盘分区列表
mkfs.xfs /dev/sdb1  # 格式化分区
mount /dev/sdb1 /data
umount /data
blkid               # 查看磁盘UUID
/etc/fstab          # 开机自动挂载配置文件

2. 压缩解压全类型【生产完整版+全格式覆盖+参数精讲+避坑】

2.1 模块总述

Linux 日常运维、日志归档、文件迁移、备份场景中,压缩解压是高频刚需操作,系统主流压缩格式包含 tar.gz、tar.bz2、tar.xz、zip、gz、bz2、xz、7z 等。不同格式压缩率、压缩速度、兼容性差异极大,本节全覆盖所有生产常用格式,补全精准参数、解压规则、批量操作、易错坑点、场景选型,适配99%线上文件压缩归档场景。

2.2 核心前置参数(tar命令通用必背)

tar 是Linux打包压缩核心命令,所有打包操作通用核心参数,无系统兼容性差异:

  • c:创建新压缩包(压缩必备)

  • x:解压释放压缩包(解压必备)

  • v:可视化过程,显示压缩/解压文件明细(调试常用)

  • f:指定压缩包文件名(必须放在所有参数最后)

  • z:调用gzip算法(.gz格式)

  • j:调用bzip2算法(.bz2格式)

  • J:调用xz算法(.xz格式)

  • p:保留文件原有权限、属性、时间戳(生产备份必备)

  • C:指定解压目标目录(核心高频参数)

  • --exclude:压缩时排除指定文件/目录(批量归档刚需)

2.3 主流打包压缩格式(目录/多文件专用,生产首选)

tar 系列支持先打包、后压缩,可处理多文件、目录,是服务器归档备份标准格式。

XML 复制代码
# ===================== 1. tar.gz 格式【全网通用、速度快、兼容性最强】 =====================
# 压缩:打包并压缩目录/文件
tar zcvf test.tar.gz test_dir/      # 压缩整个目录
tar zcvf file.tar.gz file1.txt file2.txt  # 压缩多个单独文件
tar zcvf bak.tar.gz /data/ --exclude=*.log  # 压缩并排除所有日志文件

# 解压:默认解压到当前目录
tar zxvf test.tar.gz
# 解压到指定目录(生产高频,避免混乱)
tar zxvf test.tar.gz -C /tmp/
# 解压并保留原文件权限属性
tar zxvp test.tar.gz -C /data/

# ===================== 2. tar.bz2 格式【压缩率更高、速度稍慢】 =====================
# 适合大文件归档,压缩体积比tar.gz更小
tar jcvf test.tar.bz2 test_dir/     # 压缩
tar jxvf test.tar.bz2 -C /backup/   # 解压到指定目录

# ===================== 3. tar.xz 格式【超高压缩率、超大文件首选】 =====================
# 压缩率最高,耗时最长,适合静态大文件、长期备份归档
tar Jcvf big_file.tar.xz big_dir/
tar Jxvf big_file.tar.xz

# ===================== 4. 查看压缩包内容(不解压预览,避免浪费磁盘) =====================
tar ztvf test.tar.gz    # 查看gz压缩包文件列表
tar jtvf test.tar.bz2   # 查看bz2压缩包文件列表
tar Jtvf test.tar.xz    # 查看xz压缩包文件列表
2.4 单文件压缩格式(无打包,仅压缩单个文件)

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

XML 复制代码
# ===================== 1. gzip / .gz 单文件压缩 =====================
gzip test.txt          # 压缩:生成test.txt.gz,原文件删除
gzip -c test.txt > test.txt.gz  # 保留原文件压缩(核心实用技巧)
gunzip test.txt.gz     # 解压.gz文件,解压后压缩包删除

# ===================== 2. bzip2 / .bz2 单文件压缩 =====================
bzip2 test.txt         # 压缩生成test.txt.bz2
bunzip2 test.txt.bz2   # 解压bz2文件

# ===================== 3. xz / .xz 单文件压缩 =====================
xz test.txt            # 超高压缩率压缩
unxz test.txt.xz       # 解压xz文件
2.5 zip/unzip 格式【跨平台兼容、Windows互通首选】

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

XML 复制代码
# 需提前安装:yum install zip unzip -y / apt install zip unzip -y

# 1. 压缩操作
zip test.zip file1.txt file2.txt  # 压缩多个文件
zip -r dir.zip test_dir/          # 递归压缩整个目录(必须加-r)
zip -r bak.zip /data/ -x "*.log"  # 压缩目录并排除指定文件

# 2. 解压操作
unzip test.zip                    # 解压到当前目录
unzip dir.zip -d /tmp/            # 解压到指定目录(-d 指定路径)
unzip -l test.zip                 # 不解压,仅预览压缩包内容
unzip -o test.zip                 # 强制覆盖解压,不交互式询问

# 3. 解压乱码解决(Windows压缩包Linux解压中文乱码)
unzip -O GBK test.zip
2.6 7z 超高压缩率格式【超大文件专属】

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

XML 复制代码
# 安装命令:yum install p7zip -y / apt install p7zip-full -y

# 压缩
7z a test.7z test_dir/ file.txt   # a:添加文件到压缩包

# 解压
7z x test.7z                      # 完整解压,保留目录结构

# 预览内容
7z l test.7z
2.7 格式选型标准(生产规范)
  • 日常快速压缩/日志归档 :优先 tar.gz,速度快、全平台兼容、无解压门槛

  • 大文件长期备份 :选择 tar.xz,压缩率最高,节省磁盘空间

  • 跨Windows传输文件 :统一使用 zip,避免格式不兼容、乱码问题

  • 超大容量文件归档 :使用 7z,极致压缩率,减少存储占用

  • 单临时文件压缩 :使用 gzip,操作简洁、速度最快

2.8 高频易错坑点与生产避坑
  • tar参数顺序坑f 参数必须放在最后,tar zcvf test.tar.gz 正确,tar zcvftest.tar.gz 报错。

  • 单文件格式误区:gzip/bzip2/xz 不支持目录压缩,压缩目录会报错,目录必须用tar系列命令。

  • 解压覆盖风险:解压默认覆盖同名文件,生产重要文件解压前先备份,或用交互式确认。

  • zip目录压缩必加-r:不加-r仅压缩目录空壳,不会递归压缩目录内文件,导致压缩包为空。

  • 解压路径混乱坑:禁止直接在根目录解压压缩包,极易覆盖系统文件,务必用 -C 指定解压目录。

  • 原文件丢失坑:gzip等单文件压缩默认删除原文件,需要保留原文件必须加 -c 参数。

2.9 生产高频万能组合命令
XML 复制代码
# 1. 日志归档标准命令(排除无用日志,压缩备份)
tar zcvf log_bak_$(date +%Y%m%d).tar.gz /var/log/ --exclude=*.tmp --exclude=old_log/

# 2. 解压到指定目录并覆盖旧文件
tar zxvf app.tar.gz -C /usr/local/

# 3. 批量解压当前目录所有tar.gz文件
for i in *.tar.gz;do tar zxvf $i;done

# 4. 保留原文件单文件压缩
gzip -c data.txt > data.txt.gz

# 5. 跨平台安全解压(解决中文乱码)
unzip -O GBK windows_file.zip -d ./file_bak/
XML 复制代码
# tar(最常用)
tar zcvf 打包.tar.gz 目录   # 压缩gz
tar zxvf 打包.tar.gz        # 解压gz
tar jcvf 打包.tar.bz2       # bz2压缩
tar Jcvf 打包.tar.xz        # xz压缩
# zip/unzip
zip -r test.zip dir
unzip test.zip
# gz/bz2单文件
gzip file
gunzip file.gz

八、软件包管理(分发行版|完整版生产体系+避坑+面试精讲)

软件包管理是Linux软件安装、升级、卸载、溯源、依赖修复的核心能力,主流分为RHEL/CentOS/Rocky系(yum/dnf/rpm) 和**Debian/Ubuntu系(apt/dpkg)**两大体系。生产运维必须区分发行版特性,掌握源配置、依赖处理、离线安装、故障排错、版本锁定等核心场景,规避依赖冲突、源失效、软件残留等高频问题。

1. RHEL/CentOS/Rocky 软件管理(yum/dnf + rpm)

CentOS7及以下默认使用yum包管理器,CentOS8+/Rocky9+默认使用dnf(yum升级版,命令完全兼容,性能更强、依赖解析更精准),rpm为底层原生包工具,负责本地包解析、安装校验。

1.1 yum/dnf 在线包管理(生产主力)

支持在线下载、自动解析依赖、批量管理软件,是线上服务器软件安装首选,dnf优化了yum依赖卡死、解析缓慢的问题。

XML 复制代码
# ========== 1. 软件安装(核心高频) ==========
yum install nginx -y                  # 在线安装软件,自动解决依赖
dnf install mysql-server -y           # dnf等价yum,新版系统首选
yum install nginx=1.20.1 -y           # 指定版本安装(规避新版本兼容问题)
yum groupinstall "Development Tools" -y # 安装开发工具组(gcc/make等编译工具)

# ========== 2. 软件卸载(安全卸载) ==========
yum remove nginx -y                   # 卸载软件,保留依赖文件(安全,不影响系统依赖)
yum erase nginx -y                    # 彻底卸载软件+移除无用依赖(干净卸载)

# ========== 3. 软件查询与检索 ==========
yum list                              # 列出所有可安装/已安装软件包
yum list installed                    # 仅查看当前系统已安装所有软件
yum list updates                      # 查看可升级的软件包
yum search docker                     # 模糊检索软件包名(未知精准包名必备)
yum info nginx                        # 查看软件详细信息(版本、用途、依赖、仓库来源)

# ========== 4. 软件升级与版本管理 ==========
yum update -y                         # 全局更新所有可升级软件(谨慎生产执行,避免版本兼容问题)
yum update nginx -y                   # 单独升级指定软件
yum check-update                      # 检查可更新软件,不执行升级

# ========== 5. 仓库缓存管理 ==========
yum clean all                         # 清空本地yum缓存(源更新、缓存异常必执行)
yum makecache                         # 重新生成仓库缓存,加速软件检索

# ========== 6. 依赖修复与故障处理 ==========
yum deplist nginx                     # 查看软件所有依赖包
yum repolist                          # 查看当前生效的软件仓库数量与状态
yum check                             # 检测系统软件依赖是否破损、冲突

# ========== 7. 软件版本锁定(生产核心避坑) ==========
yum install yum-plugin-versionlock -y # 安装版本锁定插件
yum versionlock nginx                 # 锁定nginx当前版本,禁止自动升级
yum versionlock delete nginx          # 解锁版本,允许升级
yum versionlock list                  # 查看所有锁定版本软件
1.2 rpm 底层本地包管理(离线安装+包溯源)

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

XML 复制代码
# ========== 1. 本地离线安装 ==========
rpm -ivh xxx.rpm                      # 安装本地rpm包(i安装 v可视化 h进度条)
rpm -ivh --nodeps xxx.rpm             # 强制忽略依赖安装(生产慎用,易导致软件无法启动)
rpm -ivh --force xxx.rpm              # 强制覆盖安装(版本降级、重装破损包使用)

# ========== 2. 软件卸载 ==========
rpm -e nginx                          # 卸载指定软件(仅包名,无需后缀)
rpm -e --nodeps nginx                 # 强制卸载,忽略依赖关联(高危,慎操作)

# ========== 3. 软件查询与溯源(排错必备) ==========
rpm -qa                               # 查询系统所有已安装rpm包
rpm -qa | grep mysql                  # 精准检索指定软件是否安装
rpm -ql nginx                         # 查看软件安装目录、所有生成文件(配置/二进制/日志)
rpm -qi nginx                         # 查看软件详细信息(版本、发布时间、开发者)
rpm -qc nginx                         # 仅查看软件配置文件路径(修改配置必备)
rpm -qd nginx                         # 查看软件帮助文档、手册路径
rpm -qf /usr/sbin/nginx               # 根据文件/命令反查所属软件包(未知文件溯源核心)

# ========== 4. 包校验与修复 ==========
rpm -V nginx                          # 校验软件文件完整性,检测是否被篡改、文件丢失
rpm --rebuilddb                       # 重建rpm数据库(包数据库破损、查询异常修复)
1.3 YUM源配置与替换(生产刚需)

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

XML 复制代码
# 1. 备份原有默认源
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/

# 2. 下载阿里云CentOS官方源(CentOS7示例)
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

# 3. 下载epel扩展源(补充nginx/redis/mysql等第三方软件包)
yum install epel-release -y

# 4. 刷新缓存生效
yum clean all && yum makecache

# 5. 查看生效仓库
yum repolist enabled
1.4 高频易错坑点与生产避坑
  • rpm无依赖自动修复坑 :rpm安装仅本地生效,缺失依赖直接报错,离线安装需提前下载所有依赖包,优先用yum/dnf本地安装(yum localinstall xxx.rpm自动解依赖)。

  • yum update全局升级风险:生产服务器禁止随意执行yum update,内核、系统组件升级可能导致服务兼容失效、开机异常,仅单独升级业务软件。

  • 源失效缓存残留坑:更换yum源后必须清空旧缓存,否则会读取失效源配置,导致下载失败、包找不到。

  • --nodeps强制操作高危坑:强制忽略依赖安装/卸载,易导致系统依赖破损、软件启动失败、系统异常,仅紧急排错临时使用。

  • 软件残留坑:yum remove仅删主程序,残留配置文件、日志文件,彻底清理需用yum erase或手动清理残留目录。

2. Debian/Ubuntu 软件管理(apt + dpkg)

Ubuntu/Debian系默认使用apt作为主流在线包管理器(整合apt-get/apt-cache功能,命令更简洁),dpkg为底层本地包工具,对应RHEL系rpm,适配Debian全系服务器、桌面系统。

2.1 apt 在线包管理(生产首选)
XML 复制代码
# ========== 1. 仓库缓存更新(前置必备) ==========
apt update                            # 更新软件仓库索引缓存(不升级软件,安装前必执行)
apt upgrade -y                        # 升级所有可更新软件(安全升级,不卸载依赖)
apt full-upgrade -y                   # 完整升级,可增减依赖(新版适配升级,生产谨慎)

# ========== 2. 软件安装 ==========
apt install nginx -y                  # 在线安装软件,自动解析依赖
apt install nginx=1.18.0-0ubuntu1.3 -y # 指定版本安装
apt install -y gcc make git           # 批量安装多个软件

# ========== 3. 软件卸载与清理 ==========
apt remove nginx -y                   # 卸载软件,保留配置文件
apt purge nginx -y                    # 彻底卸载+删除所有配置、残留文件(干净清理)
apt autoremove -y                     # 自动清理系统无用冗余依赖(释放磁盘空间)

# ========== 4. 软件查询与检索 ==========
apt list                              # 列出所有软件包
apt list --installed                  # 查看已安装软件
apt list --upgradable                 # 查看可升级软件
apt search mysql                      # 检索软件包
apt show nginx                        # 查看软件详细信息、版本、依赖

# ========== 5. 故障修复 ==========
apt -f install                        # 强制修复破损依赖、解决依赖缺失报错
apt clean                             # 清理apt缓存包
apt autoclean                         # 清理过期缓存安装包
2.2 dpkg 底层本地包管理(离线安装)

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

XML 复制代码
# ========== 1. 离线安装deb包 ==========
dpkg -i xxx.deb                       # 安装本地deb安装包
# 依赖报错后执行修复:apt -f install

# ========== 2. 软件卸载 ==========
dpkg -r nginx                         # 卸载软件,保留配置
dpkg -P nginx                         # 彻底卸载+清空配置

# ========== 3. 软件查询溯源 ==========
dpkg -l                               # 列出所有已安装软件
dpkg -l | grep docker                 # 检索指定软件
dpkg -L nginx                         # 查看软件所有安装文件、目录
dpkg -s nginx                         # 查看软件状态、版本信息
dpkg -S /usr/bin/nginx                # 根据文件反查所属软件包
2.3 Ubuntu源配置(国内镜像加速)

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

XML 复制代码
# 1. 备份原有源文件
cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 2. 写入阿里云Ubuntu源(20.04示例)
echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse" > /etc/apt/sources.list

# 3. 更新缓存生效
apt update
2.4 Ubuntu体系高频避坑要点
  • apt update与upgrade区别:update仅更新仓库索引,不升级软件;upgrade执行软件升级,日常安装软件前必须先update。

  • dpkg依赖报错必修复 :dpkg离线安装缺失依赖时,必须执行apt -f install自动补全依赖,否则软件处于破损状态。

  • 残留依赖堆积坑 :Ubuntu长期操作会产生大量无用依赖,需定期执行apt autoremove清理,避免磁盘占用过高。

  • purge与remove区别:remove仅删除程序主体,purge清空所有配置日志,卸载废弃软件优先用purge彻底清理。

3. 两大发行版包管理核心对比(面试高频)

  • 包格式差异 :RHEL系专属 .rpm 包,Ubuntu系专属 .deb 包,互不兼容。

  • 在线工具:RHEL用yum/dnf,Ubuntu用apt,均支持自动依赖解析。

  • 底层工具:RHEL用rpm,Ubuntu用dpkg,均为本地离线工具、无自动依赖修复。

  • 仓库路径 :YUM源 /etc/yum.repos.d/,APT源 /etc/apt/sources.list

  • 清理命令:YUM用clean all,APT用clean/autoclean。

4. 生产通用最佳实践

  • 线上服务器统一使用**在线包管理器(yum/apt)**安装软件,自动处理依赖,规避底层包安装报错。

  • 生产环境禁止随意全局升级系统软件,仅针对性升级业务组件,锁定稳定版本。

  • 离线服务器优先使用「在线机下载依赖包+本地批量安装」,不强制忽略依赖。

  • 软件卸载优先彻底清理残留文件,避免冗余配置、无效依赖堆积引发故障。

  • 所有服务器默认替换国内镜像源,提升下载速度、解决官方源超时、包缺失问题。

九、系统信息、日志、时间

1. 硬件系统信息【完整版|全硬件检测|生产排查+硬件参数溯源】

1.1 模块总述

硬件系统信息查询是服务器硬件巡检、故障排查、配置核验、性能评估的核心能力。运维日常需精准获取CPU、内存、磁盘、网卡、主板、BIOS、设备总线、硬件温度等全维度信息,区分系统虚拟信息与物理硬件信息,规避云服务器、虚拟机硬件识别误区,适配物理机、虚拟机、云服务器全场景。本节补全所有生产高频硬件查询命令、核心参数、解读要点、排查场景与避坑细则。

1.2 系统内核与发行版基础信息

用于快速核验系统版本、内核架构、系统运行时长,是硬件适配、软件兼容排查的前置操作。

XML 复制代码
# 1. 内核与架构信息
uname -r                # 查看内核版本(软件兼容适配核心)
uname -a                # 完整系统信息:内核、架构、系统时间、主机名
uname -m                # 查看系统架构(x86_64/arm64,软件安装适配必备)

# 2. 发行版详细版本
cat /etc/os-release     # 完整系统发行版、版本号、ID、适配平台
lsb_release -a          # 简洁查看系统版本(通用全发行版)

# 3. 系统运行时长与负载
uptime                  # 查看系统开机时长、1/5/15分钟系统负载
1.3 CPU硬件全维度查询(核心算力核验)

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

XML 复制代码
# 1. CPU完整硬件信息(生产核心)
lscpu                   # 结构化展示CPU所有参数,可读性极强

# 关键参数解读(面试/运维必懂)
# CPU(s):总逻辑线程数
# Core(s) per socket:单颗CPU物理核心数
# Socket(s):物理CPU颗数
# Thread(s) per core:单核心线程数(超线程开启为2,关闭为1)
# CPU MHz:CPU基准主频
# L1/L2/L3 cache:各级缓存大小

# 2. 简洁查看CPU型号
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

# 3. 统计物理CPU总数、物理核心数、逻辑核心数
cat /proc/cpuinfo | grep physical | uniq -c      # 物理CPU颗数
cat /proc/cpuinfo | grep core | uniq -c         # 物理核心总数
nproc                                            # 快速查看逻辑核心数(进程配置核心适配)
1.4 内存硬件精准查询(容量/频率/插槽)

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

XML 复制代码
# 1. 内存整体使用与硬件概况
lsmem                   # 结构化展示物理内存、内存分段、可用内存
free -h                 # 人性化展示内存、缓存、交换分区使用情况

# 2. 精准物理内存硬件信息(需安装dmidecode)
yum install dmidecode -y || apt install dmidecode -y
dmidecode -t memory     # 查看内存型号、频率、容量、插槽、厂商

# 3. 简洁统计总物理内存
cat /proc/meminfo | grep MemTotal

# 4. 交换分区查询
swapon -s               # 查看交换分区大小、使用状态、挂载设备
1.5 磁盘硬件与设备信息(含分区/型号/转速)

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

XML 复制代码
# 1. 磁盘设备整体列表(简洁直观)
lsblk                   # 查看所有磁盘、分区、挂载点、磁盘大小、类型

# 2. 详细磁盘硬件信息(型号、厂商、序列号)
fdisk -l                # 全量磁盘分区、设备、容量、扇区信息
blkid                   # 查看分区UUID、文件系统、设备类型

# 3. 磁盘硬件精准参数(需安装hdparm)
yum install hdparm -y || apt install hdparm -y
hdparm -i /dev/sda      # 查看磁盘型号、序列号、接口、转速、缓存

# 4. 磁盘IO读写性能检测
hdparm -Tt /dev/sda     # 检测磁盘缓存读取、磁盘实际读取速度
1.6 网卡与网络硬件信息

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

XML 复制代码
# 1. 网卡设备全量信息
lspci | grep -i net     # 查看网卡型号、厂商、总线编号

# 2. 网卡基础状态与MAC地址
ip addr                 # 查看所有网卡IP、MAC、网卡状态
ifconfig -a             # 查看所有网卡(含未启用网卡)

# 3. 网卡带宽与硬件参数
ethtool eth0            # 查看网卡速率、双工模式、硬件参数、链路状态
1.7 主板、BIOS、总线硬件信息

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

XML 复制代码
# 主板、BIOS、整机硬件信息
dmidecode -t system     # 查看主板型号、服务器厂商、出厂序列号
dmidecode -t bios       # 查看BIOS版本、发布时间、固件信息
lspci                   # 查看所有PCI总线设备(显卡、声卡、外设硬件)
1.8 硬件温度与功耗监控(物理机专属)

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

XML 复制代码
# 安装温度监控工具
yum install lm-sensors -y || apt install lm-sensors -y
sensors                 # 查看CPU、主板、硬盘实时温度、风扇转速
1.9 高频易错坑点与场景适配
  • 虚拟机硬件误区 :云服务器/虚拟机的CPU、内存、磁盘均为虚拟化硬件,dmidecodesensors 无法查询真实物理硬件参数,仅物理机生效。

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

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

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

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

1.10 生产硬件巡检标准命令组合
XML 复制代码
# 服务器硬件一键巡检组合
echo "=== 系统版本 ===" && cat /etc/os-release
echo "=== CPU信息 ===" && lscpu | grep -E "CPU\(s\)|Core|MHz"
echo "=== 内存信息 ===" && free -h && lsmem
echo "=== 磁盘信息 ===" && lsblk && df -h
echo "=== 网卡信息 ===" && ip addr && ethtool eth0
echo "=== 系统运行状态 ===" && uptime
XML 复制代码
uname -r            # 内核版本
uname -a            # 完整系统信息
cat /etc/os-release # 发行版版本
lscpu               # CPU信息
lsmem               # 内存硬件
lsblk               # 磁盘硬件
lspci               # PCI硬件

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

2.1 模块总述

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

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

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

XML 复制代码
# 1. 查看系统当前时间、日期、时区
date                        # 输出完整系统时间、时区、星期
date +"%Y-%m-%d %H:%M:%S"   # 自定义格式化输出标准时间(日志、脚本刚需)
date +%Y                    # 单独获取年份
date +%m                    # 单独获取月份
date +%d                    # 单独获取日期
date +%H:%M:%S              # 单独获取时分秒

# 2. 查看系统时区、时间同步全状态(生产核心)
timedatectl                 # 完整信息:时区、系统时间、硬件时间、NTP同步状态
ls /etc/localtime           # 查看时区软链接指向,确认当前生效时区

# 3. 查看所有可用时区
timedatectl list-timezones                  # 列出系统全部时区
timedatectl list-timezones | grep Shanghai  # 精准筛选亚洲上海时区
2.3 时区配置与切换(生产统一北京时间)

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

XML 复制代码
# 方式一:timedatectl 标准配置(CentOS7+/Ubuntu16+ 推荐,一键生效)
timedatectl set-timezone Asia/Shanghai

# 方式二:软链接强制配置(兼容所有Linux发行版,通用无报错)
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 配置后核验时区是否生效
date
timedatectl
2.4 系统时间手动校准(临时纠错)

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

XML 复制代码
# 1. 手动设置完整时间(年月日时分秒)
date -s "2026-06-29 10:30:00"

# 2. 单独设置日期(时间不变)
date -s "2026-06-29"

# 3. 单独设置时分秒(日期不变)
date -s "10:30:00"

# 4. 系统时间写入硬件时间(核心!防止重启时间重置)
hwclock -w                  # 将系统时间同步写入主板硬件时钟
hwclock                     # 查看硬件时间是否同步成功
2.5 网络NTP时间自动同步(生产核心,永久校准)

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

2.5.1 chrony 时间同步(新版系统默认,推荐)
XML 复制代码
# 1. 查看chrony服务状态
systemctl status chronyd

# 2. 开启开机自启、启动服务
systemctl start chronyd
systemctl enable chronyd

# 3. 查看时间同步溯源、校准状态
chronyc tracking            # 查看当前时间同步源、偏差值、同步状态
chronyc sources -v         # 详细查看所有NTP同步服务器、同步优先级

# 4. 手动强制立即同步时间
chronyc makestep
2.5.2 ntpdate 临时同步(老旧系统/临时校准)
XML 复制代码
# 安装ntp工具(无则执行)
yum install ntpdate -y || apt install ntpdate -y

# 阿里云NTP公共服务器同步(国内速度最快、稳定)
ntpdate ntp.aliyun.com
ntpdate time1.aliyun.com

# 腾讯云公共NTP服务器(备选)
ntpdate time1.tencent.com
2.5.3 固定NTP源配置(永久稳定同步)

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

XML 复制代码
# chrony配置文件:/etc/chrony.conf
# 注释原有国外源,添加国内阿里源
server ntp.aliyun.com iburst
server time1.aliyun.com iburst
server time2.aliyun.com iburst

# 重启服务生效
systemctl restart chronyd
2.6 硬件时间与系统时间联动规则
  • 系统时间:Linux系统运行时的内存时间,重启后失效,依赖硬件时间初始化。

  • 硬件时间:主板BIOS固化时间,独立于系统运行,断电不丢失。

  • 联动命令hwclock -w 系统时间写入硬件;hwclock -s 硬件时间覆盖系统时间。

2.7 高频生产故障与避坑细则
  • 时间重启还原坑:仅用date修改系统时间,未执行hwclock -w写入硬件,服务器重启后时间恢复错误,生产修改时间必须同步写入硬件。

  • 集群时区不一致故障:分布式集群、微服务、数据库集群,节点时区/时间偏差会导致数据同步失败、事务异常,所有节点必须统一北京时间+开启NTP同步。

  • 定时任务时间错位:crontab定时任务依赖系统时间,时间偏差会导致任务提前/延迟执行、漏执行,是定时任务失效高频原因。

  • 外网同步失败坑:内网服务器无法连接外网NTP源,需搭建内网NTP服务端,所有内网节点同步内网标准时间。

  • 双服务冲突坑:chrony和ntpd服务不可同时开启,会抢占时间同步权限,导致同步紊乱,新版系统默认关闭ntpd、启用chrony。

2.8 面试高频核心考点
  • chrony和ntp的区别? chrony是新版时间同步工具,同步速度更快、偏差更小、适配网络波动场景,支持增量校准;ntp为传统工具,同步精度低、稳定性较弱,新版系统默认弃用ntp、使用chrony。

  • 系统时间和硬件时间区别? 系统时间为系统运行内存时间,重启重置;硬件时间为主板固化时间,断电保留,系统开机通过硬件时间初始化系统时间。

  • **服务器时间错乱的危害?**日志时间错位无法排查故障、定时任务执行异常、集群数据同步失败、业务订单时间异常、数据对账错误。

  • 如何永久统一服务器时间? 配置上海时区+开启chrony自启+配置国内NTP源+开启自动校准,无需人工干预。

2.9 生产标准化最佳实践
  • 所有线上服务器强制统一Asia/Shanghai北京时间,禁止使用默认UTC时区;

  • 全系服务器默认开启chronyd服务,配置国内阿里云NTP源,自动实时校准时间;

  • 时间手动校准后,必须执行hwclock -w写入硬件时间,防止重启还原;

  • 集群部署前必做时间巡检,保证所有节点时间偏差≤1s,规避集群同步异常;

  • 内网隔离环境,搭建本地NTP服务器,统一内网所有设备时间标准。

XML 复制代码
# 时区查看与配置
timedatectl
timedatectl set-timezone Asia/Shanghai
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 系统时间操作
date
date -s "2026-06-29 10:30:00"

# 硬件时间同步
hwclock          # 查看硬件时间
hwclock -w       # 系统时间写入硬件

# 网络时间同步
chronyc tracking
chronyc sources -v
ntpdate ntp.aliyun.com
XML 复制代码
date                # 当前时间
date -s "2026-01-01 12:00"
timedatectl         # 时区同步
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
chronyc tracking    # 时间同步服务

3. 系统日志【生产完整版+日志路径+排查命令+轮转避坑+面试精讲】

3.1 模块总述

Linux系统日志是故障排查、安全审计、服务溯源、异常监控的核心依据,系统所有登录操作、服务启停、内核异常、权限变更、程序报错均会记录对应日志。本节全覆盖系统默认核心日志文件、journalctl服务日志、日志筛选排查技巧、logrotate日志轮转、日志清理避坑、生产规范,适配线上99%日志排查场景,补齐文档日志体系空白。

3.2 系统核心日志文件(CentOS/Ubuntu通用,必记路径)

Linux 系统日志默认统一存储在 /var/log/ 目录,不同日志对应不同业务场景,是人工排查故障的首要入口。

(1)/var/log/messages【系统全局日志】

**核心作用:**记录系统大部分常规运行日志、服务启停、系统报错、硬件加载信息,是系统全局排查的通用日志,非内核、非安全类日志大多汇总于此。

**适用场景:**服务器开机异常、常规服务报错、系统运行异常溯源。

(2)/var/log/secure【安全登录日志,审计核心】

核心作用: 记录所有用户登录、ssh连接、sudo权限操作、密码修改、登录失败、恶意爆破等安全事件,生产安全审计、入侵排查核心日志。

**适用场景:**排查陌生登录、账号被盗、暴力破解、权限越权操作。

(3)/var/log/dmesg【内核日志】

**核心作用:**记录系统开机内核加载、硬件识别、磁盘挂载、内核报错、OOM内存溢出、硬件故障日志,开机异常、硬件报错专属日志。

**适用场景:**服务器开机卡顿、磁盘识别失败、内核崩溃、硬件适配异常排查。

(4)/var/log/cron【定时任务日志】

**核心作用:**记录crontab定时任务的执行记录、报错信息、任务启停日志。

**适用场景:**定时任务不执行、执行报错、重复执行故障排查。

(5)/var/log/boot.log【开机启动日志】

**核心作用:**记录系统开机全程服务启动、初始化流程日志,精准定位开机卡顿、服务启动失败环节。

(5)/var/log/yum.log【软件安装日志】

**核心作用:**记录yum/dnf软件安装、卸载、升级、依赖变更记录,软件异常溯源必备。

(6)/var/log/nginx/【业务服务日志】

专属Nginx访问日志、错误日志,各类第三方服务(mysql/redis/docker)均会在/var/log/生成专属日志目录。

3.3 传统日志排查高频命令(通用全系统)

适配所有文本日志文件,结合前文文本处理命令,组合实现日志筛选、报错检索、时段溯源,生产排查万能组合。

XML 复制代码
# 1. 实时监控系统全局日志(实时排错首选)
tail -F /var/log/messages

# 2. 排查登录暴力破解、异常登录
grep -i "Failed password" /var/log/secure    # 筛选登录失败记录
grep -i "Accepted password" /var/log/secure  # 筛选成功登录记录

# 3. 排查定时任务执行异常
tail -F /var/log/cron
grep -i "error" /var/log/cron

# 4. 排查内核硬件、内存溢出故障
dmesg | grep -i error    # 实时内核报错
dmesg | grep -i oom       # 排查内存溢出杀死进程

# 5. 检索近1小时系统报错日志
grep -i "error|warn|fail" /var/log/messages | grep "$(date -d '1 hour ago' +'%Y-%m-%d %H')"

# 6. 大日志文件分页检索报错
less -N /var/log/messages
/error  # 快速匹配报错关键词
3.4 journalctl 日志精讲(Systemd系统专属,生产核心)

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

XML 复制代码
# 1. 基础查看
journalctl                # 查看所有系统服务日志
journalctl -f             # 实时刷新监控所有服务日志(等价tail -F)
journalctl -n 100         # 查看最新100条日志

# 2. 精准查看单个服务日志(最高频)
journalctl -u nginx.service    # 查看Nginx服务全程日志
journalctl -u mysqld.service   # 查看MySQL服务日志
journalctl -u crond.service    # 查看定时任务服务日志

# 3. 时段精准溯源(故障定位核心)
journalctl --since "10 minutes ago"  # 近10分钟日志
journalctl --since "2026-06-29 10:00:00" --until "2026-06-29 11:00:00"  # 指定时段日志

# 4. 开机启动日志排查
journalctl -b             # 查看本次开机后所有日志
journalctl -b -1         # 查看上一次开机的历史日志(重启故障溯源必备)

# 5. 日志级别筛选(只看报错)
journalctl -p err        # 仅筛选错误级别日志,过滤无关冗余信息

# 6. 日志持久化配置(默认重启丢失历史日志)
# 修改配置:/etc/systemd/journald.conf
# Storage=persistent 开启持久化,重启保留日志
3.5 日志轮转 logrotate(生产必备,磁盘爆满核心解决方案)

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

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

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

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

3.5.2 生产标准轮转配置示例
XML 复制代码
# Nginx日志生产轮转配置(/etc/logrotate.d/nginx)
/var/log/nginx/*.log {
    daily               # 按天切割
    rotate 7            # 保留最近7天日志
    compress            # 压缩归档历史日志
    missingok           # 日志文件不存在不报错
    notifempty          # 空日志不切割
    dateext             # 日志后缀加日期,避免覆盖
    create 0644 root root  # 新建日志权限与属主
}

# 手动强制触发日志轮转(调试配置必备)
logrotate -vf /etc/logrotate.d/nginx
3.6 高频致命坑点与生产避坑细则
  • 活跃日志禁止直接rm删除 :正在被服务写入的日志文件,rm -rf 删除后磁盘空间不释放,进程持续占用句柄,导致磁盘爆满无法排查,正确操作:cat /dev/null > 日志文件 清空内容。

  • journalctl日志默认不持久化:默认重启系统后丢失历史日志,需手动开启persistent持久化,否则重启无法溯源历史故障。

  • 日志轮转不生效误区 :修改logrotate配置后不会立即生效,需手动执行logrotate -vf 强制校验生效,避免配置失效导致日志暴涨。

  • 安全日志遗漏风险 :服务器安全审计必须定期排查secure日志,及时发现暴力破解、异常登录,规避入侵风险。

  • 大日志排查禁止用cat :超大日志用cat全屏加载会卡顿终端、占用内存,统一使用less/tail 分页/尾部查看。

3.7 面试高频核心考点
  • 磁盘爆满但找不到大文件的原因? 存在已删除但被进程占用的日志文件,文件句柄未释放,需重启对应服务或清空日志,而非删除日志。

  • journalctl和传统日志的区别? 传统日志为文本文件,需手动筛选;journalctl统一管理systemd服务日志,支持时段、服务、级别精准筛选,排查效率更高。

  • logrotate的作用? 自动切割、压缩、归档、清理日志,防止日志无限增大占用磁盘,保障服务器磁盘稳定。

  • 如何排查服务器被暴力破解? 过滤/var/log/secure 日志,统计高频失败登录IP、异常登录时间,封禁恶意IP。

3.8 生产最佳实践总结
  • 所有业务服务必须配置日志轮转规则,限定日志保留时长、自动压缩清理,杜绝日志暴涨;

  • 服务故障优先使用 journalctl -u 精准排查,快速定位服务启停、报错根源;

  • 日常安全巡检定时筛查secure登录日志,排查异常登录与暴力破解;

  • 所有活跃日志采用清空方式清理,禁止直接删除,规避磁盘空间不释放问题;

  • 新版系统统一开启journalctl日志持久化,保留完整历史故障溯源依据。

XML 复制代码
# 核心日志路径
/var/log/messages   # 系统全局日志
/var/log/secure     # 安全登录审计日志
/var/log/dmesg      # 内核硬件日志
/var/log/cron       # 定时任务日志

# 传统排查命令
tail -F /var/log/messages
grep -i error /var/log/secure
dmesg | grep -i fail

# journalctl服务日志
journalctl -u nginx -f
journalctl --since "30 minutes ago"
journalctl -b -p err

# 日志轮转调试
logrotate -vf /etc/logrotate.d/服务名

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

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

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

1.1 脚本头部声明

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

XML 复制代码
# 标准bash解析器声明(生产通用,必写首行)
#!/bin/bash

# 脚本注释规范:# 单行注释
# 多行注释可通过 :<<EOF ... EOF 实现
:<<COMMENT
此处为多行注释内容
可批量注释多行代码
COMMENT
1.2 脚本三种执行方式(权限区别)
XML 复制代码
# 1. 绝对/相对路径执行(需要脚本执行权限)
chmod +x test.sh  # 赋予脚本执行权限
./test.sh         # 相对路径执行(当前目录)
/root/test.sh     # 绝对路径执行

# 2. 直接调用解析器执行(无需执行权限,生产调试常用)
bash test.sh
sh test.sh

# 3. source 加载执行(在当前终端环境运行,变量全局生效)
source test.sh
. test.sh  # source简写形式

# 核心区别:./执行会新开子终端,source在当前终端执行,可读取脚本变量

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

2.1 变量定义与赋值规范
XML 复制代码
# 1. 自定义普通变量(赋值=左右禁止空格!高频坑点)
name="nginx服务"
version=1.24
num=100

# 2. 变量调用({}包裹变量为规范写法,避免字符串拼接歧义)
echo $name
echo ${version}

# 3. 只读变量(不可修改、不可删除,配置参数常用)
readonly APP_NAME="java服务"

# 4. 清空删除变量
unset name
2.2 系统特殊位置变量(脚本传参必备)

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

XML 复制代码
# 特殊参数变量大全
$0   # 获取脚本本身名称
$1-$9 # 获取脚本第1-9个传入参数
${10} # 获取10及以上参数,必须加花括号
$#   # 获取传入参数总个数(参数校验核心)
$*   # 获取所有传入参数,整体作为一个字符串
$@   # 获取所有传入参数,逐个独立区分(循环遍历首选)
$$   # 获取当前脚本运行PID
$?   # 获取上一条命令执行返回状态(0=执行成功,非0=失败,排错核心)

# 实战示例:脚本传参
# 执行:./test.sh a b c
echo "脚本名:$0"
echo "第一个参数:$1"
echo "参数总数:$#"
echo "所有参数:$@"

3. 数值与字符串运算

3.1 整数运算(Shell仅原生支持整数)
XML 复制代码
# 方式1:expr 运算(兼容所有系统)
a=10
b=20
expr $a + $b  # 加法
expr $a - $b  # 减法
expr $a \* $b # 乘法(*必须加转义符\)
expr $b / $a  # 除法
expr $b % $a  # 取余

# 方式2:$(( )) 运算(生产首选,简洁无转义)
echo $((a + b))
echo $((a * b))
echo $((b / a))

# 自增自减
i=1
i=$((i+1))  # 自增1
i=$((i-1))  # 自减1
3.2 字符串处理(脚本高频)
XML 复制代码
str="linux-shell-script"

# 1. 字符串长度
echo ${#str}

# 2. 字符串截取
echo ${str:0:5}   # 从第0位开始,截取5个字符
echo ${str:5}    # 从第5位开始,截取到末尾

# 3. 字符串替换
echo ${str/linux/LINUX}  # 替换第一个匹配字符
echo ${str//-/_}         # 替换所有匹配字符

# 4. 字符串判断
[ -z "$str" ]  # 判断字符串是否为空
[ -n "$str" ]  # 判断字符串是否非空

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

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

4.1 文件状态判断(运维脚本核心)
XML 复制代码
# 文件判断参数
[ -f "test.txt" ]  # 判断是否为普通文件且存在
[ -d "/data" ]     # 判断是否为目录且存在
[ -e "test.txt" ]  # 判断文件/目录是否存在
[ -r "test.txt" ]  # 判断文件是否可读
[ -w "test.txt" ]  # 判断文件是否可写
[ -x "test.sh" ]   # 判断文件是否可执行
[ -s "test.txt" ]  # 判断文件非空

# 实战if判断示例
if [ -d "/usr/local/nginx" ];then
    echo "nginx目录已存在"
else
    echo "nginx目录不存在"
fi
4.2 数字与字符串判断
XML 复制代码
# 1. 数字比较(只能用 -eq/-ne/-gt/-lt/-ge/-le)
a=10
b=20
[ $a -eq $b ]  # 等于
[ $a -ne $b ]  # 不等于
[ $a -gt $b ]  # 大于
[ $a -lt $b ]  # 小于
[ $a -ge $b ]  # 大于等于
[ $a -le $b ]  # 小于等于

# 2. 字符串比较(只能用 =/!=)
str1="shell"
str2="linux"
[ "$str1" = "$str2" ]  # 字符串相等
[ "$str1" != "$str2" ] # 字符串不等
[ -z "$str1" ]         # 字符串为空
[ -n "$str1" ]         # 字符串非空
4.3 多条件逻辑判断
XML 复制代码
# -a 逻辑与(同时满足)
[ -f "test.txt" -a -s "test.txt" ]

# -o 逻辑或(满足其一)
[ $a -gt 5 -o $b -lt 10 ]

# && 与、|| 或(if语句常用)
if [ $a -gt 0 ] && [ $b -gt 0 ];then
    echo "两个数均为正数"
fi

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

5.1 for循环(批量操作首选)
XML 复制代码
# 1. 基础遍历循环
for i in 1 2 3 4 5;do
    echo "数字:$i"
done

# 2. 有序区间循环(批量创建文件/目录必备)
for i in {01..10};do
    touch test_${i}.txt
done

# 3. 命令结果遍历循环
for file in $(ls /var/log);do
    echo "日志文件:$file"
done

# 4. C语言风格循环(数值迭代)
for ((i=1;i<=5;i++));do
    echo "迭代:$i"
done
5.2 while循环(持续监听/逐行读取)
XML 复制代码
# 1. 基础while循环
i=1
while [ $i -le 5 ];do
    echo "循环次数:$i"
    i=$((i+1))
done

# 2. 逐行读取文件内容(生产日志解析刚需)
while read line;do
    echo "行内容:$line"
done < test.txt

# 3. 无限循环(服务监听、常驻脚本)
while true;do
    echo "持续运行中"
    sleep 1
done
5.3 循环控制语句
XML 复制代码
# break:终止整个循环
# continue:跳过本次循环,直接进入下一次循环

for i in {1..5};do
    if [ $i -eq 3 ];then
        continue  # 跳过3,不执行本次输出
    fi
    echo $i
done

for i in {1..5};do
    if [ $i -eq 3 ];then
        break  # 到3直接终止循环
    fi
    echo $i
done

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

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

XML 复制代码
# 1. 函数定义与调用
function check_file() {
    # 函数内$1代表函数传入参数
    if [ -f "$1" ];then
        echo "文件 $1 存在"
        return 0  # 返回成功状态码
    else
        echo "文件 $1 不存在"
        return 1  # 返回失败状态码
    fi
}

# 调用函数并传参
check_file "/etc/profile"

# 2. 无function简写形式(生产常用)
add() {
    echo $(( $1 + $2 ))
}
add 10 20

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

7.1 交互式输入read
XML 复制代码
# read 接收终端用户输入
echo "请输入文件名:"
read filename
echo "你输入的文件名是:$filename"

# 静默输入(不显示输入内容,密码输入必备)
read -s -p "请输入密码:" pwd
7.2 重定向全覆盖
XML 复制代码
# 标准输出重定向
echo "测试内容" > test.txt   # 覆盖写入文件
echo "追加内容" >> test.txt  # 追加写入文件

# 错误输出重定向
ls /none 2> error.log        # 错误信息单独写入日志

# 标准输出+错误输出合并(生产日志必备)
command > run.log 2>&1       # 所有输出统一写入日志
command &> run.log           # 简写形式,等价上方

# 空设备清空输出(屏蔽无关日志)
command > /dev/null 2>&1
7.3 管道与特殊符号
XML 复制代码
# 管道 | :将前一条命令输出作为后一条命令输入
ps -ef | grep nginx
ls -l | grep .log

# 逻辑符号
&&  # 前命令成功,才执行后命令(链式执行)
||  # 前命令失败,才执行后命令(容错兜底)
;   # 前后命令顺序执行,互不影响

# 实战链式执行
yum install nginx -y && systemctl start nginx

8. 脚本调试与容错

XML 复制代码
# 1. 脚本调试模式
bash -n test.sh  # 仅检查语法错误,不执行脚本
bash -v test.sh  # 详细输出每一行执行代码
bash -x test.sh  # 分步调试,输出所有执行过程(排错神器)

# 2. 脚本容错配置(生产脚本头部添加)
set -e  # 遇到命令执行失败,直接退出脚本,避免错误累积
set -u  # 遇到未定义变量,直接报错退出
set -o pipefail  # 管道命令任意环节失败,整体判定失败

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

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

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

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

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

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

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

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

XML 复制代码
#!/bin/bash
# 生产脚本标准模板:容错+注释+传参+日志输出
set -euo pipefail

# 定义全局变量
LOG_FILE="./run_$(date +%Y%m%d).log"

# 定义功能函数
main() {
    echo "脚本开始执行" >> ${LOG_FILE}
    # 自定义业务逻辑
    echo "执行成功" >> ${LOG_FILE}
}

# 调用主函数
main
echo "脚本执行完成"

十一、整体知识体系学习路线(由浅入深·完整版|零基础到高阶运维进阶)

本学习路线适配零基础入门、运维进阶、面试提分、生产落地全场景,严格遵循「基础夯实→核心能力→工具使用→服务运维→性能调优→排错实战→自动化进阶」的成长逻辑,拆分12个进阶阶段,明确每阶段学习重点、必掌握技能、避坑要点、实战目标,告别碎片化学习,系统性搭建Linux知识体系。

阶段一:Linux基础入门(筑基阶段·零基础必学)

核心定位:熟悉系统环境,掌握终端操作逻辑,摆脱图形化依赖,是所有实操的前置基础

  • 必学内容:远程SSH登录、开关机/重启/注销、用户登录切换、终端快捷键、历史命令、帮助手册(man/help/info)、系统运行时长查看

  • 核心掌握点:熟记高频终端快捷键、会排查登录异常、熟练调用命令帮助文档、养成规范命令操作习惯

  • 避坑重点:禁止生产随意执行关机重启命令、区分su与su-的环境差异、掌握历史命令高效复用技巧

  • 实战目标:独立远程连接服务器、无鼠标纯终端操作、快速检索陌生命令用法

阶段二:文件与目录体系(核心基础·高频刚需)

核心定位:Linux一切皆文件,此阶段是所有运维、开发操作的核心基石

  • 必学内容:绝对/相对路径、特殊路径符号、通配符、目录操作(cd/pwd/ls/mkdir/rmdir)、文件增删改查(touch/rm/cp/mv)、软硬链接、文件精准查找(find/locate/which/whereis)、文件内容查看(cat/less/tail等)

  • 核心掌握点:find多条件筛选与批量处理、tail-F实时日志监控、软硬链接场景区分、批量文件操作语法

  • 避坑重点:禁止rm -rf裸删高危操作、活跃日志只清空不删除、区分locate与find的精准度差异

  • 实战目标:独立完成文件批量创建/清理、日志日常查看溯源、系统文件精准检索、软链接版本切换

阶段三:用户、组与权限体系(安全核心·企业必备)

核心定位:系统安全隔离、权限管控的核心,解决服务权限不足、越权风险、文件访问异常问题

  • 必学内容:root/系统/普通用户区别、UID/GID机制、用户/组创建删除修改、rwx基础权限、数字/符号权限修改、特殊权限(suid/sgid/sticky)、sudo权限委派、文件属主属组修改

  • 核心掌握点:usermod -aG追加权限、sudo权限配置、特殊权限场景、生产权限标准化配置

  • 避坑重点:杜绝usermod -G覆盖原有权限、服务用户禁止登录、关键文件权限严格管控

  • 实战目标:规范服务器用户权限、配置普通用户sudo提权、排查文件权限报错、加固系统账号安全

阶段四:文本处理三剑客(效率进阶·面试/实战高频)

核心定位:日志清洗、数据筛选、配置批量修改的核心工具,运维提分提效关键

  • 必学内容:grep精准匹配筛选、sed批量替换/删除/插入、awk数据切片/统计/格式化输出、正则表达式基础、管道组合使用

  • 核心掌握点:日志报错筛选、批量修改配置文件、统计IP访问量、过滤无效日志数据

  • 避坑重点:sed -i修改配置提前备份、正则匹配贪婪与精准区分、awk字段切割逻辑

  • 实战目标:独立完成日志分析、配置批量修改、业务数据统计,替代人工重复操作

阶段五:磁盘存储与文件压缩(资源管理·磁盘故障排查)

核心定位:管控服务器磁盘资源,解决磁盘爆满、分区异常、文件传输归档问题

  • 必学内容:磁盘分区、挂载卸载(mount/umount)、磁盘空间查看(df/du)、inode与block原理、文件压缩解压(tar/zip/unzip)、磁盘坏道检测、临时文件清理

  • 核心掌握点:磁盘空间占用排查、大文件定位、文件批量归档解压、永久挂载配置

  • 避坑重点:挂载目录数据丢失风险、inode耗尽磁盘爆满、tar压缩解压路径错误

  • 实战目标:快速排查磁盘爆满问题、完成文件批量归档备份、规范磁盘挂载管理

阶段六:进程管理与定时任务(服务运维核心)

核心定位:管控系统进程、保障服务常驻运行、实现自动化定时执行任务

  • 必学内容:进程查看(ps/top/htop)、进程终止(kill/killall)、前后台进程切换、nohup常驻进程、crontab定时任务配置、任务日志排查、开机自启配置

  • 核心掌握点:高负载进程排查、服务后台常驻、定时任务精准配置、任务执行异常排查

  • 避坑重点:crontab时区与时间偏差、进程强制终止风险、nohup日志堆积

  • 实战目标:保障业务服务7*24常驻、配置自动化备份/清理任务、排查进程卡死/高负载故障

阶段七:网络配置与防火墙(通信核心·集群必备)

核心定位:解决服务器网络通信、端口访问、外网连通、集群节点互通问题

  • 必学内容:网卡配置、IP地址修改、路由配置、网络连通测试(ping/curl)、端口监听查看(ss/lsof/netstat)、防火墙规则配置、端口开放/封禁、域名解析、网络故障排查

  • 核心掌握点:端口占用排查、防火墙精准放行、外网访问故障溯源、跨节点互通配置

  • 避坑重点:防火墙默认拒接规则、端口冲突、网卡配置错误导致断网

  • 实战目标:独立配置服务器网络、放行业务端口、排查网络不通/端口无法访问故障、保障集群节点互通

阶段八:软件包管理(环境部署·服务安装基础)

核心定位:快速部署系统环境、安装运维软件、管理软件版本与依赖

  • 必学内容:CentOS(yum/dnf/rpm)、Ubuntu(apt/dpkg)软件安装、卸载、升级、依赖修复、本地离线安装、镜像源更换、软件版本锁定

  • 核心掌握点:国内镜像源配置、依赖冲突修复、离线环境软件部署、软件精准卸载

  • 避坑重点:生产禁止全局升级软件、依赖误删、离线安装依赖缺失

  • 实战目标:一键部署运维工具、搭建基础服务环境、解决软件安装依赖报错

阶段九:系统监控、时间与日志运维(故障溯源·生产保障)

核心定位:服务器日常巡检、故障排查、安全审计、系统稳定性保障

  • 必学内容:硬件信息查询(CPU/内存/磁盘/网卡)、时区时间同步(chrony/NTP)、系统核心日志路径、journalctl服务日志排查、logrotate日志轮转、系统开机故障排查、硬件异常监控

  • 核心掌握点:服务器一键巡检、时间统一校准、日志精准溯源、日志自动清理轮转

  • 避坑重点:日志句柄残留、时间错位导致业务异常、日志无限暴涨

  • 实战目标:日常服务器巡检、快速定位系统/服务故障、完成日志规范化运维

阶段十:Shell脚本自动化(运维提效·进阶核心)

核心定位:摆脱人工重复操作,实现运维自动化,是高级运维必备核心能力

  • 必学内容:脚本规范与执行方式、变量与传参、数值/字符串运算、条件判断、循环语句、函数封装、管道重定向、脚本调试、容错机制、生产通用脚本模板

  • 核心掌握点:自动化日志清理、批量部署、文件同步、服务巡检脚本编写

  • 避坑重点:脚本语法坑、变量未定义、子终端执行失效、循环遍历异常

  • 实战目标:独立编写可落地的自动化运维脚本,实现日常运维工作自动化

阶段十一:系统性能调优与高阶排错(高阶能力·资深运维)

核心定位:解决服务器高负载、卡顿、响应慢、服务异常等疑难问题,优化系统性能

  • 必学内容:CPU/内存/磁盘IO/网络性能调优、内核参数优化、进程优先级调整、系统资源限制、常见线上故障复盘(磁盘爆满、进程卡死、网络延迟、日志异常)

  • 核心掌握点:性能瓶颈定位、内核参数优化、故障快速复盘修复

  • 实战目标:独立完成服务器性能调优、快速处理各类线上疑难故障、保障系统高可用

阶段十二:综合实战与架构适配(落地闭环·职场进阶)

核心定位:整合所有知识点,适配企业集群、微服务、自动化运维架构,实现能力闭环

  • 必学内容:多节点集群环境运维规范、服务高可用保障、批量运维工具适配、日常运维标准化流程、面试高频考点复盘、生产故障案例汇总

  • 核心掌握点:标准化运维流程、集群环境统一管控、故障快速应急处理

  • 实战目标:独立负责企业服务器集群运维、处理突发线上故障、搭建自动化运维体系

十二、高频生产组合命令示例(实战落地|可直接复制复用)

本章节汇总运维日常90%高频组合命令,覆盖日志排查、磁盘清理、进程运维、网络排错、配置批量修改、数据统计、系统巡检七大核心场景,所有命令均经过生产验证,附带场景解析与使用说明,无需修改可直接落地使用。

1. 日志排查与清洗(线上排错核心)

(1)实时监控日志并筛选报错

tail -F /var/log/nginx/access.log | grep -i error

用途:实时抓取nginx运行报错日志,过滤大小写忽略的error异常,精准定位实时故障

(2)统计近1小时日志报错数量

grep -i "error|warn|fail" /var/log/messages | grep "$(date -d '1 hour ago' +'%Y-%m-%d %H')" | wc -l

用途:快速统计系统近一小时异常次数,用于故障复盘、巡检报表

(3)筛选日志指定时间段内容

sed -n '/2026-06-28 10:00:00/,/2026-06-28 11:00:00/p' app.log

用途:精准截取固定时段日志,排查历史时段业务异常

(4)过滤空行与无效日志,输出干净日志

grep -v "^$|#" app.log

用途:过滤空行、注释行,精简日志内容,提升排查效率

(5)统计接口高频异常IP

grep "500" access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -10

用途:统计请求返回500错误的TOP10恶意/异常IP,快速定位攻击、接口故障源头

2. 磁盘清理与空间排查(解决磁盘爆满)

(1)全盘查找100M以上大文件并排序

find / -type f -size +100M | xargs ls -lh | sort -rh

用途:极速定位服务器超大文件,解决磁盘占用过高问题,生产巡检刚需

(2)清理7天前过期日志(安全清理)

find /data/logs -name "*.log" -mtime +7 -delete

用途:自动清理一周前过期日志,释放磁盘空间,适配定时任务自动化清理

(3)清空正在写入的大日志文件(禁止rm删除)

cat /dev/null > /var/log/nginx/error.log

用途:清空活跃日志,不释放进程句柄,规避磁盘空间不释放的致命问题

(4)统计各目录磁盘占用大小并排序

du -sh /data/* | sort -rh

用途:快速排查哪个子目录占用磁盘过高,精准定位垃圾目录

(5)查找30天未使用的临时文件并删除

find /tmp -type f -mtime +30 -delete

用途:清理系统临时目录冗余文件,释放磁盘空间

3. 进程运维与服务排错(常驻服务管理)

(1) 查找并强制关闭指定进程(批量杀进程)

ps -ef | grep java | grep -v grep | awk '{print $2}' | xargs kill -9

用途:批量终止所有Java进程,适用于服务重启、卡死进程清理

(2)后台常驻运行程序并输出日志(生产通用启动命令)

nohup java -jar app.jar > app_run.log 2>&1 &

用途:脱离终端后台运行服务,日志统一输出,关闭终端不中断服务

(3)查看进程运行时长与资源占用

ps -eo pid,user,cmd,etime,%mem,%cpu | grep -v grep | sort -k5 -nr

用途:排查高CPU、高内存占用进程,查看进程运行时长,定位异常进程

(4)查看系统当前负载与高频进程

top -b -n1 | head -20

用途:非交互式查看系统瞬时负载、进程资源占用,适合脚本巡检、快速排查卡顿

4. 网络与端口故障排查(通信异常、端口占用)

(1)查找指定端口占用进程

lsof -i :8080 备选(无lsof工具):ss -tulpn | grep 8080

用途:排查端口被占用、端口冲突问题,解决服务启动端口报错

(2)统计服务器当前TCP连接数

ss -s

用途:查看总连接数、异常连接数、TIME_WAIT连接数,排查网络拥堵、请求堆积

(3)测试域名连通性与解析速度

curl -I www.baidu.com

用途:测试外网连通、域名解析、接口响应状态,排查网络不通、域名解析失败

(4)排查服务器对外访问延迟

ping -c 10 www.baidu.com

用途:发送10次ping包,统计网络延迟、丢包率,排查网络抖动问题

5. 配置文件批量修改与处理(运维提效)

(1)批量替换目录下所有配置文件指定内容

sed -i 's/192.168.1.100/192.168.1.200/g' /etc/nginx/*.conf

用途:批量修改配置文件IP、端口、域名,无需逐文件修改,适配环境迁移

(2)批量注释配置文件中指定行

sed -i '/server_port/s/^/#/g' nginx.conf

用途:批量注释包含server_port的配置行,快速禁用旧配置

(3)批量取消注释指定行

sed -i '/^#server_port/s/^#//g' nginx.conf

用途:批量开启被注释的配置,快速启用新配置

(4)批量备份所有配置文件

find /etc -name "*.conf" -exec cp {} {}.bak \;

用途:批量备份系统所有配置文件,修改配置前必备,方便出错回滚

6. 文件批量操作与数据统计(批量运维)

(1)批量创建规范命名文件

touch test_{01..10}.log

用途:一次性创建10个规范命名日志文件,适配测试、批量场景

(2)批量修改文件后缀

rename .txt .log *.txt

用途:批量将所有txt文件改为log文件,适配文件格式统一场景

(3)统计当前目录文件总数、目录总数

ls -l | grep "^-" | wc -l && ls -l | grep "^d" | wc -l

用途:快速统计当前目录文件、文件夹数量,适配资源盘点

7. 系统快速巡检组合命令(日常运维必备)

(1)一键查看系统基础信息(负载、内存、磁盘、时间)

echo "系统负载:$(uptime | awk '{print $8,$9,$10}')";echo "内存使用:$(free -h | awk 'NR==2{print $3"/"$2}')";echo "磁盘使用:$(df -h / | awk 'NR==2{print $3"/"$2" ("$5"已用)"}')";echo "系统时间:$(date)"

用途:一键输出服务器核心运行指标,日常巡检、快速排查系统状态

(2)查看开机自启服务列表

systemctl list-unit-files --type=service | grep enabled

用途:排查开机自启服务,关闭无用自启,优化开机速度、减少资源占用

(3)查看系统开机异常日志

journalctl -b -p err

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

相关推荐
贪玩的蛋挞2 小时前
C#与闭包
开发语言·c#
端庄的战斗机2 小时前
javascript 设计模式(文章很长,请自备瓜子,水果和眼药水)
开发语言·javascript·设计模式
Full Stack Developme3 小时前
Java LRU 与 LFU 算法及应用
java·开发语言·算法
C语言小火车4 小时前
C++ 堆排序深度精讲:基于完全二叉树的选择排序进化,最坏情况 O(n log n) 的稳定王者
开发语言·c++·算法·排序算法·堆排序
北冥you鱼4 小时前
abigen 最佳实践:从入门到精通,高效生成 Go 语言合约绑定
开发语言·golang·区块链
程序员老油条5 小时前
WSL2 + Docker Desktop:Windows 下的完美 Java 开发环境
java·windows·docker·wsl2
ALex_zry5 小时前
C++26 std::complex 结构化绑定详解:auto [re, im] = c
c语言·开发语言·c++
shushangyun_6 小时前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
她说..6 小时前
Java 默认值设置方式
java·开发语言·后端·springboot