Linux命令与自动化脚本精华
Linux命令与自动化脚本核心指南一、核心Linux命令速查表类别命令功能描述常用示例文件与目录ls列出目录内容ls -la(详细列表)pwd显示当前工作目录pwdcd切换目录cd /home/usermkdir创建目录mkdir -p project/{src,bin}(创建多级目录)rm删除文件或目录rm -rf old_dir/(强制递归删除)cp复制cp -r source/ dest/(递归复制目录)mv移动/重命名mv old.txt new.txtfind查找文件find . -name *.log -mtime 7(查找7天前的日志)文件内容cat查看文件全部内容cat config.yamlhead/tail查看文件头/尾tail -f app.log(实时追踪日志)grep文本搜索grep -r ERROR /var/log/(递归搜索)sed流编辑器 (非交互式编辑)sed -i s/foo/bar/g file.txt(全局替换)awk文本分析处理awk {print $1} data.csv(打印第一列)系统信息ps查看进程状态ps aux | grep nginxtop/htop动态查看进程/资源topdf/du磁盘空间使用df -h(人类可读格式)free内存使用情况free -m(以MB显示)ifconfig/ip网络接口配置ifconfig eth0权限管理chmod修改文件权限chmod x script.sh(添加执行权限)chown修改文件所有者chown user:group file压缩/打包tar打包与压缩tar -czvf archive.tar.gz dir/(创建gzip压缩包)gzip/gunzip压缩/解压.gz文件gzip file网络操作ssh安全远程登录ssh userhostnamescp安全远程复制scp file.txt userremote:/path/wget/curl网络下载curl -O http://example.com/file进程管理kill终止进程kill -9 1234(强制终止PID 1234)nohup后台运行进程nohup ./server.sh 其他实用alias命令别名alias llls -lhistory查看命令历史history | grep sshman/--help查看命令手册/帮助man grep二、Shell脚本自动化编程核心1. 脚本基础结构所有Shell脚本应以#!/bin/bash(或#!/bin/sh) 开头指定解释器 。#!/bin/bash # 这是一个自动化备份脚本示例 # 作者: SysAdmin # 描述: 备份指定目录到远程服务器 # 1. 定义变量 BACKUP_SRC/home/user/data BACKUP_DESTuserbackup-server:/backups/ LOG_FILE/var/log/backup_$(date %Y%m%d).log MAX_DAYS30 # 2. 检查源目录是否存在 if [[ ! -d $BACKUP_SRC ]]; then echo [ERROR] 源目录 $BACKUP_SRC 不存在! | tee -a $LOG_FILE exit 1 fi # 3. 执行备份核心逻辑 echo 开始备份 $(date) $LOG_FILE tar -czf - $BACKUP_SRC 2 $LOG_FILE | \ ssh $BACKUP_DEST cat backup_$(date %Y%m%d_%H%M%S).tar.gz # 4. 检查命令执行状态 if [[ $? -eq 0 ]]; then echo [SUCCESS] 备份完成于 $(date) $LOG_FILE else echo [FAILED] 备份失败请检查日志! $LOG_FILE exit 1 fi # 5. 清理旧日志 (超过30天) find /var/log/ -name backup_*.log -mtime $MAX_DAYS -delete exit 02. 关键语法与技巧变量与参数处理#!/bin/bash # 变量定义与使用 SCRIPT_NAME$0 # 脚本名 FIRST_ARG$1 # 第一个参数 ALL_ARGS$ # 所有参数数组 ARG_COUNT$# # 参数个数 LAST_EXIT_CODE$? # 上条命令退出码 # 字符串操作 filenameapp_20250115.log echo ${filename%.*} # 输出: app_20250115 (移除后缀) echo ${filename##*.} # 输出: log (获取后缀) echo ${filename:4:8} # 输出: 20250115 (子串) # 数组操作 files(file1.txt file2.txt file3.txt) echo 文件数: ${#files[]} # 输出数组长度 echo 第一个文件: ${files[0]} # 访问元素条件判断与循环#!/bin/bash # 数值比较 if [[ $COUNT -gt 10 ]]; then echo 数量大于10 elif [[ $COUNT -eq 0 ]]; then echo 数量为0 else echo 数量在1-10之间 fi # 文件/目录判断 if [[ -f /etc/passwd ]]; then echo 是普通文件 fi if [[ -d /var/log ]]; then echo 是目录 fi # for循环处理文件 for file in *.txt; do if [[ -f $file ]]; then echo 处理文件: $file # 在此添加处理逻辑如 sed替换 sed -i s/old/new/g $file fi done # while循环读取文件行 while IFS read -r line; do echo 行内容: $line done input.txt函数定义与使用#!/bin/bash # 定义函数 log_message() { local level$1 local msg$2 echo [$(date %Y-%m-%d %H:%M:%S)] [$level] $msg /var/log/script.log } # 带返回值的函数 check_disk_usage() { local usage$(df -h / | awk NR2 {print $5} | sed s/%//) echo $usage # 通过echo返回值而非return (return只能0-255) } # 调用函数 log_message INFO 脚本开始执行 current_usage$(check_disk_usage) if [[ $current_usage -gt 90 ]]; then log_message ERROR 磁盘使用率超过90%: ${current_usage}% # 发送警报邮件等操作 fi3. 自动化任务示例示例1系统监控与告警脚本#!/bin/bash # monitor_system.sh 监控CPU、内存、磁盘并发送告警 THRESHOLD_CPU80 THRESHOLD_MEM85 THRESHOLD_DISK90ALERT_EMAILadminexample.com # 获取系统指标 cpu_usage$(top -bn1 | grep Cpu(s) | awk {print $2} | cut -d% -f1) mem_usage$(free | grep Mem | awk {printf %.0f, $3/$2 * 100}) disk_usage$(df -h / | awk NR2 {print $5} | sed s/%//) # 检查并告警 alerts if [[ $cpu_usage -gt $THRESHOLD_CPU ]]; then alertsCPU使用率过高: ${cpu_usage}% fi if [[ $mem_usage -gt $THRESHOLD_MEM ]]; then alerts内存使用率过高: ${mem_usage}% fi if [[ $disk_usage -gt $THRESHOLD_DISK ]]; then alerts磁盘使用率过高: ${disk_usage}% fi # 如果有告警则发送 if [[ -n $alerts ]]; then echo -e 系统告警: $alerts | mail -s 系统监控告警 $(date) $ALERT_EMAIL echo $(date): 发送告警 /var/log/monitor.log fi示例2自动化日志清理#!/bin/bash # clean_logs.sh自动清理过期日志文件 LOG_DIRS(/var/log /opt/app/logs) RETENTION_DAYS30BACKUP_DIR/backup/logs/$(date %Y%m) # 创建备份目录 mkdir -p $BACKUP_DIR for dir in ${LOG_DIRS[]}; do if [[ -d $dir ]]; then echo 处理目录: $dir # 压缩并备份7天前的日志 find $dir -name *.log -mtime 7 -exec tar -czf $BACKUP_DIR/$(basename $dir)_$(date %Y%m%d).tar.gz {} # 删除30天前的日志 find $dir -name *.log -mtime $RETENTION_DAYS -delete # 删除空日志文件 find $dir -name *.log -size 0 -delete fi doneecho 日志清理完成于 $(date) /var/log/cleanup.log示例3多服务器批量操作#!/bin/bash # batch_deploy.sh批量部署到多台服务器 SERVERS(server1.example.com server2.example.com 192.168.1.100) SSH_USERdeploy SCRIPT_FILEdeploy_app.sh REMOTE_DIR/opt/app/ for server in ${SERVERS[]}; do echo 正在部署到 $server ... # 检查服务器连通性 if ! ping -c 1 -W 2 $server /dev/null; then echo [跳过] $server 无法连接 continue fi # 复制部署脚本 scp $SCRIPT_FILE ${SSH_USER}${server}:${REMOTE_DIR} # 远程执行部署 ssh ${SSH_USER}${server} cd ${REMOTE_DIR} chmod x ${SCRIPT_FILE} ./${SCRIPT_FILE} if [[ $? -eq 0 ]]; then echo [成功] $server 部署完成 else echo [失败] $server 部署出错 fi done三、高级自动化技巧1. 使用expect自动化交互对于需要交互输入密码的命令可使用expect自动化 。#!/usr/bin/expect # auto_ssh.exp自动SSH登录并执行命令 set timeout 30 set host 192.168.1.100 set user admin set password your_password spawn ssh $user$host expect { *password:* { send $password\r exp_continue } *yes/no* { send yes\r exp_continue } $user* { send ls -la\r send df -h\r send exit\r } } expect eof2. 使用cron定时任务将脚本设置为定时执行实现完全自动化。# 编辑当前用户的cron任务 crontab -e # 添加以下行 (每天凌晨2点执行备份脚本) 0 2 * * * /home/user/scripts/backup.sh /var/log/backup_cron.log 21 # 每5分钟检查一次系统状态 */5 * * * * /home/user/scripts/monitor_system.sh # 每周一早上6点清理日志 0 6 * * 1 /home/user/scripts/clean_logs.sh3. 错误处理与日志记录#!/bin/bash # 增强的错误处理脚本 set -euo pipefail # 严格模式错误退出、未定义变量报错、管道错误 LOG_FILE/var/log/auto_task_$(date %Y%m%d).log exec 1$LOG_FILE 21 # 重定向所有输出到日志 # 自定义错误处理函数 error_exit() { echo [ERROR] $1 at line $2 2 # 可添加发送警报、清理临时文件等操作 exit 1 } trap error_exit $BASH_COMMAND $LINENO ERR # 捕获错误 # 主逻辑 echo 任务开始: $(date) # 关键操作示例 if [[ ! -f /etc/config.yaml ]]; then echo 配置文件不存在使用默认配置 cp /etc/default_config.yaml /etc/config.yaml fi # 使用临时文件安全处理数据 TEMP_FILE$(mktemp) process_data $TEMP_FILE mv $TEMP_FILE /var/data/processed.txt echo 任务完成: $(date) 四、最佳实践建议脚本开头总是包含#!/bin/bash和脚本描述注释。错误检查检查命令返回值 ($?)对关键操作进行验证 。使用引号变量引用总是使用双引号如$variable防止空格导致的错误。安全考虑避免在脚本中硬编码密码使用SSH密钥或环境变量。日志记录所有自动化脚本都应记录详细日志便于调试和审计。测试先在测试环境运行使用set -x调试模式查看执行过程。代码复用将常用功能封装为函数存放在单独的库文件中。版本控制将脚本纳入Git等版本控制系统管理。通过结合这些命令和脚本技术可以构建从简单文件操作到复杂系统管理的全自动工作流显著提升Linux环境下的工作效率 。参考来源Linux命令与Shell脚本学习笔记掌握常用的 Linux 命令和 Shell 脚本编程技术可以极大地提高系统管理和自动化任务的效率从命令行到自动化用Shell脚本和xrandr管理你的Linux多屏工作站Windows Prompt命令行和Linux的Shell脚本自动化从命令行到自动化用xrandr和shell脚本打造你的Linux多屏工作流含常见错误排查自动化脚本ssh以及telnet发送命令并退出(windows和linux都适用)

