Linux系统运维常用命令及自动化脚本合集_第1页
Linux系统运维常用命令及自动化脚本合集_第2页
Linux系统运维常用命令及自动化脚本合集_第3页
Linux系统运维常用命令及自动化脚本合集_第4页
Linux系统运维常用命令及自动化脚本合集_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-Linux系统运维常用命令及自动化脚本合集在云计算与微服务架构全面普及的今天,Linux已成为服务器端的绝对主流。对于运维工程师而言,熟练掌握底层命令不仅是日常操作的基础,更是应对突发故障、保障业务连续性的核心能力。然而,单纯依靠手工执行命令在面对海量服务器或复杂场景时效率低下且极易出错。将高频操作转化为标准化的自动化脚本,构建从监控到自愈的闭环体系,才是现代运维的必由之路。本文旨在梳理Linux运维中的关键命令逻辑,并提供具备实战价值的自动化脚本方案,帮助技术团队提升交付质量与响应速度。运维工作的本质是“发现问题”与“解决问题”。在排查过程中,对系统资源、网络状态及进程异常的精准定位,往往决定了故障恢复的时间窗口(MTTR)。以下命令并非孤立存在,而是构成了一个层层递进的诊断链条。1.资源负载与性能瓶颈分析当用户反馈系统卡顿或服务响应超时,首先需确认是CPU、内存还是磁盘I/O导致的瓶颈。`top`和`htop`是最直观的工具,但生产环境更推荐使用`vmstat`进行长时间采样分析。通过`vmstat510`命令,可以每5秒采集一次数据,持续10次,重点关注`si`(swapin)和`so`(swapout)列。若这两列数值持续非零,说明物理内存不足,系统正在频繁使用交换分区,这将导致严重的性能抖动。针对磁盘I/O问题,`iostat-x2`能提供更为详尽的统计信息。关键在于观察`%util`指标,当某块磁盘的`%util`长期接近100%时,意味着该设备已处于饱和状态,此时读取延迟会急剧上升。此外,`pidstat-d1`可以精确到具体进程的读写速率,快速锁定是哪个应用占用了大量磁盘带宽。为了更直观地展示不同场景下的资源压力特征,下表对比了典型负载类型下的关键指标表现:负载类型CPU使用率(%)内存空闲量(MB)Swap交换频率(si/so)磁盘I/OWait(%)典型症状CPU密集型>90%(单核或多核)正常低(<1%)<5%任务排队,响应延迟高,无IO等待内存泄漏中等(30%-60%)极低(<100MB)高(>10MB/s)低(<5%)系统变慢,OOMKiller触发IO密集型低(<20%)正常中(取决于Swap大小)>80%文件读写极慢,数据库连接超时网络拥塞低正常低低连接建立失败,TCPRetransmission激增2.网络连通性与端口监听排查网络连接异常是另一大常见故障源。`netstat`虽经典但已逐渐被`ss`取代,后者基于内核直接读取,速度更快且支持更多高级选项。例如,`ss-tuln`可快速列出所有监听的TCP和UDP端口及其状态;`ss-s`则能汇总显示当前的TCP连接统计,包括TIME_WAIT的数量。若发现TIME_WAIT连接数异常庞大(如超过10万),通常意味着短连接处理不当,需要调整内核参数`tcp_tw_reuse`或优化应用代码。在追踪具体链路问题时,`traceroute`和`mtr`是必备工具。`mtr`结合了ping和traceroute的功能,并能实时刷新每一跳的丢包率和延迟,对于区分是本地网络问题还是运营商骨干网问题至关重要。二、日志分析与安全审计的关键手段日志是系统的黑匣子。面对TB级的日志文件,盲目使用`cat`或`less`无异于大海捞针。高效的处理依赖于正则表达式与流式处理的结合。`grep`配合`-A`(After)、`-B`(Before)、`-C`(Context)参数,可以快速提取上下文信息。例如,`grep-C5"Error"/var/log/nginx/error.log`能显示错误行及其前后各5行的内容,便于还原现场。在处理多行匹配时,`awk`和`sed`展现出强大威力。`awk'$7~/ERROR/{print$0}'access.log`可以精准筛选出特定字段包含ERROR的行并输出。对于安全审计,检查异常登录和历史命令记录是重中之重。`lastb`命令专门用于查看失败的登录尝试,若发现同一IP在短时间内发起数百次SSH暴力破解,应立即封禁该IP。同时,`history`命令虽然简单,但在排查内部人员误操作时不可或缺。结合`auditd`服务,可以记录特定的文件访问行为,实现细粒度的操作追溯。三、自动化脚本实战:从重复劳动到智能运维将上述命令封装为脚本,是提升运维效率的关键一步。优秀的脚本应具备健壮性、可维护性和可扩展性。以下提供三个具有代表性的自动化场景脚本,涵盖健康检查、日志清理与批量部署。1.系统健康综合巡检脚本该脚本旨在每日定时自动扫描服务器核心指标,一旦发现异常立即通过邮件或钉钉发送告警。脚本逻辑严谨,避免了因单个命令失败导致整体流程中断的问题。#!/bin/bash

#文件名:system_health_check.sh

#功能:检查CPU、内存、磁盘及关键进程状态,并生成报告

REPORT_FILE="/var/log/health_report_$(date+%F).log"

ALERT_EMAIL="ops@"

#初始化报告

echo"===系统健康巡检报告$(date'+%Y-%m-%d%H:%M:%S')===">>"$REPORT_FILE"

#1.检查磁盘使用率(阈值设为85%)

DISK_USAGE=$(df-h/|awk'NR==2{print$5}'|sed's/%//')

