0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

运维工程师必须掌握的10个系统命令

马哥Linux运维 来源:马哥Linux运维 2026-03-23 10:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1. 命令概述与分类

1.1 为什么要掌握这些命令

系统命令是运维工程师与服务器交互的基础工具。虽然现代运维工作有大量的自动化工具和平台,但掌握核心系统命令仍然必要。命令行工具响应速度快、不依赖图形界面、可以组合使用应对复杂场景。在服务器故障的紧急情况下,命令行往往是最高效的诊断和处置手段。

运维工作中常见的问题场景包括:服务器SSH连接不上、业务响应超时、磁盘空间爆满、进程异常退出。这些问题的排查往往需要在命令行环境下进行快速诊断。掌握核心命令可以大幅缩短故障排查时间,提升运维效率。

系统命令的掌握程度直接影响运维工作的效率。一位熟练掌握系统命令的工程师,可以在几分钟内定位问题,而经验不足的工程师可能需要几小时。命令的组合使用可以应对各种复杂场景,这是图形化工具难以替代的。

1.2 命令分类

本文将10个核心命令分为五类:

系统监控类包括top、htop用于进程和资源监控;vmstat用于虚拟内存统计;iostat用于磁盘IO统计。这类命令帮助运维人员快速了解系统负载情况。

网络诊断类包括netstat、ss用于网络连接状态查看;tcpdump用于网络数据包抓取;lsof用于文件与端口关联查看。这类命令是网络故障排查的利器。

磁盘分析类包括df、du用于磁盘空间分析。这类命令帮助运维人员快速定位磁盘空间问题。

文本处理类包括find、awk、sed用于文本搜索和处理。这类命令在日志分析和配置处理场景中使用频繁。

服务管理类包括systemctl、service用于服务启停管理;rsync用于数据同步。这类命令是日常运维的基本操作。

2. 命令详解

2.1 top与htop

top是Linux下最常用的进程监控命令,实时显示系统的整体状态和各个进程的资源占用情况。top默认每3秒刷新一次数据,可以通过-d参数调整刷新间隔。

top输出的第一行是系统负载信息,包含当前时间、系统运行时间、当前登录用户数、1分钟/5分钟/15分钟平均负载。负载数值如果持续高于CPU核心数,说明系统存在性能瓶颈。

top - 1030 up 100 days, 3:22, 2 users, load average: 1.25, 0.98, 0.85

load average的三个数字分别代表1分钟、5分钟、15分钟的平均负载。判断负载是否过高需要结合CPU核心数:8核CPU的负载不超过8算正常,超过8说明负载过高。

第二行是进程统计信息,显示总进程数、运行中的进程数、睡眠中的进程数、停止的进程数、僵尸进程数。僵尸进程数如果大于0,需要检查对应的父进程。

Tasks: 245 total,  3 running, 242 sleeping,  0 stopped,  0 zombie

第三行和第四行是CPU和内存使用情况的汇总。CPU行的us表示用户空间占用比例,sy表示内核空间占用比例,id表示空闲比例。如果wa(等待IO)数值持续较高,说明系统存在IO瓶颈。

%Cpu(s): 25.3 us, 5.2 sy, 0.0 ni, 68.5 id, 0.0 wa, 0.8 hi, 0.2 si, 0.0 st
KiB Mem : 32768032 total, 8192000 free, 16384000 used, 8192032 buff/cache

进程列表默认按CPU使用率排序,可以通过P(大写)切换到CPU排序,M切换到内存排序,T切换到运行时间排序。按q键退出top。

top交互命令汇总:

按键 功能
q 退出top
P 按CPU使用率排序
M 按内存使用率排序
T 按运行时间排序
1 切换显示每个CPU核心
c 显示完整命令行
k 终止进程
r 调整进程优先级
u 按用户过滤
n 设置显示进程数量
W 保存配置到文件

htop是top的增强版本,提供了更友好的界面和更多功能。htop支持鼠标操作,颜色区分不同类型进程,可以水平滚动查看完整命令行参数。htop还可以直接向进程发送信号,支持进程树视图。

htop界面布局:

 CPU [|||||||||||||||||||||||||||||||||||||||] 85%
 Mem [|||||||||||||||||||||||||||||||||||||] 72%
 Swp [||                    ]  5%

 PID  USER  PRI NI VIRT  RES  SHR S CPU% MEM%  TIME+ Command
1234 nginx  20  0 128M  64M  12M R 45.2 12.5 15:32.11 nginx: worker
5678 mysql  20  0 2.1G  1.8G 156M S 25.0  5.5  2:45.33 mysqld
9012 redis  20  0 45M  32M  8M S 10.5  3.2  0:23.11 redis-server

htop常用快捷键:

按键 功能
F1 帮助
F2 设置
F3 搜索进程
F4 过滤器
F5 树形视图
F6 排序
F7/F8 调整nice值
F9 发送信号
F10 退出

使用场景举例:服务器响应缓慢时,使用top查看是哪个进程占用CPU或内存最高。如果发现某个Java进程CPU占用100%,需要进一步使用jstack分析线程堆栈。

# 查找CPU占用最高的进程
top -c

# 查看特定用户的进程
top -u nginx

# 实时监控,每秒刷新
top -d 1

# 查看所有CPU核心的使用情况
top - 1

# 保存top输出到文件
top -b -n 1 > top_output.txt

2.2 netstat与ss

netstat是查看网络连接状态的经典命令,可以显示网络协议统计信息和网络连接状态。netstat的常用参数组合是-anp,其中-a显示所有连接,-n不解析主机名和服务名,-p显示进程信息。

netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address      Foreign Address     State    PID/Program name
tcp    0   0 0.0.0.0:22       0.0.0.0:*        LISTEN   1234/sshd
tcp    0   48 10.0.0.5:22       192.168.1.100:54321  ESTABLISHED 1234/sshd
tcp    0   0 127.0.0.1:631      0.0.0.0:*        LISTEN   4567/cupsd
tcp    0   0 0.0.0.0:3306      0.0.0.0:*        LISTEN   7890/mysqld

netstat的输出包含协议类型、本地地址、外部地址、状态、进程ID和进程名称。状态列显示TCP连接的状态,常见状态包括LISTEN(监听中)、ESTABLISHED(已建立)、TIME_WAIT(等待关闭)、CLOSE_WAIT(等待关闭)。

TCP连接状态说明:

状态 说明
LISTEN 等待连接,服务器socket正在监听
ESTABLISHED 连接已建立,双方可以传输数据
TIME_WAIT 等待足够时间确保对方收到关闭请求
CLOSE_WAIT 等待本地应用程序关闭连接
SYN_SENT 正在发送连接请求
SYN_RECV 收到连接请求并发送确认
FIN_WAIT1 主动关闭,发送FIN
FIN_WAIT2 收到确认,等待对方关闭
CLOSING 双方同时关闭
LAST_ACK 最后确认,等待接收