相关新闻

Ant Design Vue表单验证深度解析:从内置规则到自定义验证器实战

Ant Design Vue表单验证深度解析:从内置规则到自定义验证器实战

1. 项目概述:为什么表单验证是前端开发的“必争之地” 在任何一个涉及用户输入的中后台管理系统中,表单验证都是绕不开的核心环节。它不仅仅是前端的一道“防线”,更是用户体验的直观体现。一个交互友好、提示清晰的验证系统,能极…

2026/8/4 22:47:02 阅读更多 →
系统化构建与维护FAQ知识库:从问题采集到智能应用全流程指南

系统化构建与维护FAQ知识库:从问题采集到智能应用全流程指南

1. 项目概述:从“常见问题”到系统性知识库的构建 在任何一个领域,无论是软件开发、硬件维护、产品运营,还是日常使用某个工具,我们都会遇到一个永恒的话题: 常见问题 。这四个字看似简单,背后却是一个庞…

2026/8/4 23:03:28 阅读更多 →
深入理解 I2C 协议

深入理解 I2C 协议

1. 引言 I2C(Inter-Integrated Circuit,集成电路总线)是一种由飞利浦公司(现恩智浦半导体)在 1980 年代开发的同步、多主从、串行、半双工通信总线协议。它以其简洁的硬件接口(仅需两根线)、支…

