Linux 常用操作命令合集与运维实战

一、文件系统操作

📖 知识点简介

Linux 文件系统是运维工作的基础,掌握文件查找、内容检索、磁盘分析等操作能大幅提升日常排查效率。

🔧 核心命令整理

命令 作用 常用参数
find 查找文件 -name -type -mtime -size -exec
du 统计目录大小 -sh --max-depth -exclude
df 查看磁盘空间 -h -T -i
tree 目录结构树 -L -d -f
ls -la 详细列表 -lhS -t -r
stat 查看文件元信息 全链路信息

🧪 实操示例

bash 复制代码
# 1. 查找 7 天前修改的日志文件并打包
find /var/log -name "*.log" -mtime +7 -exec tar -czf archive.tar.gz {} ;

# 2. 查找当前目录下大于 100MB 的文件(排除 .git)
find . -type f -size +100M ! -path "./.git/*" -exec ls -lh {} ;

# 3. 统计各目录磁盘占用(深度 1 级)
du -sh /* --exclude=/proc --exclude=/sys 2>/dev/null

# 4. 按修改时间倒序显示文件
ls -lhtr

# 5. 查看文件 inode 信息
stat nginx.conf
# 输出包含: Size, Blocks, Inode, Access, Modify, Change

⚠️ 常见坑点

  • duls 文件大小差异ls -l 显示的是文件实际大小,du 显示的是磁盘占用块大小(稀疏文件差异更大)
  • find -exec{} ; 别漏分号; 表示每条结果执行一次,+ 结尾表示合并参数
  • find 路径别漏参数 :如 find / 不加 -maxdepth 会扫全盘,极端情况拖垮 IO

二、文本处理三剑客:grep / sed / awk

📖 知识点简介

这是 Linux 运维的看家本领。日志分析、配置文件批量修改、数据提取都离不开它们。

🔧 核心命令整理

grep(文本搜索)

| 参数 | 作用 | 示例 |
|----------|--------|---------------------------|-----------|
| -E | 扩展正则 | `grep -E "(error | fatal)"` |
| -v | 反向匹配 | 排除无关行 |
| -c | 计数 | grep -c "ERROR" app.log |
| -A/B/C | 上下文 | after/before/context |
| -r | 递归 | 目录递归搜索 |
| -l | 仅输出文件名 | 批量查找哪些文件命中 |

sed(流编辑器)

参数 作用 示例
-i 原地修改 sed -i 's/old/new/g' file
-n 静默模式 sed -n '5,10p' 打印 5-10 行
s///g 替换 sed 's/foo/bar/g'
/d 删除行 sed '/^#/d' 删除注释行

awk(文本分析)

模式 作用 示例
$NF 最后一列 awk '{print $NF}'
-F 指定分隔符 awk -F':' '{print $1}'
NR 行号 awk 'NR>1' 跳过首行
BEGIN/END 前置/结尾操作 统计汇总

🧪 实操示例

bash 复制代码
# 1. 实时跟踪错误日志并高亮关键字
tail -f /var/log/nginx/error.log | grep --color=always -E "error|fatal|critical"

# 2. 统计 Nginx 访问日志中 TOP 10 IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

# 3. 批量修改配置文件(备份原文件)
sed -i.bak 's/max_connections = 100/max_connections = 200/g' /etc/mysql/my.cnf

# 4. 提取第 2 到 5 行并输出指定列
sed -n '2,5p' /etc/passwd | awk -F':' '{print $1, $3, $7}'

# 5. 计算日志中某接口的平均响应时间
grep "/api/orders" access.log | awk '{sum+=$NF; count++} END {print sum/count}'

⚠️ 常见坑点

  • sed -i 在 macOS 与 Linux 差异 :macOS 需要 sed -i '' 's/old/new/g'(空字符串参数),Linux 直接 -i 就行
  • grep -E 与 egrepegrep 已废弃,统一用 grep -E
  • awk 中变量引用awk -v var="$shell_var" '...' ------Shell 变量必须用 -v 传入
  • sed 替换含斜杠路径 :可以用 #| 代替 / 分隔符:sed -i 's#/old/path#/new/path#g'

三、进程与系统监控

📖 知识点简介

服务器异常时,快速定位 CPU/内存/磁盘/网络瓶颈是核心能力。

🔧 核心命令整理

命令 适用场景 关键参数
top/htop 实时进程监控 -b -n1 批量模式
ps aux 进程快照 --sort=-%mem
netstat/ss 网络连接 -tlnp
lsof 文件/端口占用 -i :80 -u nginx
vmstat 系统整体性能 1 5 每秒采样 5 次
iostat 磁盘 IO 性能 -x 1
dmesg 内核日志 -T 人类时间戳

🧪 实操示例

bash 复制代码
# 1. 查看 CPU 占用 TOP 10 进程
ps aux --sort=-%cpu | head -11

# 2. 查看内存占用 TOP 10 进程
ps aux --sort=-%mem | head -11

# 3. 查看端口监听情况(推荐 ss)
ss -tlnp
# 等价于旧版: netstat -tlnp

# 4. 查找谁占用了 80 端口
lsof -i :80

# 5. 查看打开文件最多的进程
lsof -n | awk '{print $1}' | sort | uniq -c | sort -rn | head

# 6. 系统性能一键体检
echo "=== CPU ===" && top -bn1 | head -5
echo "=== MEM ===" && free -h
echo "=== DISK ===" && df -h
echo "=== LOAD ===" && uptime
echo "=== IO WAIT ===" && iostat -c 1 1 | tail -3

⚠️ 常见坑点

  • top -bn1 vs 交互模式 :脚本中使用一定要加 -bn1,否则 top 进入交互界面卡住脚本
  • free -h 的 available vs freeavailable 才是真正可用内存(包含可回收缓存),free 通常非常小
  • lsof 可能很慢 :高并发服务器上大量文件句柄时,lsof 可能打挂系统,优先用 ss/proc
  • ps aux 的 VSZ 和 RSS:VSZ 是虚拟内存(很大),RSS 是常驻物理内存(看这个)

四、网络配置与故障排查

📖 知识点简介

网络是服务器的心脏,从 IP 配置到路由追踪,再到连通性测试和带宽分析,是运维高频操作。

🔧 核心命令整理

命令 功能 常用参数
ip a/ip r IP 地址/路由 show dev eth0
ping 连通性测试 -c -i -s
traceroute/mtr 路由追踪 MTR 融合 ping+traceroute
curl HTTP 请求测试 -I -w -o /dev/null -s
tcpdump 抓包分析 -i -nn -X -c
dig/nslookup DNS 解析查询 +short -x
nc 端口测试 -vz

🧪 实操示例

bash 复制代码
# 1. 检查本机网卡信息
ip a show eth0
ip r  # 查看默认网关

# 2. 测试端口连通性
nc -zv 192.168.1.100 3306
# Returns: Connection to 192.168.1.100 port 3306 [tcp/mysql] succeeded!

# 3. 一键分析网站响应速度(总耗时+DNS+TCP+TLS+传输)
curl -o /dev/null -s -w "\
  time_namelookup: %{time_namelookup}s\n\
  time_connect: %{time_connect}s\n\
  time_appconnect: %{time_appconnect}s\n\
  time_starttransfer: %{time_starttransfer}s\n\
  time_total: %{time_total}s\n\
  http_code: %{http_code}\n" \
  https://example.com

# 4. 抓取 80 端口 HTTP 请求的前 100 个包
tcpdump -i eth0 -nn -c 100 port 80 -X

# 5. DNS 解析排查
dig +short example.com          # 快速获取 A 记录
dig -x 8.8.8.8                   # 反向解析
nslookup example.com 8.8.8.8    # 使用指定 DNS 服务器

# 6. 持续路由追踪(诊断网络延迟抖动)
mtr -r -c 100 8.8.8.8

⚠️ 常见坑点

  • curl -w 不要漏 \n:各时间变量需要显式加换行,否则全挤在一行
  • tcpdump 权限 :大部分系统需要 rootsudo 才能抓包
  • ping 超时 vs 拒绝ping 不通可能是 ICMP 被防火墙拦截,不一定代表端口不通,用 nctelnet 确认
  • DNS 缓存坑 :修改 DNS 后没生效,记得清缓存:systemd-resolve --flush-caches 或重启 nscd

五、Shell 脚本批量操作

📖 知识点简介

运维不用脚本等于手工搬砖。循环、条件判断、函数封装、错误处理是自动化运维的基础。

🔧 核心命令整理

| 语法 | 作用 | 示例 |
|----------------------|------|--------------------------|------|----------------|
| for i in {1..10} | 循环 | for i in *.log; do ... |
| while read line | 逐行读取 | 处理文件列表 |
| if [ -f "$f" ] | 条件判断 | 文件/目录/状态判断 |
| ` | | /&&` | 短路执行 | cmd1 && cmd2 |
| trap | 信号捕获 | trap 'cleanup' EXIT |
| set -euxo pipefail | 安全模式 | 脚本防崩三板斧 |

🧪 实操示例

bash 复制代码
#!/bin/bash
set -euo pipefail  # 安全模式:出错即停、未定义变量报错、管道中断

LOG_DIR="/var/log/app"
BACKUP_DIR="/backup/logs"
RETENTION_DAYS=30
DATE=$(date +%Y%m%d_%H%M%S)

# 1. 批量备份并清理过期日志
backup_logs() {
    mkdir -p "$BACKUP_DIR/$DATE"

    for log_file in "$LOG_DIR"/*.log; do
        if [ -f "$log_file" ]; then
            cp "$log_file" "$BACKUP_DIR/$DATE/"
            > "$log_file"   # 清空原日志(不删除文件句柄)
            echo "✓ Backed up: $(basename "$log_file")"
        fi
    done

    # 清理 N 天前的备份
    find "$BACKUP_DIR" -maxdepth 1 -type d -mtime +$RETENTION_DAYS \
        -exec rm -rf {} ; -prune

    echo "✅ 备份完成,已清理 ${RETENTION_DAYS} 天前的备份"
}

# 2. 批量执行远程服务器的命令
remote_exec() {
    local servers=("web01" "web02" "web03")
    local cmd="$1"

    for server in "${servers[@]}"; do
        echo ">>> Executing on $server..."
        ssh "$server" "$cmd" || echo "⚠️  Failed on $server"
    done
}

# 3. 检查多台服务器磁盘使用率并发送告警
check_disk_usage() {
    local threshold=80
    local servers=("$@")

    for server in "${servers[@]}"; do
        usage=$(ssh "$server" "df -h / | awk 'NR==2 {print $5}' | tr -d '%'")
        if [ "$usage" -gt "$threshold" ]; then
            echo "🔴 ALERT: $server 磁盘使用率已达 ${usage}%"
            # 这里可以接告警:curl -X POST alert-webhook...
        else
            echo "🟢 $server 磁盘使用率: ${usage}%"
        fi
    done
}

# 执行
backup_logs
remote_exec "systemctl restart nginx"
check_disk_usage "web01" "web02" "db01"

⚠️ 常见坑点

  • set -e 的隐式陷阱grep -q pattern 找不到时会返回 1,set -e 会退出脚本。解决方案:grep -q pattern || true
  • 变量引用务必双引号rm -rf $dir 如果 $dir 为空 → rm -rf / 😱 必须写 rm -rf "$dir"
  • while read 的 IFS :默认会 trim 前后空格,处理含空格的路径需:while IFS= read -r line
  • trap 清理临时文件 :脚本异常退出时务必用 trap 'rm -f "$tmpfile"' EXIT 确保清理
  • ssh 批量执行建议用 pdshansible :纯 for 循环 ssh 效率低,连接复用可加 -o ControlMaster=auto

六、日志排查实战策略

📖 知识点简介

生产故障排查 70% 以上的时间在查日志。掌握高效查日志的方法论,比死记硬背命令更重要。

🔧 核心方法

| 场景 | 策略 | 命令组合 |
|--------|--------------------|-----------------------------------------------|-------------------|--------------------------------------------------------------------------------|----------|------------|
| 实时跟踪 | tail -f + grep | `tail -f app.log | grep ERROR` |
| 时间段过滤 | 结合 sed/awk | awk "/2026-07-01 10:00/,/2026-07-01 10:05/" |
| 关键字上下文 | grep -A/B/C | grep -B5 -A10 "OOM" syslog |
| 异常聚合 | sort uniq -c | `grep ERROR | awk '{print $NF}' | sort | uniq -c | sort -rn` |
| 慢查询定位 | grep+awk 排序 | `grep "SLOW" | awk -F' | ' '{print 2,2, 2,1}' | sort -rn | head` |

🧪 实操示例

bash 复制代码
# 1. 查看 10:00-10:05 之间的日志
awk '/2026-07-01 10:00:/,/2026-07-01 10:05:/' app.log

# 2. 最近 30 分钟内的错误(结合 timestamp)
awk -v d="$(date -d '30 minutes ago' '+%H:%M')" '$0 ~ d || $1 >= d && /ERROR/' app.log

# 3. 统计各类错误出现次数
grep -oP '(?<=ERROR: )\w+' app.log | sort | uniq -c | sort -rn

# 4. 日志旋转后仍跟踪最新文件(tail -F 大写 F)
tail -F /var/log/app/*.log | grep --line-buffered -E "CRITICAL|FATAL"

# 5. 查找 IP 的访问记录链(时间段+上下文)
grep -A20 "192.168.1.100" access.log | grep -E "GET|POST|response" | head -50

⚠️ 常见坑点

  • 日志轮转(logrotate)后文件句柄问题 :应用需配置 copytruncate 或发送 USR1 信号重开日志文件,否则 tail -f 跟丢
  • grep -r 搜大日志目录时耗尽内存 :大文件用 zgrep(压缩日志)或 timeout 30 grep ... 限时
  • 时间戳格式不统一 :不同模块日志可能用 UTC 或格式各异,先 date -d 统一对比
  • 别忘了 /var/log/messagesjournalctl:系统级日志常常是第一手线索

七、安全运维基础

📖 知识点简介

服务器安全是底线。SSH 加固、端口管控、文件权限、审计日志、fail2ban 是基础安全三板斧。

🔧 核心命令整理

bash 复制代码
# 1. SSH 安全加固 Checklist
grep -E "^Port |^PermitRootLogin |^PasswordAuthentication |^PubkeyAuthentication" /etc/ssh/sshd_config
# 建议配置:
#   Port 2222                    # 改默认端口
#   PermitRootLogin no          # 禁止 root 直接登录
#   PasswordAuthentication no   # 仅允许密钥登录
#   PubkeyAuthentication yes
#   MaxAuthTries 3
#   ClientAliveInterval 300
#   ClientAliveCountMax 2
systemctl restart sshd

# 2. 检查 SUID/SGID 文件(提权漏洞)
find / -perm -4000 -type f 2>/dev/null
find / -perm -2000 -type f 2>/dev/null

# 3. 检查 777 权限文件
find / -type f -perm 0777 2>/dev/null | head -20

# 4. 查看系统登录日志
last -10                    # 最近登录记录
lastb -10                   # 登录失败记录
journalctl _COMM=sshd --since today | grep "Failed password"

# 5. fail2ban 使用示例
fail2ban-client status                   # 查看所有 jail 状态
fail2ban-client status sshd              # 查看 SSH 封禁情况
fail2ban-client set sshd banip 1.2.3.4   # 手动封禁 IP

# 6. 端口安全扫描(自检)
ss -tlnp | awk '{print $4}' | grep -v '127.0.0.1:' | grep -v '::1:'
# 所有开放端口应该都有明确用途,不要无故监听 0.0.0.0

# 7. 文件完整性校验
md5sum /bin/ls /bin/ps /bin/netstat   # 建立基线
# 日常巡检对比:md5sum -c baseline.md5

⚠️ 常见坑点

  • 改 SSH 端口后务必测试新连接:改配置前先在另一个终端保持连接,改完测试没问题再退出,否则可能把自己锁在门外
  • PermitRootLogin no 的真实含义 :禁止 root 通过 SSH 登录,但可以从普通用户 su -sudo 提权
  • fail2ban 别把自己封了 :配置 ignoreip = 127.0.0.1/8 ::1 你的办公IP 保护管理地址
  • find -perm 的 4000 vs 4000+-perm -4000 匹配包含 SUID 位的文件,-perm 4000 精确匹配只有该位的文件

八、日常巡检脚本模板

📖 知识点简介

运维巡检是每天必做的功课,把常见检查点写成脚本,配合定时任务(cron)自动执行,节省大量时间。

🧪 实操示例

bash 复制代码
#!/bin/bash
#===== 日常巡检脚本:daily_check.sh =====
# 功能:CPU/内存/磁盘/进程/网络/安全 一键检查
# 用法:bash daily_check.sh | tee -a /var/log/daily_check.log

RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
HOSTNAME=$(hostname)
DATE=$(date '+%Y-%m-%d %H:%M:%S')

echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} 巡检时间: $DATE${NC}"
echo -e "${GREEN} 主机: $HOSTNAME${NC}"
echo -e "${GREEN}========================================${NC}"

# 1. 系统负载
LOAD=$(uptime | awk -F'load average:' '{print $2}')
CPU_CORES=$(nproc)
LOAD_1=$(echo $LOAD | awk -F',' '{print $1}' | tr -d ' ')
if (( $(echo "$LOAD_1 > $CPU_CORES" | bc -l) )); then
    echo -e "${RED}🔴 负载异常: $LOAD (核心数: $CPU_CORES)${NC}"
else
    echo -e "${GREEN}🟢 负载正常: $LOAD${NC}"
fi

# 2. 内存使用
MEM_TOTAL=$(free -h | awk '/Mem:/{print $2}')
MEM_USED=$(free -h | awk '/Mem:/{print $3}')
MEM_AVAIL=$(free -h | awk '/Mem:/{print $7}')
MEM_PERC=$(free | awk '/Mem:/{printf "%d", $3/$2 * 100}')
if [ "$MEM_PERC" -gt 90 ]; then
    echo -e "${RED}🔴 内存告警: ${MEM_USED}/${MEM_TOTAL} (${MEM_PERC}%)${NC}"
elif [ "$MEM_PERC" -gt 75 ]; then
    echo -e "${YELLOW}🟡 内存偏高: ${MEM_USED}/${MEM_TOTAL} (${MEM_PERC}%)${NC}"
else
    echo -e "${GREEN}🟢 内存正常: ${MEM_USED}/${MEM_TOTAL} (可用: ${MEM_AVAIL})${NC}"
fi

# 3. 磁盘使用
df -h | grep -v tmpfs | grep -v loop | awk 'NR>1 {
    sub(/%/,"",$5);
    if ($5 >= 90) printf "🔴 %s %s (%s)\n", $6, $3, $5"%";
    else if ($5 >= 75) printf "🟡 %s %s (%s)\n", $6, $3, $5"%";
    else printf "🟢 %s %s (%s)\n", $6, $3, $5"%";
}'

# 4. 僵尸进程
ZOMBIE=$(ps aux | awk '{if ($8 == "Z") print}')
if [ -n "$ZOMBIE" ]; then
    echo -e "${RED}🔴 发现僵尸进程:${NC}"
    echo "$ZOMBIE"
fi

# 5. 检查关键服务
for svc in nginx mysql docker; do
    if systemctl is-active --quiet "$svc" 2>/dev/null; then
        echo -e "${GREEN}🟢 $svc 运行正常${NC}"
    else
        echo -e "${RED}🔴 $svc 未运行!${NC}"
    fi
done

# 6. 检查失败登录
FAILED_LOGINS=$(journalctl _COMM=sshd --since "1 day ago" 2>/dev/null | grep "Failed password" | wc -l)
if [ "$FAILED_LOGINS" -gt 50 ]; then
    echo -e "${RED}🔴 SSH 暴力破解警告: 今日失败登录 ${FAILED_LOGINS} 次${NC}"
else
    echo -e "${GREEN}🟢 SSH 登录安全: 失败 ${FAILED_LOGINS} 次${NC}"
fi

# 7. 检查已挂载 NFS
mount | grep nfs | awk '{print "📁 NFS 挂载: " $1 " → " $3}'

# 8. SELinux / AppArmor 状态
if command -v getenforce &>/dev/null; then
    echo -e "🛡️  SELinux: $(getenforce)"
fi

echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} 巡检完成${NC}"
echo -e "${GREEN}========================================${NC}"

配合 crontab 实现自动巡检:

bash 复制代码
# 每天 9:00 执行巡检并发送结果到健康检查平台
0 9 * * * /opt/scripts/daily_check.sh | mail -s "📋 每日巡检报告 - $(hostname)" ops@company.com

# 每 5 分钟监控磁盘告警
*/5 * * * * /opt/scripts/disk_alert.sh