使用netstat可以统计当前各种状态的连接数量:

# 统计ESTABLISHED连接数量
netstat -an | grep ESTABLISHED | wc -l

# 统计TIME_WAIT连接数量
netstat -an | grep TIME_WAIT | wc -l

# 统计各状态的连接数量
netstat -an | awk'/^tcp/ {print $6}'| sort | uniq -c

# 查看监听中的端口
netstat -lntp

# 查看所有TCP连接
netstat -anp | grep tcp

# 查看特定端口的连接
netstat -anp | grep :80

# 查看网络统计信息
netstat -s

ss是netstat的现代替代工具,采用iproute2架构,性能更好且输出信息更详细。ss -tunap可以列出所有TCP和UDP连接,显示完整的五元组信息和进程信息。

ss -tunap
Netid State  Recv-Q  Send-Q  Local Address:Port       Peer Address:Port        Process
tcp  LISTEN 0    128   0.0.0.0:22           0.0.0.0:*          users:(("sshd",pid=1234,fd=3))
tcp  ESTAB  0    0    10.0.0.5:22           192.168.1.100:54321     users:(("sshd",pid=5678,fd=4))
tcp  LISTEN 0    80    0.0.0.0:3306          0.0.0.0:*          users:(("mysqld",pid=7890,fd=10))
udp  UNCONN 0    0    0.0.0.0:68           0.0.0.0:*          users:(("dhclient",pid=1011,fd=5))

ss相比netstat的优势在于查询速度。在大量连接的场景下,netstat可能需要数秒才能返回结果,ss几乎是即时返回。ss还支持更多的过滤条件。

# 查看所有TCP连接
ss -t

# 查看所有UDP连接
ss -u

# 查看监听中的 sockets
ss -l

# 显示进程信息
ss -p

# 显示概要统计
ss -s

# 过滤特定状态
ss -t state established

# 过滤特定端口
ss -t sport = :80

# 过滤特定地址
ss -t dst 10.0.0.1

# 组合过滤
ss -t state established'( sport = :http or dport = :http )'

# 显示详细信息
ss -tunap

使用场景举例:服务端口连接数过多导致性能下降时,使用ss -s统计各类状态的连接数量,使用ss -tan dst :8080查看连接8080端口的所有连接,定位异常的客户端IP。

# 统计连接状态分布
ss -s

# 查看8080端口的所有连接
ss -tan dst :8080

# 查看来自特定IP的连接
ss -tan src 192.168.1.100

# 查看连接数最多的前10个IP
ss -tan | awk'{print $5}'| cut -d: -f1 | sort | uniq -c | sort -rn | head -10

# 查看socket缓冲区大小
ss -tm

# 查看TCP握手详细信息
ss -ti

2.3 lsof

lsof是list open files的缩写,用于查看进程打开的文件。在Linux系统中,一切皆文件,包括网络连接、管道、设备文件等。lsof通过分析内核的进程文件表获取信息。

lsof -p 1234
COMMAND PID USER  FD  TYPE DEVICE SIZE/OFF  NODE NAME
nginx  1234 nginx cwd  DIR 253,1   4096  128 /
nginx  1234 nginx rtd  DIR 253,1   4096  128 /
nginx  1234 nginx txt  REG 253,1 123456 1024 /usr/sbin/nginx
nginx  1234 nginx mem  REG 253,1 789012 2048 /lib/x86_64/libcrypto.so
nginx  1234 nginx  0r  CHR  1,3   0t0  1024 /dev/null
nginx  1234 nginx  1w  REG 253,1 123456 4096 /var/log/nginx/access.log
nginx  1234 nginx  2w  REG 253,1  8192 4100 /var/log/nginx/error.log
nginx  1234 nginx  3u IPv4  12345   0t0  TCP *:80 (LISTEN)
nginx  1234 nginx  4u IPv4  12346   0t0  TCP *:443 (LISTEN)

lsof的常用参数包括:-i显示网络连接文件,-p指定进程ID,-u指定用户,-c指定命令名称。不带参数运行lsof会列出所有打开的文件,信息量很大,通常需要配合过滤条件使用。

# 查看占用80端口的进程
lsof -i:80

# 查看所有网络连接
lsof -i

# 查看特定协议的网络连接
lsof -i TCP
lsof -i UDP

# 查看特定进程打开的文件
lsof -p 1234

# 查看特定用户打开的文件
lsof -u nginx

# 查看特定命令打开的文件
lsof -c nginx

# 查看目录下的文件被哪些进程使用
lsof +D /var/log

# 递归查看目录下被使用的文件
lsof +D /var/log/nginx/

# 查看文件被哪些进程使用
lsof /var/log/nginx/access.log

# 查看IPv6连接
lsof -i6

# 查看端口范围
lsof -i:80-443

# 查看X Window连接
lsof -i @localhost:6000

使用场景举例:磁盘空间显示已满,但找不到大文件时,使用lsof +D /path检查是否有进程打开了已删除的文件。文件删除后,磁盘空间不会立即释放,只有进程关闭文件句柄后才会释放。

# 检查打开已删除文件的进程
lsof +L1

# 检查打开大量文件的进程
lsof -p 1234 | wc -l

# 查看某个用户的所有网络连接
lsof -a -u nginx -i

# 查看所有Listening sockets
lsof -i -sTCP:LISTEN

# 查看网络文件系统
lsof -N

# 查看字符设备
lsof -c ^nginx

# 查看Unix Domain Socket
lsof -U

# 查看FD类型
lsof -d txt,mem

# 检查特定UID用户
lsof -u 1000

# 组合条件
lsof -u nginx -i -a -p 1234

2.4 df与du

df(disk free)用于查看文件系统磁盘空间使用情况,是排查磁盘空间问题的第一个命令。df -h以人类可读格式显示,-T显示文件系统类型。

df -h
Filesystem   Size Used Avail Use% Mounted on
/dev/sda1    100G  45G  55G 45% /
/dev/sda2    200G 120G  80G 60% /var/lib/kubelet
/dev/sdb1    500G 300G 200G 60% /var/lib/containerd
tmpfs      64M   0  64M  0% /dev/shm
tmpfs      7.8G  12M 7.8G  1% /run
/dev/mapper/centos-home
        50G  48G  2G 96% /home

df的输出包含文件系统名称、总大小、已用大小、可用大小、已用百分比、挂载点。已用百分比是判断磁盘空间是否紧张的关键指标,建议设置告警阈值。

inode使用情况也需要关注。df -i显示inode使用情况。inode用于存储文件的元数据,当inode耗尽时,即使磁盘还有空间也无法创建新文件。大量小文件场景容易出现inode耗尽问题。

df -i
Filesystem    Inodes IUsed  IFree IUse% Mounted on
/dev/sda1   6553600 234567 6319033  4% /
/dev/sda2   32768000 456789 32311211  2% /var
/dev/mapper/centos-home
       3276800 123456 3153344  4% /home