2026/8/4 22:44:20 阅读更多 →

最新新闻

3类常见学习场景对比,说清人脉圈广的EMBA实际就读感受

3类常见学习场景对比,说清人脉圈广的EMBA实际就读感受

3类常见学习场景对比,说清人脉圈广的EMBA实际就读感受为什么很多高管读EMBA最看重校友网络?就读人脉圈广的EMBA,核心价值从来不是拿到一张学位证书,而是在课堂、游学、小组作业的真实互动中,和不同行业的决策者建立长期…

2026/8/5 1:31:41 阅读更多 →
Altium Designer 15 原理图设计全流程:从库管理到编译查错实战指南

Altium Designer 15 原理图设计全流程:从库管理到编译查错实战指南

1. 项目概述:从零到一构建你的第一张电路图如果你已经按照上一部分教程完成了Altium Designer 15的安装和环境配置,那么恭喜你,工具已经就位,现在可以真正开始“画图”了。很多新手朋友拿到软件,面对空白的原理图编辑界…

2026/8/5 1:31:41 阅读更多 →
Unity性能优化实战:从GC卡顿、内存泄漏到流畅体验的完整指南

Unity性能优化实战:从GC卡顿、内存泄漏到流畅体验的完整指南

1. 项目缘起与核心痛点最近在做一个Unity项目,上线前做性能压测,Profiler一开,CPU和GC(垃圾回收)的曲线简直像坐过山车,帧率时不时就掉到30以下。这让我不得不停下新功能的开发,回过头来系统性地…