九、容器(Docker)运维

📖 知识点简介

Docker 已是标配,运维需要掌握容器生命周期管理、日志、网络、资源限制和镜像瘦身。

🔧 核心命令整理

命令 用途 关键参数
docker ps 查看容器 -a -q --format
docker logs 容器日志 -f --tail -t
docker stats 容器资源 --no-stream
docker exec 进入容器 -it
docker inspect 容器详情 --format '{{.Name}}'
docker system df 磁盘占用 -v 查看详情
docker prune 清理孤儿 -a --filter

🧪 实操示例

bash 复制代码
# 1. 查看所有运行容器的资源占用
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemPerc}}\t{{.MemUsage}}"

# 2. 查看容器日志的最后 100 行并实时追踪
docker logs -f --tail 100 my-container

# 3. 清理 7 天前的悬空镜像(配合 crontab 每周执行)
docker image prune -a --force --filter "until=168h"

# 4. 容器资源限制启动
docker run -d --name web \
  --memory="512m" --memory-reservation="256m" \
  --cpus="1.5" --pids-limit=200 \
  nginx:alpine

# 5. 批量停止并删除所有退出容器
docker rm $(docker ps -aq -f status=exited) 2>/dev/null || true

# 6. 查看容器磁盘空间占用 TOP
docker system df -v | grep -A 10 "Containers space usage:"