du(disk usage)用于分析目录和文件的磁盘使用量。du -sh /path显示指定路径的总大小,-h以人类可读格式,-s汇总统计。du -sh *显示当前目录下各子目录的大小。

du -sh /var
45G   /var

du -sh /var/*
12G   /var/log
8G   /var/lib
5G   /var/cache
20G   /var/spool

du支持按时间排序。du --time -sh *按修改时间显示大小。du -ah --max-depth=1显示指定深度的文件分布情况。

# 查看当前目录各子目录大小
du -sh *

# 查看特定目录大小
du -sh /var/log

# 显示文件大小
du -ah /var/log

# 按大小排序显示
du -sh * | sort -h

# 显示目录和文件大小(限制深度)
du -ah --max-depth=1 /var

# 显示修改时间
du -sh --time=modification /var/*

# 排除特定目录
du -sh --exclude='*.log'/var

# 查看所有文件系统使用情况
df -ah

# 查看inode使用情况
df -i

# 统计某类型文件大小
find /var -name"*.log"-execdu -ch {} + | tail -1

# 查看磁盘IO
iostat -x 1

使用场景举例:磁盘空间不足时,使用du -sh /*从根目录开始逐级排查,找到占用空间最大的目录或文件。日志目录、临时文件目录、缓存目录通常是磁盘空间的主要消耗者。

# 从根目录开始逐级排查
du -h --max-depth=1 /

# 查看特定目录下最大的10个文件
find /var -typef -execdu -h {} + | sort -rh | head -10

# 查看日志文件大小分布
find /var/log-typef -name"*.log"-execdu -h {} + | sort -rh

# 查看临时目录
du -sh /tmp

# 查看用户目录
du -sh /home/*

# 统计特定用户使用的空间
du -sh /home/nginx

# 排除已删除但被进程打开的文件
du -h --exclude='proc'/proc

# 实时监控目录变化
watch -n 1'du -sh /var'

2.5 iostat与vmstat

iostat是iostatistics的缩写,用于监控系统磁盘IO和CPU使用情况。iostat -xz 1每秒刷新一次详细统计,-x显示扩展统计,-z忽略没有活动的设备。

iostat -xz 1
Linux 6.1.0-k8s (node-1)   03/20/2026   _x86_64_    (4 CPU)

avg-cpu: %user  %nice %system %iowait %steal   %idle
     15.23  0.00  5.12  2.34  0.00   77.31

Device: rrqm/s  wrqm/s  r/s  w/s  rkB/s  wkB/s avgrq-sz avgqu-sz  await r_await w_await %util
sda     0.12  12.34  2.45 45.67  198.23 4567.89  98.45   1.23  5.67  2.34  6.12  5.67
sdb     0.00   0.00  0.00  0.00   0.00   0.00   0.00   0.00  0.00  0.00  0.00  0.00

iostat输出的关键指标包括:%util设备利用率,接近100%时说明设备达到IO瓶颈;r/s和w/s每秒读写次数;rkB/s和wkB/s每秒读写数据量;await平均IO等待时间;avgqu-sz平均队列长度。

await和%util是两个最关键的指标。await高但%util不高,说明IO延迟大但设备本身未饱和,可能是存储网络延迟问题。%util高但await正常,说明设备本身是瓶颈。

vmstat(virtual memory statistics)用于查看虚拟内存统计信息。vmstat 1每秒刷新一次,-s显示详细统计表。

vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b  swpd  free  buff cache  si  so  bi  bo in cs us sy id wa st
3 0   0 2048576 312456 4567890  0  0   5  12 1234 8567 25 5 68 2 0

vmstat输出的关键列包括:r运行队列长度,表示等待CPU的进程数;b阻塞队列长度,表示等待IO的进程数;swpd虚拟内存使用量;free空闲内存;si/so换入换出内存量;us/sy/id CPU用户/系统/空闲比例。

# 每秒显示一次
vmstat 1

# 显示5次后退出
vmstat 1 5

# 显示详细统计
vmstat -s

# 显示内存统计(MB为单位)
vmstat -S m 1

# 显示磁盘统计
vmstat -d

# 显示每CPU核心统计
vmstat -p /dev/sda1

# 配合grep监控特定指标
vmstat 1 | grep -E'r|wa'

使用场景举例:系统负载高但CPU空闲时,使用vmstat查看是否有大量进程在等待IO。使用iostat查看是哪个设备存在IO瓶颈。如果%util接近100%,说明设备处理能力不足,需要考虑升级存储或优化IO模式。

# 综合使用
iostat -xz 1 &
vmstat 1 &
pidstat -d 1

# 查看CPU和IO关系
iostat -x 1 5

# 监控特定设备
iostat -p sda 1

# 查看CPU频率
vmstat -s | grep -i cpu

# 监控上下文切换
vmstat 1 10

# 查看内存详情
vmstat -s -S m

# 监控系统负载
uptime
w

2.6 strace与ltrace

strace用于追踪进程的系统调用和信号,是排查程序行为和性能问题的有力工具。strace -f -p PID追踪指定进程及其子进程,-c统计各类系统调用次数和耗时。

strace -c -p 1234
strace: Process 1234 attached
^Cstrace: Process 1234 detached
% time   seconds usecs/call   calls  errors  syscall
------ ----------- ----------- --------- --------- ----------------
45.23  0.123456     123   1000     read
25.67  0.070123      70   1000      write
15.34  0.041890      41   1000      select
10.12  0.027654      27   1000      fcntl
 3.45  0.009432      10   1000      gettimeofday
------ ----------- ----------- --------- --------- ----------------
100.00  0.272555          5000      total

strace的输出包含每行一个系统调用,显示调用号、函数名、参数和返回值。read(fd, buffer, count)显示读取操作,write(fd, buffer, count)显示写入操作,openat(pathname, flags)显示文件打开操作。

strace -T显示每个系统调用的耗时,-tt显示微秒级时间戳。耗时信息对于性能分析非常重要,长时间等待的系统调用往往是性能瓶颈。

# 追踪进程系统调用
strace -p 1234

# 追踪并显示返回值
strace -i -p 1234

# 统计系统调用次数
strace -c -p 1234

# 显示时间戳
strace -t -p 1234

# 显示微秒级时间
strace -tt -p 1234

# 显示每个调用耗时
strace -T -p 1234

# 追踪特定系统调用
strace -e trace=read,write,open,close -p 1234

# 追踪网络相关调用
strace -e trace=network -p 1234

# 追踪信号
strace -e trace=signal -p 1234

# 追踪子进程
strace -f -p 1234

# 输出到文件
strace -o /tmp/strace.log -p 1234

# 限制输出行数
strace -q -p 1234

# 显示系统调用号
strace -r -p 1234

ltrace用于追踪进程调用的库函数。使用ltrace -p PID追踪指定进程,-c统计库函数调用次数。ltrace主要追踪动态库函数调用,适合分析程序与库的交互。

# 追踪库函数调用
ltrace -p 1234

# 统计库函数调用次数
ltrace -c -p 1234

# 追踪特定库函数
ltrace -e malloc,free -p 1234

# 显示返回值
ltrace -i -p 1234

# 追踪子进程
ltrace -f -p 1234

# 输出到文件
ltrace -o /tmp/ltrace.log -p 1234

使用场景举例:程序卡住无响应时,使用strace -p PID查看进程正在执行的系统调用。如果显示connect或read阻塞,说明可能在等待网络通信或文件读取。如果某个系统调用反复返回-1,说明可能存在系统资源或权限问题。

# 分析nginx worker进程
strace -p $(pgrep -f"nginx: worker"| head -1) -c

# 分析进程正在做什么
strace -p 1234 2>&1 | head -50

# 追踪失败的调用
strace -e trace=open,openat -p 1234 2>&1 | grep -E"ENOENT|Permission"

# 追踪TCP连接
strace -e trace=socket,connect,accept -p 1234

# 分析文件操作
strace -e trace=open,read,write,close -p 1234

# 分析CPU密集型进程
strace -c -p 1234

# 追踪正在运行的命令
strace -f -o /tmp/trace.log 

# 分析动态库加载
ltrace -e dlopen -p 1234

2.7 tcpdump与Wireshark

tcpdump是命令行网络抓包工具,用于捕获和分析网络数据包。tcpdump -i eth0 -nn host 10.0.0.1捕获eth0网卡上与10.0.0.1通信的数据包,-nn不解析主机名和服务名。

tcpdump -i eth0 -nn host 10.0.0.1
tcpdump: verbose output suppressed, use -v or -vvforfull protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
1030.123456 IP 10.0.0.1.443 > 10.0.0.2.54321: Flags [P.], seq 12345:12356, ack 67890, win 502, length 11
1030.123789 IP 10.0.0.2.54321 > 10.0.0.1.443: Flags [.], ack 12356, win 502, length 0
1030.124012 IP 10.0.0.1.443 > 10.0.0.2.54321: Flags [P.], seq 12356:12367, ack 67890, win 502, length 11

tcpdump的输出格式是:时间戳 协议 源地址.端口 > 目标地址.端口 标志信息。TCP包的标志信息包括S(SYN)、F(FIN)、P(PUSH)、R(RST)。三次握手显示为S、S.、F。TCP连接终止显示为F.、.F。

tcpdump支持丰富的过滤表达式。tcpdump port 80 and tcp[13]&2!=0捕获所有TCP的SYN包(发起连接)。tcpdump tcp and greater 1000捕获大于1000字节的TCP包。

# 捕获特定接口
tcpdump -i eth0

# 捕获所有接口
tcpdump -i any

# 捕获特定主机
tcpdump host 10.0.0.1

# 捕获特定端口
tcpdump port 80

# 捕获特定协议
tcpdump icmp

# 捕获特定网络
tcpdump net 192.168.1.0/24

# 组合条件
tcpdump -i eth0 host 10.0.0.1 and port 80

# 不解析地址和端口
tcpdump -nn

# 显示完整数据包内容
tcpdump -X

# 显示ASCII内容
tcpdump -A

# 保存到文件
tcpdump -w /tmp/capture.pcap

# 读取抓包文件
tcpdump -r /tmp/capture.pcap

# 显示详细输出
tcpdump -v

# 显示更详细输出
tcpdump -vv

# 限制抓包数量
tcpdump -c 100

# 限制抓包大小
tcpdump -s 100

# 打印链路层头
tcpdump -e

Wireshark是图形化的网络协议分析工具,提供更强大的分析功能。Wireshark支持更丰富的协议解析,可以自动重组TCP流,提供统计和图表功能。

Wireshark常用过滤器:

# 显示过滤器
ip.addr == 10.0.0.1
tcp.port == 80
tcp.flags.syn == 1
tcp.flags.reset == 1
http.request.method =="GET"
dns.qry.name contains"example.com"

# 捕获过滤器
host 10.0.0.1
port 80
tcp[tcpflags] & (tcp-syn|tcp-fin) != 0

使用场景举例:服务连接超时排查。使用tcpdump -i any host target_ip and port target_port -w capture.pcap在问题发生时捕获数据包,然后在Wireshark中分析TCP三次握手是否正常,是否存在丢包或重传。

# 捕获HTTP请求
tcpdump -i any -A'tcp port 80 andtcp[((tcp[12:1] & 0xf0) >> 2):2] = 0x474554'

# 捕获DNS查询
tcpdump -i any -A'udp port 53'

# 捕获TCP重传
tcpdump -i any'tcp[tcpflags] & (tcp-retrans) != 0'

# 捕获TCP连接建立
tcpdump -i any'tcp[tcpflags] & (tcp-syn) != 0 andtcp[tcpflags] & (tcp-ack) == 0'

# 捕获SSL/TLS握手
tcpdump -i any'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x160301'

# 分析网络延迟
tcpdump -i any -tttt'tcp port 80'

# 捕获ICMP
tcpdump -i any'icmp'

# 捕获ARP
tcpdump -i any'arp'

# 捕获VLAN标记
tcpdump -i any -vlan

2.8 find、awk与sed

find用于在目录树中查找文件,支持按文件名、类型、大小、时间等条件搜索。

# 基本查找
find /path -name"*.log"
find /path -typef
find /path -typed

# 按权限查找
find /path -perm 644
find /path -perm -u+x

# 按大小查找
find /path -size +100M
find /path -size -1G

# 按时间查找
find /path -mtime -7    # 7天内修改
find /path -atime +30   # 30天前访问
find /path -ctime 0    # 当天状态改变

# 按所有者查找
find /path -user nginx
find /path -group www-data

# 执行动作
find /path -name"*.tmp"-delete
find /path -name"*.log"-execrm {} ;
find /path -name"*.log"-execls -lh {} ;

# 排除目录
find /path -path"*/proc"-prune -o -typef -print

