网站首页 > 技术文章 正文
Shell脚本是Linux系统管理和自动化任务的强大工具。通过编写脚本,我们可以将重复性工作自动化,大幅提升效率。
本文将介绍7个实用Shell脚本,涵盖文件管理、系统监控、数据处理等常见场景,适合初学者学习参考。
01 自动备份重要文件
场景:定期备份/home/user/documents目录到/backup,并压缩存档。
#!/bin/bash
# 定义源目录和目标目录
SOURCE_DIR="/home/user/documents"
BACKUP_DIR="/backup"
DATE=$(date +%Y-%m-%d)
# 创建备份文件(带日期)
tar -czf "$BACKUP_DIR/backup_$DATE.tar.gz" "$SOURCE_DIR"
# 输出成功信息
echo "Backup completed: $BACKUP_DIR/backup_$DATE.tar.gz"
说明:
- tar -czf:压缩目录为.tar.gz文件。
- date +%Y-%m-%d:获取当前日期,用于文件名。
02 监控磁盘空间并发送警报
场景:当磁盘使用率超过90%时发送邮件报警。
#!/bin/bash
THRESHOLD=90
CURRENT=$(df / | grep / | awk '{print $5}' | sed 's/%//g')
if [ "$CURRENT" -gt "$THRESHOLD" ]; then
echo "Disk usage is $CURRENT% on $(hostname)" | mail -s "Disk Alert" admin@example.com
fi
说明:
- df /:获取根分区磁盘使用率。
- mail:发送邮件(需配置邮件服务)。
03 自动清理旧日志文件
场景:删除/var/log下超过30天的日志文件。
#!/bin/bash
find /var/log -type f -name "*.log" -mtime +30 -exec rm {} \;
说明:
- find -mtime +30:匹配修改时间超过30天的文件。
- -exec rm {} \;:对找到的文件执行删除操作。
04 检查服务器存活状态
场景:检测一组服务器是否在线。
#!/bin/bash
SERVERS=("192.168.1.1" "192.168.1.2" "example.com")
for server in "${SERVERS[@]}"; do
ping -c 1 "$server" &> /dev/null && echo "$server is UP" || echo "$server is DOWN"
done
说明:
- ping -c 1:发送1次ICMP请求。
- &> /dev/null:忽略输出,仅显示结果。
05 密码生成器
场景:生成随机密码(含大小写字母、数字、符号)。
#!/bin/bash
LENGTH=12
PASSWORD=$(tr -dc 'A-Za-z0-9!@#$%^&*' < /dev/urandom | head -c "$LENGTH")
echo "Generated Password: $PASSWORD"
说明:
- /dev/urandom:Linux随机数设备。
- tr -dc:过滤指定字符集。
06 实时监控DNS解析状态
场景:持续检查域名是否能正常解析,失败时记录日志。
#!/bin/bash
domain="example.com"
log_file="dns.log"
while true; do
result=$(dig +short $domain)
[ -z "$result" ] && echo "$(date): DNS failed" >> $log_file
sleep 1
done
说明:
- dig +short:快速获取DNS解析结果。
- 空结果时记录日志,适合监控关键域名可用性。
07 HTTP服务监控脚本
场景:持续检测网站可用性,记录访问状态码
#!/bin/bash
url="http://example.com"
log_file="http_test.log"
while true; do
http_result=$(curl -s -o /dev/null -w "%{http_code}" $url)
if [ $http_result -eq 200 ]; then
echo "$(date): HTTP request to $url succeeded (Status: $http_result)" >> $log_file
else
echo "$(date): HTTP request to $url failed (Status: $http_result)" >> $log_file
fi
sleep 1
done
说明:
- curl -w "%{http_code}":获取HTTP状态码
- 状态码200时记录成功,其他状态记录失败
猜你喜欢
- 2025-07-19 当后端说"接口没问题"时,我默默打开了curl
- 2025-07-19 shell中如何重新创建目录层次结构,但不包括文件?
- 2025-07-19 第四章 Linux常用shell命令-4.5.磁盘管理
- 2025-07-19 Hadoop学习---HDFS的常用shell命令详解
- 2025-07-19 电脑总是提示flash版本过低或是没有安装Flash,怎么办
- 2025-07-19 Vanilla OS 2.0将从Ubuntu迁移到Debian
- 2025-07-19 最美的Linux:Elementary OS公测版开放下载
- 2025-07-19 Linux下使用Speedtest测试网速(linux网速测试脚本)
- 2025-07-19 微软或因WCOS开发停滞而取消Surface Hub 2X项目
- 2025-07-19 常用设计标准,阀门常用材料、连接形式、材料及表面硬化处理
- 最近发表
-
- count(*)、count1(1)、count(主键)、count(字段) 哪个更快?
- 深入探索 Spring Boot3 中 MyBatis 的 association 标签用法
- js异步操作 Promise fetch API 带来的网络请求变革—仙盟创梦IDE
- HTTP状态码超详细说明_http 状态码有哪些
- 聊聊跨域的原理与解决方法_跨域解决方案及原理
- 告别懵圈!产品新人的接口文档轻松入门指南
- 在Javaweb中实现发送简单邮件_java web发布
- 优化必备基础:Oracle中常见的三种表连接方式
- Oracle常用工具使用 - AWR_oracle工具有哪些
- 搭载USB 3.1接口:msi 微星 发布 990FXA Gaming 游戏主板
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)