# 7. 安全扫描镜像
docker scout quickview nginx:alpine   # Docker Desktop 内置
trivy image nginx:latest              # 推荐:Trivy 开源扫描器

⚠️ 常见坑点

  • 日志无限增长 :默认不限制容器日志大小!必须配置:

    json 复制代码
    // /etc/docker/daemon.json
    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      }
    }
  • docker exec -it 在脚本中报错 :脚本里没有 TTY,去掉 -tdocker exec -i

  • 镜像构建不要用 latest 标签:部署必须锁定版本标签,避免意外拉取新版本导致不兼容

  • docker prune 要谨慎docker system prune -a 会删除所有未在运行的容器和未使用的镜像,确认无误再执行


十、故障处理思路总结

📖 知识点简介

遇到故障不要慌,遵循"先恢复、后定位、再根治"的原则,用系统化的排查思路替代乱枪打鸟。

🔧 排查方法论流程

bash 复制代码
问题报告
    │
    ├─ 能否访问?       ──→ ping | curl | nc → 网络层
    ├─ 响应慢?         ──→ top | free | iostat → 资源层
    ├─ 报错/异常?      ──→ tail -f logs | journalctl → 应用层
    ├─ 配置被改?       ──→ stat | diff | git log → 变更层
    └─ 重启能解决?     ──→ 临时恢复,事后查根因