# 查找空文件
find /path -typef -empty

# 查找符号链接
find /path -typel

# 查找最近修改的文件
find /path -mmin -60    # 60分钟内修改

# 查找并移动
find /path -name"*.bak"-execmv {} /backup/ ;

# 查找并压缩
find /path -name"*.log"-execgzip {} ;

awk是一种文本处理语言,适合处理结构化文本数据。

# 基本用法
awk'{print $1, $3}'file     # 打印第1和第3列
awk -F:'{print $1}'/etc/passwd  # 指定分隔符
awk'{print NF}'file        # 打印列数
awk'{print NR}'file        # 打印行号

# 条件过滤
awk'/pattern/ {print $0}'file  # 包含模式的行
awk'$3 > 100 {print $0}'file   # 第3列大于100
awk'$1 == "value" {print $0}'file# 第1列等于value

# 计算统计
awk'{sum+=$1} END {print sum}'file
awk'{sum+=$1; count++} END {print sum/count}'file
awk'{if($1>max) max=$1} END {print max}'file

# 多字段处理
awk -F:'{print $1, $NF}'/etc/passwd

# 字符串函数
awk'{print toupper($1)}'file
awk'{print length($1)}'file
awk'{print substr($1, 1, 5)}'file

# 格式化输出
awk'{printf "%-10s %10.2f
", $1, $2}'file