if["$DISK_USAGE"-gt85];then

echo"[CRITICAL]根分区使用率过高:${DISK_USAGE}%">>"$REPORT_FILE"

#此处可添加发送邮件逻辑mail-s"DiskFullAlert"$ALERT_EMAIL<<<"Rootdiskusagecritical..."

else

echo"[OK]根分区使用率:${DISK_USAGE}%">>"$REPORT_FILE"

fi

#2.检查内存使用率(阈值设为90%)

MEM_TOTAL=$(free-g|awk'/^Mem:/{print$2}')

MEM_USED=$(free-g|awk'/^Mem:/{print$3}')

MEM_PERCENT=$((MEM_USED*100/MEM_TOTAL))

if["$MEM_PERCENT"-gt90];then

echo"[CRITICAL]内存使用率过高:${MEM_PERCENT}%(${MEM_USED}/${MEM_TOTAL}GB)">>"$REPORT_FILE"

else

echo"[OK]内存使用率:${MEM_PERCENT}%(${MEM_USED}/${MEM_TOTAL}GB)">>"$REPORT_FILE"

fi

#3.检查关键进程(以nginx为例)

if!pgrep-x"nginx">/dev/null;then

echo"[CRITICAL]关键进程nginx未运行!">>"$REPORT_FILE"

systemctlstartnginx

echo"已尝试重启nginx服务">>"$REPORT_FILE"

else

echo"[OK]关键进程nginx运行正常">>"$REPORT_FILE"

fi

#4.检查最近5分钟的平均负载

LOAD_AVG=$(uptime|awk-F'loadaverage:''{print$2}'|cut-d','-f1|tr-d'')

#注意:实际生产中应获取CPU核心数进行动态阈值判断,此处简化演示

echo"[INFO]当前系统平均负载:$LOAD_AVG">>"$REPORT_FILE"

echo"========================================">>"$REPORT_FILE"此脚本通过管道符将多个命令串联,利用变量存储中间结果,实现了模块化检查。在实际部署中,建议将其加入`cron`定时任务,每小时执行一次,并将历史报告归档至对象存储以便回溯趋势。2.智能日志轮转与清理脚本日志文件无限增长是常态,手动清理不仅危险且容易遗漏。本脚本采用“保留最近N天+压缩旧日志”的策略,确保磁盘空间始终可控。#!/bin/bash

#文件名:auto_log_cleanup.sh

#策略:清理/var/log/myapp下超过7天的.log文件,并压缩3天前的文件

LOG_DIR="/var/log/myapp"

RETENTION_DAYS=7

COMPRESS_DAYS=3

#防止空目录报错

if[!-d"$LOG_DIR"];then

exit0

fi

#步骤一:删除超过保留天数的日志

find"$LOG_DIR"-name"*.log"-typef-mtime+$RETENTION_DAYS-delete

echo"[$(date)]已删除超过${RETENTION_DAYS}天的日志文件"

#步骤二:压缩超过指定天数的日志(仅处理未压缩的)

find"$LOG_DIR"-name"*.log"-typef-mtime+$COMPRESS_DAYS-execgzip{}\;

echo"[$(date)]已完成${COMPRESS_DAYS}天前日志文件的压缩工作"

#步骤三:验证剩余空间

DISK_FREE=$(df-h$LOG_DIR|tail-1|awk'{print$4}')

echo"[$(date)]当前可用空间:${DISK_FREE}"该脚本利用了`find`命令强大的时间筛选功能,避免了遍历整个目录树带来的性能损耗。通过`-exec`参数直接调用`gzip`,减少了临时文件的产生。这种机制确保了即使在高并发写入场景下,日志系统也能自动维持在一个健康的水位线上。3.批量主机配置同步脚本在大规模集群管理中,修改配置文件或安装软件包是一项繁琐工作。利用`ansible`或`sshpass`结合`parallel`工具,可以实现毫秒级的批量操作。以下是一个基于原生SSH的简易批量分发示例,展示了如何并行执行命令并收集结果。#!/bin/bash

#文件名:batch_deploy.sh

#依赖:需安装parallel工具

HOSTS=("0""1""2")

COMMAND="systemctlrestartmy-service"

OUTPUT_DIR="./deploy_logs"

mkdir-p"$OUTPUT_DIR"

#定义执行函数

run_command(){

localhost=$1

echo"正在连接$host..."

ifssh-oConnectTimeout=5-oStrictHostKeyChecking=no"$host""$COMMAND";then

echo"[$host]执行成功">>"$OUTPUT_DIR/result.log"

else

echo"[$host]执行失败或连接超时">>"$OUTPUT_DIR/result.log"

fi

}

#使用GNUParallel并行执行,限制最大并发数为10

printf'%s\n'"${HOSTS[@]}"|parallel-j10run_command

echo"批量部署任务完成,请查看$OUTPUT_DIR/result.log"此脚本的核心在于`parallel`工具的使用。传统的`for`循环是串行执行的,100台机器可能需要几十分钟;而`parallel`允许同时开启多个SSH会话,将总耗时压缩到几秒级别。同时,通过设置`ConnectTimeout`和`StrictHostKeyChecking=no`,有效规避了网络波动和首次连接交互带来的阻塞风险,保证了批量任务的鲁棒性。四、总结与进阶思考Linux运维并非简单的命令堆砌,而是一套严密的逻辑体系。从底层的资源监控到上层的自动化编排,每一个环节都直接影响着系统的稳定性。掌握`top`、`vmstat`、`ss`等基础命令是入门的前提,而编写如上述健康检查、日志清理及批量部署脚

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论