🧪 常见场景速查

| 现象 | 排查命令 | 常见原因 |
|------------|---------------------------------------------|----------------------------------|---------------|
| 连接被拒绝 | ss -tlnp 检查端口 / nc -zv 确认监听 | 服务挂了 / 防火墙拦截 |
| 请求超时 | mtr -r 路由追踪 / curl -w 分时段耗时 | 网络抖动 / DNS 解析慢 |
| CPU 100% | top -b -n1perf top / strace -p PID | 死循环 / GC 频繁 / CPU 密集任务 |
| 内存 OOM | `dmesg -T | grep oom-killjournalctl -xe` | 内存泄漏 / 配置内存不足 |
| 磁盘满 | df -hdu -sh /* --exclude 逐层定位 | 日志未轮转 / 大文件堆积 |
| 连接数打满 | ss -s 统计 / ss -t state established | 连接未释放 / 被攻击 |
| 负载高但 CPU 低 | iostat -x 1%iowait | 磁盘 IO 瓶颈 / NFS 挂掉 |
| 突然断网 | ip a 检查网卡 / systemctl restart network | 网卡 down / 驱动故障 |

⚠️ 核心原则

  1. 变更回滚是第一方案:最近 15 分钟内有人改了配置?先回滚再说
  2. 别在生产环境直接调试:有灰度/预发环境先复现
  3. 保留现场证据dmesgjournalctl -u service--since "5 min ago" 的日志先保存
  4. 监控历史数据比实时数据更有价值:看 Grafana 趋势图,不是只看当前值
  5. 记录故障复盘:每次故障记录 → 补充监控告警 → 更新故障手册

📋 总结

掌握程度 能力要求
⭐ 必备 find grep sed awk ps top ss curl tail
⭐⭐ 进阶 tcpdump strace lsof iostat docker systemctl
⭐⭐⭐ 高阶 bpftrace perf ebpf promql ansible 自动化编排

好记性不如烂笔头,把这些命令用起来、写成脚本、集成到监控,才是真正的运维能力。 别一次性背完,遇到问题查一下,多用几次自然就记住了。🛠️

相关推荐
卷无止境1 小时前
现代C++ 编译器生态及其对编程规范的影响
后端
云技纵横1 小时前
一个 @Async,把 @Transactional 的事务边界打穿了
后端·面试
BothSavage2 小时前
OpenHarness源码研究-3-codex配置到输出对话
后端·架构
SimonKing2 小时前
Google第三方授权登录
java·后端·程序员
codingWhat2 小时前
能效平台设计方案(打通gitlab和飞书)
后端·node.js·koa
宋均浩2 小时前
# REST 的四个成熟度等级:为什么你不需要 Level 3
后端
万少2 小时前
22 点后,我靠这个 AI 工具成了"夜间天才程序员"
前端·后端
IT_陈寒2 小时前
React hooks 闭包陷阱把我的状态吃掉了,原来问题出在这里
前端·人工智能·后端
壹方秘境2 小时前
使用ApiCatcher在 iOS 上像修改 hosts 一样自定义域名解析
前端·后端·客户端