日志分析awk示例:

# Nginx访问日志分析
# 格式: $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent
awk'{print $1}'access.log | sort | uniq -c | sort -rn | head -20 # TOP 20 IP
awk'{print $9}'access.log | sort | uniq -c | sort -rn | head -10 # TOP 10 状态码
awk'{sum+=$10} END {print sum/1024/1024 " MB"}'access.log    # 总流量
awk'$9 >= 500 {count++} END {print count}'access.log       # 5xx错误数

# Apache日志分析
awk'{print $7}'access.log | sort | uniq -c | sort -rn | head -10 # TOP URL

# SSH登录日志分析
awk'/Failed password/ {print $11}'/var/log/secure | sort | uniq -c | sort -rn | head -10
awk'/Accepted/ {print $9, $11}'/var/log/secure

sed是一种流编辑器,用于对文本进行替换、删除、插入等操作。

# 基本替换
sed's/old/new/'file       # 替换每行第一个
sed's/old/new/g'file       # 替换所有
sed's/old/new/2'file       # 替换每行第二个

# 原地编辑
sed -i's/old/new/g'file     # 直接修改文件
sed -i.bak's/old/new/g'file   # 修改并备份

# 多重替换
sed -e's/a/b/'-e's/c/d/'file

# 排除行
sed'/pattern/d'file       # 删除匹配行
sed'/pattern/!d'file       # 删除不匹配行

# 插入和追加
sed'1iheader'file        # 在第1行前插入
sed'1aline'file         # 在第1行后追加
sed'/pattern/aline'file     # 在匹配行后追加

# 替换多行
sed'/start/,/end/s/old/new/g'file

# 使用正则
sed -r's/regex/new/g'file
sed's/.*prefix(.*)suffix.*/1/'file # 捕获组

# 打印行
sed -n'10,20p'file        # 打印第10-20行
sed -n'/pattern/p'file      # 打印匹配行

# 替换tab为空格
sed's/	/ /g'file

# 去除空格
sed's/^[ 	]*//'file      # 行首
sed's/[ 	]*$//'file      # 行尾
sed's/[ 	]*//g'file      # 所有空格

使用场景举例:分析nginx访问日志统计IP访问量。

# 统计IP访问量
awk'{print $1}'access.log | sort | uniq -c | sort -rn | head -20

# 统计状态码分布
awk'{print $9}'access.log | sort | uniq -c | sort -rn

# 统计带宽使用
awk'{sum+=$10} END {print sum/1024/1024 " MB"}'access.log

# 统计5xx错误
awk'$9 ~ /^5/ {count++} END {print count}'access.log

# 统计访问最频繁的URL
awk'{print $7}'access.log | sort | uniq -c | sort -rn | head -10

# 统计每秒请求数
awk'{print $4}'access.log | cut -d: -f2,3,4 | sort | uniq -c | sort -rn | head -10

# 统计HTTP方法分布
awk'{print $6}'access.log | tr -d'"'| sort | uniq -c | sort -rn

# 实时分析日志
tail -f access.log | awk'{print $1}'| sort | uniq -c | sort -rn

# 查找异常IP
awk'{print $1}'access.log | sort | uniq -c | sort -rn | awk'$1 > 1000 {print $2}'

# 替换日志中的敏感信息
sed -i's/password=[^&]*/password=REDACTED/g'app.log
sed -i's/token=[^&]*/token=REDACTED/g'app.log

2.9 rsync

rsync是远程数据同步工具,支持增量同步和本地同步。

# 本地同步
rsync -avzsource/ dest/

# 远程同步
rsync -avzsource/ user@host:/dest/
rsync -avz user@host:/source/ dest/

# SSH指定端口
rsync -avz -e"ssh -p 2222"source/ user@host:/dest/

# 显示差异
rsync -avzisource/ dest/

# 增量同步(只传输变化的部分)
rsync -avz --deletesource/ dest/

# 排除文件
rsync -avz --exclude='*.log'source/ dest/
rsync -avz --exclude-from='exclude.txt'source/ dest/

# 包含文件
rsync -avz --include='*.php'--include='*/'--exclude='*'source/ dest/

# 压缩传输
rsync -avz --compresssource/ dest/

# 保留权限和时间戳
rsync -avzsource/ dest/

# 显示进度
rsync -avz --progresssource/ dest/

# 限制带宽
rsync -avz --bwlimit=1000source/ dest/

# dry-run(模拟执行)
rsync -avznsource/ dest/

# 同步符号链接
rsync -avzLsource/ dest/

# 保留硬链接
rsync -avzHsource/ dest/

rsync的核心优势是增量同步。只传输源和目标之间差异的部分,通过快速检查文件大小和修改时间实现。

# 文件权限对应关系
# rsync参数 -p = --perms
# rsync参数 -o = --owner
# rsync参数 -g = --group
# rsync参数 -t = --times
# rsync参数 -D = --devices --specials

# 完整参数示例
rsync -avz --delete 
 --exclude='.git'
 --exclude='node_modules'
 --exclude='*.log'
 --progress 
 --stats 
source/ user@host:/dest/

使用场景举例:网站文件同步。

# 保持两台Web服务器内容一致
rsync -avz --delete /var/www/html/ user@web-server:/var/www/html/

# 同步到多个目标
forhostinweb1 web2 web3;do
 rsync -avz /var/www/html/ user@$host:/var/www/html/
done

# 定时同步脚本
0 */6 * * * rsync -avz --delete /data/ backup@backup-server:/backup/

# 同步时排除特定目录
rsync -avz --exclude='cache'--exclude='tmp'/var/www/html/ /dest/

# 使用rsync daemon方式
rsync -avz /source/ rsync://user@host/module/

# 限速传输避免影响业务
rsync -avz --bwlimit=5000 /source/ /dest/

2.10 systemctl与service

systemctl是systemd系统的管理工具,是现代Linux发行版的标准服务管理命令。

# 服务管理
systemctl start nginx     # 启动服务
systemctl stop nginx     # 停止服务
systemctl restart nginx   # 重启服务
systemctl reload nginx   # 重新加载配置
systemctl status nginx    # 查看状态
systemctlenablenginx   # 开机自启
systemctldisablenginx   # 取消开机自启
systemctl daemon-reload   # 重载systemd配置

# 查看服务
systemctl list-units --type=service     # 列出所有服务
systemctl list-units --type=service --state=running
systemctl list-dependencies nginx       # 服务依赖关系