2026/8/5 1:31:41 阅读更多 →
C++虚函数表深度解析:从多态原理到性能优化实战

C++虚函数表深度解析:从多态原理到性能优化实战

1. 项目概述:为什么我们需要深入理解虚函数表?在C的面试或者日常的代码评审里,如果你被问到“多态是怎么实现的”,而你的回答仅仅是“通过虚函数”,那可能还不足以让你脱颖而出,甚至在一些对性能有极致要求…

2026/8/5 1:31:41 阅读更多 →
功能测试实战指南:从核心概念到面试技巧,软件质量的基石

功能测试实战指南:从核心概念到面试技巧,软件质量的基石

1. 项目概述:功能测试,软件质量的“守门员”干了十几年软件测试,从黑盒到白盒,从手动点点点到自动化脚本满天飞,我越来越觉得,功能测试这个看似最基础、最“没技术含量”的活儿,恰恰是决定一个产…

2026/8/5 1:31:41 阅读更多 →
TensorFlow GPU安装验证全攻略:从驱动到性能的四层排查法

TensorFlow GPU安装验证全攻略:从驱动到性能的四层排查法

1. 项目概述:为什么GPU版TensorFlow的安装验证如此重要? 折腾了大半天,终于把TensorFlow GPU版本装上了,命令行里显示安装成功,但心里总是不踏实——这GPU到底用上了没有?别等到模型训练跑了三天三夜&#…

2026/8/5 1:30:41 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →