运维工具包
UTOOL.ASIA
常用工具与命令

运维命令
随查随用

面向日常服务器维护与故障排查,整理 Docker、Kubernetes、网络抓包和 Linux 系统工具的高频用法。

Docker

查看容器状态、日志、资源占用,以及进入容器进行排查。

查看运行中的容器

状态
docker ps --format \
  'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'

按名称、镜像、状态和端口输出表格。查看全部容器时增加 -a

持续查看容器日志

日志
docker logs --since 30m \
  --tail 200 -f <container>

显示最近 30 分钟内的末尾 200 行并持续跟踪;按 Ctrl+C 退出。

进入容器

排查
docker exec -it <container> sh

# 镜像包含 Bash 时
docker exec -it <container> bash

在运行中的容器内启动交互式 Shell。精简镜像通常只有 sh

资源与 Compose 状态

概览
docker stats --no-stream
docker compose ps
docker compose logs -f --tail 100

依次查看容器资源快照、Compose 服务状态和最近日志。

Kubernetes

快速定位 Pod、事件、日志与 Deployment 发布状态。

查看所有 Pod

状态
kubectl get pods -A -o wide

# 持续观察变化
kubectl get pods -A -w

-A 表示所有命名空间,-o wide 会补充节点、Pod IP 等信息。

查看 Pod 详情与事件

诊断
kubectl describe pod <pod> \
  -n <namespace>

kubectl get events -A \
  --sort-by=.metadata.creationTimestamp

镜像拉取、调度、健康检查等问题通常可从详情底部的 Events 开始定位。

查看 Pod 日志

日志
kubectl logs <pod> -n <namespace> \
  --tail=200 -f

# 查看上一次退出的容器
kubectl logs <pod> -c <container> \
  -n <namespace> --previous

多容器 Pod 使用 -c 指定容器;CrashLoopBackOff 时可用 --previous

进入 Pod 与检查发布

发布
kubectl exec -it <pod> \
  -n <namespace> -- sh

kubectl rollout status \
  deployment/<name> -n <namespace>

第一条进入 Pod;第二条等待 Deployment 发布完成并返回最终状态。

tcpdump

按网卡、主机、端口和 TCP 标志过滤流量,并保存为抓包文件。

列出网卡并实时抓包

基础
sudo tcpdump -D

sudo tcpdump -nn -i any \
  'host 10.0.0.8 and port 443'

-nn 禁止解析主机名和服务名,-i any 监听全部接口。

过滤 TCP 建连请求

过滤
sudo tcpdump -nn -i eth0 \
  'tcp[tcpflags] & tcp-syn != 0'

捕获带 SYN 标志的 TCP 报文,适合确认连接请求是否到达服务器。

保存和读取 pcap 文件

文件
sudo tcpdump -i eth0 -s 0 \
  -w capture.pcap 'port 8080'

tcpdump -nn -r capture.pcap

-s 0 捕获完整报文,-w 写入文件,-r 离线读取。

常用过滤表达式

速查
src host 10.0.0.8
dst port 53
tcp and portrange 8000-9000
not port 22

过滤条件可通过 andornot 组合;复杂表达式建议使用引号。

抓包通常需要 root 权限。生产环境建议限制主机、端口和抓取时长,避免生成过大的文件。

top 与 iotop

分别观察 CPU、内存、线程和磁盘 I/O 的实时占用。

top 交互查看

CPU
top

# 只观察某进程的线程
top -H -p <PID>

进入 top 后可使用以下快捷键切换视图或排序。

P CPU 排序M 内存排序1 每核状态H 线程q 退出

输出一次 top 快照

快照
top -b -n 1 | head -30

ps aux --sort=-%cpu | head

-b 使用批处理模式,便于保存现场或放入诊断脚本。

只看正在产生 I/O 的进程

磁盘 I/O
sudo iotop -oPa

-o 仅显示活跃项,-P 按进程显示,-a 累计本次运行期间的 I/O。

观察指定进程的 I/O

进程
sudo iotop -p <PID>

# 批处理输出 3 次
sudo iotop -b -n 3 -d 2

-d 2 表示两秒刷新一次;iotop 一般需要 root 权限和内核任务统计支持。

服务与日志

使用 systemd 和 journalctl 检查服务状态、启动记录和实时日志。

查看服务完整状态

systemd
systemctl status <service> \
  --no-pager -l

systemctl is-active <service>

-l 防止长行截断,is-active 适合快速判断运行状态。

读取最近服务日志

journal
journalctl -u <service> \
  -n 200 --no-pager

journalctl -u <service> -f

第一条读取最近 200 行,第二条持续跟踪新日志。

按时间与级别过滤

过滤
journalctl --since '30 min ago' \
  -p warning --no-pager

journalctl -b -1 -p err

查看最近 30 分钟的警告,以及上一次系统启动中的错误日志。

查看本次启动失败的服务

启动
systemctl --failed

journalctl -b -p err --no-pager

先定位失败单元,再结合本次启动的错误日志确认原因。

网络排查

查看监听端口、连接概览、DNS 解析和 HTTP 服务响应。

查看监听端口与进程

端口
sudo ss -lntp

# 查看连接统计
ss -s

l/n/t/p 分别表示监听、禁止名称解析、TCP 和进程信息。

检查 HTTP 响应头

HTTP
curl -sSIL --connect-timeout 5 \
  https://example.com/

curl -sS -o /dev/null \
  -w 'status=%{http_code} time=%{time_total}\n' \
  https://example.com/

分别查看跳转链与响应头,以及最终状态码和请求总耗时。

检查 DNS 解析

DNS
dig +short example.com A
dig +short example.com AAAA

getent ahosts example.com

dig 直接查询 DNS;getent 按系统实际名称解析配置查询。

查看路由路径

路由
ip route get 1.1.1.1
tracepath example.com

# 基础连通与时延
ping -c 4 example.com

依次查看本机选路、路径 MTU 与中间路径,以及 ICMP 往返时延。

磁盘与文件

确认文件系统使用率、目录占用和大文件位置。

查看文件系统使用率

容量
df -hT

# 查看 inode 使用率
df -ih

-h 使用易读单位,-T 显示文件系统类型;空间充足但无法写入时应检查 inode。

定位占用较大的目录

目录
sudo du -xhd1 /var | sort -h

sudo du -xhd1 /var/log | sort -h

-x 不跨文件系统,-d1 只统计下一层目录。

寻找大文件

文件
sudo find /var/log -xdev -type f \
  -size +500M -ls

查找当前文件系统内超过 500 MB 的普通文件。处理前先确认文件用途与保留策略。

查看打开但已删除的文件

释放空间
sudo lsof +L1

文件虽已删除但仍被进程持有时,磁盘空间不会释放;结果可用于定位对应进程。