# 服务日志
journalctl -u nginx       # 服务日志
journalctl -u nginx -n 50   # 最近50行
journalctl -u nginx -f     # 实时跟踪
journalctl --since"1 hour ago"# 指定时间范围

# 服务配置
systemctl show nginx      # 显示服务配置
systemctl cat nginx      # 查看服务文件
systemctl edit nginx      # 编辑服务配置

service是较老的服务管理命令,兼容SysVinit脚本。

# 基本用法
service nginx start
service nginx stop
service nginx restart
service nginx status
service --status-all      # 列出所有服务

# 检查特定服务
service sshd status
service httpd configtest    # 检查配置语法

systemd服务文件示例:

[Unit]
Description=nginx HTTP Server
Documentation=https://nginx.org/en/docs/
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStart=/usr/sbin/nginx -g daemon on; master_process on;
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

使用场景举例:服务故障排查。

# 查看服务状态
systemctl status nginx

# 查看详细日志
journalctl -u nginx -n 100 --no-pager

# 检查配置文件语法
nginx -t

# 测试服务启动
systemctl start nginx

# 查看服务是否监听端口
ss -tlnp | grep nginx

# 检查进程
ps aux | grep nginx

# 强制重启
systemctl force-reload nginx

# 屏蔽服务
systemctl mask nginx
systemctl unmask nginx

3. 命令组合实战场景

3.1 服务器负载高排查

服务器负载高是常见的运维问题,排查思路是逐步定位是CPU、IO还是内存问题。

第一步,使用top或vmstat 1查看系统负载和CPU使用情况。如果CPU的us和sy很高,说明是CPU密集型任务占用大量CPU资源。如果CPU的wa很高,说明是IO等待导致。

# 查看系统状态
top
vmstat 1 5

# 查看CPU使用情况
mpstat -P ALL 1

# 查看进程状态
ps aux --sort=-%cpu | head -10
ps aux --sort=-%mem | head -10

第二步,如果确定是CPU问题,使用top按CPU排序查看最消耗CPU的进程。如果Java进程CPU占用高,使用jstack获取线程堆栈,分析哪个线程占用CPU高。

# 获取Java进程PID
jps -l
ps aux | grep java

# 获取线程堆栈
jstack PID > threaddump.txt

# 获取CPU使用最高的线程
top -Hp PID

# 获取进程的CPU使用情况
pidstat -p PID 1 5

第三步,如果确定是IO问题,使用vmstat查看b列是否有进程在等待IO。使用iostat查看哪个设备的%util高。

# 查看IO等待
vmstat 1

# 查看各设备IO情况
iostat -xz 1

# 查看哪个进程在进行IO
iotop

# 查看具体IO操作
lsof +D /

第四步,确定问题进程后,分析问题原因。CPU高可能是死循环、大量计算、夜间批处理任务触发。IO高可能是大量日志写入、数据库写入、文件扫描。

3.2 网络连接问题排查

网络连接问题的表现可能是SSH连接不上、服务访问超时、连接数异常等。

第一步,使用ping测试网络连通性。ping不通可能的原因包括:网络配置错误、防火墙拦截、链路故障。

# 测试基本连通性
ping -c 4 8.8.8.8
ping -c 4 gateway

# 路由追踪
traceroute 8.8.8.8
mtr 8.8.8.8

# DNS测试
nslookup google.com
dig google.com

第二步,如果ping通但服务访问异常,使用netstat或ss查看连接状态。

# 查看连接统计
netstat -an | awk'/^tcp/ {print $6}'| sort | uniq -c
ss -s

# 查看监听端口
netstat -tlnp
ss -tlnp

# 查看特定连接状态
netstat -an | grep ESTABLISHED
ss -tan state established

第三步,使用tcpdump抓包分析。

# 抓取特定端口的包
tcpdump -i any port 80 -nn

# 抓取特定主机的包
tcpdump -i any host 10.0.0.1 -nn

# 保存到文件
tcpdump -i any port 80 -w capture.pcap

# 分析三次握手
tcpdump -i any host target_ip and port target_port -nn

第四步,检查防火墙规则。

# 查看iptables规则
iptables -L -n -v
iptables -L -n -v --line-numbers

# 查看端口监听
netstat -tlnp
ss -tlnp

# 检查防火墙状态
systemctl status firewalld
systemctl status iptables

3.3 磁盘空间问题排查

磁盘空间不足会导致服务异常、写入失败等问题。

第一步,使用df -h查看各文件系统的空间使用情况。

df -h
df -i

