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 高频网络故障排查流程(生产万能链路)
-
第一步:核查网卡状态
ip addr确认网卡UP状态、IP配置是否正常 -
第二步:核查路由网关
ip route确认默认网关存在、网段路由无误 -
第三步:内网连通性测试 ping 同网段服务器、ping 网关,排查内网链路
-
第四步:外网连通性测试 ping 公网IP、ping 域名,区分网络不通/DNS故障
-
第五步:端口链路排查 检查防火墙、网卡物理链路、交换机端口状态
1.8 高频易错坑点与生产避坑细则
-
网卡UP无IP坑:网卡状态为UP但无IP,大概率是BOOTPROTO配置异常、DHCP服务失效,静态IP需手动配置地址。
-
多网卡路由冲突:服务器多网卡场景下,默认网关只能配置一个,多网关会导致路由紊乱、外网断断续续。
-
临时配置失效坑:ip addr/ip route临时配置,重启网络、重启服务器均会失效,业务环境必须配置永久参数。
-
路由优先级误区:直连网段路由优先级最高,手动静态路由无法覆盖直连路由,跨网段互通需精准配置下一跳网关。
-
子网掩码配置错误:掩码不匹配会导致跨IP段无法互通、数据包丢包,生产统一使用24位掩码(255.255.255.0)规范配置。
1.9 面试高频核心考点
-
ifconfig和ip命令的区别? ifconfig是老旧命令、功能有限、部分新系统已弃用;ip是Linux官方新一代网络命令,整合网卡、IP、路由所有功能,参数更全、效率更高。
-
默认路由的作用? 服务器所有无法匹配本地网段的数据包,统一转发到默认网关,实现外网跨网段通信,无默认路由则服务器仅能内网互通。
-
多网卡服务器为什么不能配置多个默认网关? 多默认网关会导致路由表冲突,系统无法识别出站链路,引发网络丢包、访问不稳定、外网不通问题。
-
网卡DOWN状态的原因? 物理链路断开、网卡禁用、开机自启关闭、网络服务异常、虚拟机网卡模式故障。
1.10 生产最佳实践总结
-
生产服务器统一使用静态IP配置,禁止DHCP动态获取,避免IP变动导致业务异常;
-
网络排查优先用
ip addr + ip route组合,快速定位网卡、IP、路由问题; -
多网段组网场景,精准配置静态路由,不随意修改默认网关,保证网络稳定性;
-
网卡配置修改后立即重启网络服务并核查路由表,提前规避重启后网络失效风险;
-
统一配置公共DNS(阿里223.5.5.5/谷歌8.8.8.8),避免域名解析失败。
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:服务启动失败,提示端口被占用
-
执行
lsof -i :端口号定位占用进程PID -
确认进程无用,执行
kill -9 PID强制释放端口 -
重启服务,规避端口冲突
问题2:端口监听正常,但外网无法访问
-
核查服务监听地址:是否监听
0.0.0.0(全网段),仅监听127.0.0.1则仅本机可访问 -
检查防火墙端口放行规则
-
测试本机curl访问、跨机telnet访问,区分本地服务问题与网络拦截问题
问题3:服务卡顿、连接超时、并发卡顿
-
执行
ss -ant | awk '{print $1}' | sort | uniq -c统计连接状态 -
大量 TIME_WAIT:内核端口回收过慢,需优化内核参数
-
大量 CLOSE_WAIT:程序连接泄漏,代码未释放连接,需重启服务、修复代码
3.8 高频致命坑点 & 生产避坑细则
-
监听地址误区 :端口监听在
127.0.0.1仅本机访问,外网无法连通,业务服务必须监听0.0.0.0全网段。 -
TIME_WAIT 正常性误区:少量TIME_WAIT为正常机制,单机上万堆积会耗尽临时端口,导致新连接无法建立。
-
CLOSE_WAIT 高危隐患:不存在正常业务场景,100%是程序连接未主动关闭,长期堆积会导致服务连接爆满、卡死宕机。
-
netstat 性能坑:高并发服务器禁止频繁执行netstat,遍历内核链表会占用大量CPU,优先使用ss命令。
-
端口占用残留坑:进程异常被杀后,端口会存在短暂TIME_WAIT残留,无法立即重启服务,需等待系统自动回收或临时换端口调试。
3.9 面试高频核心考点
-
ss和netstat的区别? ss基于内核tcp_diag模块,查询速度快、性能高,适配高并发场景;netstat遍历所有socket,速度慢、资源占用高,仅兼容老旧系统。
-
CLOSE_WAIT产生原因?如何解决? 客户端关闭连接,服务端未调用close释放连接,导致连接悬挂;临时解决重启服务,根治需优化代码连接释放逻辑。
-
TIME_WAIT作用?为什么需要等待? 主动关闭方等待2MSL时间,确保对方接收完所有报文,避免残留数据包干扰新连接,保证TCP连接可靠性。
-
**端口监听正常但无法访问的原因?**仅监听本地回环地址、防火墙未放行端口、云服务器安全组未开放、路由拦截。
3.10 生产最佳实践总结
-
日常端口、连接排查统一使用ss命令,替代老旧netstat,高效低耗;
-
端口冲突、占用问题固定用
lsof -i :端口精准定位进程,快速排障; -
线上服务异常卡顿,优先统计TCP连接状态,区分是连接泄漏还是端口耗尽;
-
所有业务服务必须监听0.0.0.0全网段,禁止仅监听本地回环地址;
-
高并发服务器定期监控TIME_WAIT数量,必要时优化内核端口回收参数。
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 磁盘挂载完整生产流程(标准实操)
-
lsblk/fdisk -l 核查新磁盘设备;
-
fdisk 创建磁盘分区,partprobe 刷新分区;
-
mkfs.xfs/mkfs.ext4 格式化分区;
-
创建空挂载目录,mount 临时挂载测试;
-
blkid 获取分区UUID,写入/etc/fstab永久配置;
-
mount -a 校验配置、生效挂载;
-
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、内存、磁盘均为虚拟化硬件,
dmidecode、sensors无法查询真实物理硬件参数,仅物理机生效。 -
超线程识别误区:逻辑核心数=物理核心数×线程数,超线程开启后逻辑核翻倍,算力并非翻倍,配置进程并发需按需适配。
-
内存信息区分 :
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
用途:精准筛选本次开机后的所有系统报错,排查开机故障、服务启动异常