第二步,使用du -sh /*从根目录逐级排查,找出占用空间大的目录。

du -h --max-depth=1 /
du -sh /var/*
du -sh /home/*

第三步,定位到具体目录后,使用du -ah --max-depth=1排序,找出占用空间最大的文件或子目录。

du -ah /var | sort -rh | head -20
find /var -typef -execdu -h {} + | sort -rh | head -20

第四步,清理时注意区分日志文件和普通文件。日志文件可以使用日志轮转工具处理后删除旧日志。

# 查看大文件
find / -typef -size +100M -execls -lh {} ;

# 查看被删除但未释放的文件
lsof +L1

# 清理旧日志
find /var/log-name"*.gz"-mtime +30 -delete

# 清理缓存
yum clean all
apt-get clean

4. 命令选择决策树

4.1 按场景选择命令

遇到系统卡顿或响应慢时,首先使用top或vmstat 1查看系统整体状态。

# 系统整体状态
vmstat 1 5     # 查看CPU、内存、IO综合情况
top         # 查看进程占用
htop         # 更友好的界面

# 如果CPU使用率高
ps aux --sort=-%cpu | head # 查找CPU占用高的进程
pidstat -p PID        # 分析特定进程

# 如果内存使用率高
ps aux --sort=-%mem | head # 查找内存占用高的进程
free -h           # 查看内存详情

# 如果IO等待高
iostat -xz 1         # 查看IO情况
iotop            # 查找IO占用高的进程

遇到网络连接异常时,使用netstat或ss查看连接状态。

# 连接统计
ss -s          # 概要统计
netstat -an | awk'/^tcp/ {print $6}'| sort | uniq -c

# 监听端口
ss -tlnp        # TCP监听
ss -ulnp        # UDP监听

# 连接状态
ss -tan state established
ss -tan state time-wait

# 抓包分析
tcpdump -i any port XXXX -nn

遇到磁盘空间问题时,使用df和du配合排查。

# 快速定位
df -h          # 文件系统使用率
df -i          # inode使用率

# 逐级排查
du -h --max-depth=1 / # 根目录一级目录
du -sh /var/*     # 特定目录

# 大文件查找
find / -typef -size +1G
find / -name"*.log"-execdu -h {} + | sort -rh | head

遇到进程异常时,使用ps和lsof分析。

# 进程列表
ps aux         # 完整信息
ps -ef         # 进程树
pstree         # 进程树状图

# 进程详情
lsof -p PID      # 打开的文件
lsof -i         # 网络连接
cat /proc/PID/status  # 进程状态

4.2 命令参数记忆技巧

top系列记住几个关键按键:P按CPU排序,M按内存排序,T按时间排序,1查看各CPU核心,k杀进程,q退出。

netstat记住常用组合:-anp显示所有连接(-a全部,-n数字形式,-p进程)。

find记住三个核心选项:-name按文件名,-type按类型,-exec执行命令。

awk记住两个核心概念:1第一列,NF列数。

5. 进阶命令与工具

5.1 性能监控工具链

除了基础命令,运维人员还应掌握一些进阶工具组成完整的监控工具链。

htop - 增强版的top,支持鼠标操作和进程树视图。

# 安装
apt-get install htop # Debian/Ubuntu
yum install htop   # RHEL/CentOS

# 常用参数
htop          # 启动
htop -u nginx     # 过滤用户
htop -d 5       # 刷新延迟
htop -p PID1,PID2   # 监控特定进程

iotop - 按进程显示磁盘IO使用情况。

# 安装
apt-get install iotop

# 常用参数
iotop         # 实时IO
iotop -o        # 只显示有IO的进程
iotop -b        # 批量模式
iotop -n 3       # 刷新3次后退出

iftop - 按连接显示网络带宽使用情况。

# 安装
apt-get install iftop

# 常用参数
iftop -i eth0     # 指定接口
iftop -n        # 不解析主机名
iftop -N        # 不解析端口号
iftop -B        # 以字节显示

nethogs - 按进程显示网络带宽使用情况。

# 安装
apt-get install nethogs

# 常用参数
nethogs        # 实时
nethogs eth0      # 指定接口
nethogs -d 2      # 刷新间隔

5.2 日志分析工具

goaccess - 实时Web日志分析器。

goaccess access.log -c  # 交互式配置
goaccess access.log -o report.html --log-format=COMBINED

lnav - 高级日志文件查看器。

lnav /var/log/syslog
lnav /var/log/nginx/*.log
lnav -i access.log

5.3 系统信息收集

dmidecode - 查看硬件信息。

dmidecode -t system    # 系统信息
dmidecode -t memory   # 内存信息
dmidecode -t processor  # CPU信息

lscpu - 查看CPU信息。

lscpu
lscpu -e         # 扩展信息
lscpu -p         # 格式化输出

lsblk - 查看块设备信息。

lsblk
lsblk -f         # 文件系统信息
lsblk -a         # 所有设备

5.4 故障排查实战流程

系统故障排查的标准化流程可以提高排查效率。

Phase 1:信息收集

# 收集系统基本信息
uname -a             # 系统信息
uptime              # 运行时间和负载
hostname             # 主机名
cat /etc/os-release       # 操作系统版本

# 收集资源使用信息
df -h              # 磁盘使用
free -h             # 内存使用
top -bn1 | head -20      # CPU和进程

Phase 2:网络诊断

# 网络连通性
ping -c 4 8.8.8.8       # 外网连通性
traceroute 8.8.8.8      # 路由追踪
nslookup google.com       # DNS解析

# 端口和服务
netstat -tlnp          # 监听端口
netstat -an | grep ESTABLISHED # 已建立连接
ss -tunap            # 详细连接信息

Phase 3:进程和服务

# 进程状态
ps aux | head -20       # 进程列表
ps -ef | grep nginx      # 查找特定进程
pstree -p           # 进程树

# 服务状态
systemctl status nginx     # 服务状态
journalctl -u nginx -n 50   # 服务日志

Phase 4:日志分析

# 系统日志
tail -100 /var/log/syslog   # 系统日志
tail -100 /var/log/messages  # 消息日志

# 应用日志
tail -100 /var/log/nginx/error.log
tail -100 /var/log/mysql/error.log

Phase 5:资源分析

# CPU分析
vmstat 1 5           # 虚拟内存统计
mpstat -P ALL 1        # CPU使用率

# IO分析
iostat -xz 1         # IO统计
iotop             # 按进程IO

# 内存分析
free -m            # 内存使用
cat /proc/meminfo       # 详细内存信息

5.5 常见故障快速处理手册

服务器无法连接

# 1. 检查网络连通性
ping -c 4 

# 2. 检查端口连通性
nc -zv  22

# 3. 检查服务状态
systemctl status sshd

# 4. 检查防火墙
iptables -L -n
firewall-cmd --list-all

磁盘空间不足

# 1. 找到大文件
du -sh /* | sort -rh | head -10

# 2. 查找大日志文件
find /var -name"*.log"-size +100M

# 3. 清理旧日志
journalctl --vacuum-time=7d
find /var/log-name"*.gz"-mtime +30 -delete

# 4. 清理缓存
yum clean all
apt-get clean

服务无法启动

# 1. 检查配置文件语法
nginx -t
apache2ctl configtest
java -jar app.jar --dry-run

# 2. 检查端口占用
lsof -i :80
netstat -tlnp | grep :80

# 3. 检查权限
ls -la /var/log/app
chown -R app:app /var/log/app

# 4. 检查依赖
ldd /path/to/binary

CPU使用率过高

# 1. 找到高CPU进程
top -c
# 按P排序查看CPU占用

# 2. 分析线程
ps -p PID -L -o pcpu,pid,tid,time
jstack PID > threaddump.txt

# 3. 如果是Java进程
jps -l
jstack PID

# 4. 限制CPU使用
cpulimit -p PID -l 50

内存使用率过高

# 1. 找到高内存进程
top -c
# 按M排序查看内存占用

# 2. 分析内存使用
ps aux --sort=-%mem | head

# 3. 检查OOM
dmesg | grep -i oom
journalctl -k | grep -i oom

# 4. 调整策略
sysctl vm.swappiness=10

5.6 命令组合使用技巧

日志分析组合

# 统计错误类型
grep -i error app.log | awk'{print $5}'| sort | uniq -c | sort -rn

# 查找异常IP
awk'{print $1}'access.log | sort | uniq -c | sort -rn | head -20

# 分析响应时间
awk'{print $NF}'access.log | sort -n | tail -20

# 统计状态码分布
awk'{print $9}'access.log | sort | uniq -c | sort -rn

系统监控组合

# 综合监控脚本
#!/bin/bash
echo"=== System Info ==="
uptime
echo"=== CPU ==="
top -bn1 | head -5
echo"=== Memory ==="
free -h
echo"=== Disk ==="
df -h
echo"=== Network ==="
ss -tunap | wc -l
echo"=== Top Processes ==="
ps aux --sort=-%cpu | head -6

进程监控组合

# 监控特定进程
watch -n 1'ps aux | grep process_name | grep -v grep'

# 监控文件描述符
lsof -p PID | wc -l

# 监控打开的文件
lsof -p PID -a -d txt,mem,fd

# 监控网络连接
watch -n 1'netstat -an | grep :80 | wc -l'

5.7 自动化脚本示例

系统健康检查脚本

#!/bin/bash
# system_health_check.sh

LOG_FILE="/var/log/health_check.log"
EMAIL="admin@example.com"

log() {
 echo"[$(date '+%Y-%m-%d %H:%M:%S')]$1"| tee -a"$LOG_FILE"
}

check_cpu() {
  cpu_usage=$(top -bn1 | grep"Cpu(s)"| awk'{print $2}'| sed's/%us,//')
 if(( $(echo"$cpu_usage> 80"| bc -l) ));then
   log"WARNING: CPU usage is high:$cpu_usage%"
   return1
 fi
 log"OK: CPU usage is normal:$cpu_usage%"
 return0
}

check_memory() {
  mem_usage=$(free | grep Mem | awk'{print ($3/$2) * 100}')
 if(( $(echo"$mem_usage> 85"| bc -l) ));then
   log"WARNING: Memory usage is high:$mem_usage%"
   return1
 fi
 log"OK: Memory usage is normal:$mem_usage%"
 return0
}

check_disk() {
  disk_usage=$(df -h / | tail -1 | awk'{print $5}'| sed's/%//')
 if["$disk_usage"-gt 80 ];then
   log"WARNING: Disk usage is high:$disk_usage%"
   return1
 fi
 log"OK: Disk usage is normal:$disk_usage%"
 return0
}

check_services() {
 forserviceinnginx mysql redis;do
   ifsystemctl is-active --quiet$service;then
     log"OK:$serviceis running"
   else
     log"ERROR:$serviceis not running"
     return1
   fi
 done
 return0
}

# Main
log"=== System Health Check Started ==="
check_cpu
check_memory
check_disk
check_services
log"=== System Health Check Completed ==="

日志备份清理脚本

#!/bin/bash
# log_backup_cleanup.sh

LOG_DIR="/var/log/myapp"
BACKUP_DIR="/backup/logs"
RETENTION_DAYS=30

# Create backup directory if not exists
mkdir -p"$BACKUP_DIR"

# Backup logs
timestamp=$(date +%Y%m%d_%H%M%S)
tar -czf"$BACKUP_DIR/logs_${timestamp}.tar.gz""$LOG_DIR"/*.log2>/dev/null

# Clean old backups
find"$BACKUP_DIR"-name"logs_*.tar.gz"-mtime +$RETENTION_DAYS-delete

# Compress old logs
find"$LOG_DIR"-name"*.log"-mtime +7 -execgzip {} ;

# Delete very old logs
find"$LOG_DIR"-name"*.log.gz"-mtime +90 -delete

echo"Log backup and cleanup completed at$(date)"

总结

系统命令是运维工程师的基本功。熟练掌握这10个核心命令,可以应对大部分日常运维场景和故障排查需求。

命令的学习需要注重实践。建议在测试环境中多练习,亲自运行命令查看输出,理解每个参数的含义。同时注意命令之间的组合使用,如find结合awk、grep结合netstat等。

除了本文介绍的10个命令,还有很多有用的命令值得学习。如htop、iotop、iftop等增强版工具,提供更直观的信息展示。掌握了基础命令后,可以逐步学习这些增强工具,进一步提升运维效率。

最后,命令只是工具,更重要的是理解系统原理和排查思路。同样的命令,在不同经验水平的工程师手中,发挥的作用可能完全不同。建议在掌握命令的同时,也要深入学习操作系统原理、网络协议等基础知识。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 负载
    +关注

    关注

    2

    文章

    672

    浏览量

    36713
  • 服务器
    +关注

    关注

    14

    文章

    10343

    浏览量

    91737
  • 命令
    +关注

    关注

    5

    文章

    758

    浏览量

    23914

原文标题:运维工程师必须掌握的10个系统命令

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【知名500强韩企】招聘【IT销售】【java工程师】【AS400

    本帖最后由 jxncguanlian 于 2012-10-30 16:52 编辑 【知名500强韩企】招聘【IT销售】【java工程师】【AS400】总计3
    发表于 10-24 13:18

    20工程师必须掌握的电路

    20工程师必须掌握的电路
    发表于 12-31 17:38

    工程师必须掌握的20经典电路

    工程师必须掌握的20经典电路
    发表于 07-17 15:28

    诚聘高级自动化工程师

    猎头职位:高级自动化工程师【合肥】工作职责: 1、根据基础架构管理需求,规划设计
    发表于 12-12 10:37

    【上海】高级工程师

    猎头职位:高级工程师工作职责:1.各种项目实施;2.基础服务日常维护工作,保障业务稳定可靠;3.持续改进
    发表于 07-13 15:38

    linux命令大全

    Linux高端学习需要掌握大量的命令及相关工具,通读bash man page、掌握VIM使用、了解SSH是Linux高端
    发表于 03-15 16:36

    工程师必须掌握的基础电路大全

    工程师必须掌握的基础电路大全,多达五十种,从简到难,重回设计巅峰路。
    发表于 09-01 15:51 315次下载
    <b class='flag-5'>工程师</b><b class='flag-5'>必须</b><b class='flag-5'>掌握</b>的基础电路大全

    工程师的四阶段

    Linux系统目前主要应用在企业服务器上,学习Linux,更多的是向Linux系统/工程师方向进军。比如云计算
    的头像 发表于 03-26 16:22 6899次阅读

    怎样成为一合格的工程师

    如果想成为一名合格的工程师,首先我们需要了解运主要是做什么的?如何成为一合格的
    的头像 发表于 04-28 15:52 4934次阅读

    怎样成为合格的Linux工程师

    做为一工程师,你必须掌握最基本的技能方能胜任这份工作,否则,是没有公司愿意接纳你,并继续培
    的头像 发表于 05-22 16:27 3558次阅读

    如何定义linux工程师

    相信读者们必定听说过linux,也听说过工程师。那么工程师
    的头像 发表于 08-21 15:51 4305次阅读

    Linux工程师的发展前景

    它是一非常新颖的岗位,目前从行业角度分析,随着国内软件行业不断发展壮大,越来越多的复杂系统应运而生,为了保证系统的稳定运行,必须要有足够多的linux
    的头像 发表于 08-21 15:57 4696次阅读

    Linux工程师的定义

    作爲互联网的幕后英雄,Linux工程师临时藏匿在群众认知范围之外,关于的讨论依旧是一片无人涉足的荒漠。在某知名行业研讨调查后果中,非
    的头像 发表于 08-31 11:34 4740次阅读

    远程是什么?是什么?工程师是干嘛的?

    工程师拥有服务器的各项权限,一条错误的命令、一错误的回车操作,可能就将导致企业蒙受巨大的损失,坊间各种“删库跑路”、“rm -rf /
    的头像 发表于 04-30 11:53 1.6w次阅读

    一文掌握Linux命令

    作为一名工程师,熟练掌握Linux命令是基本功中的基本功。无论是日常工作中的系统维护,还是面
    的头像 发表于 07-22 15:23 708次阅读