以下是9个非常实用的Shell脚本,涵盖了日常系统管理、文件处理、网络操作等多个方面,建议收藏备用。
#!/bin/bash
# 批量将.jpg文件重命名为.jpg.bak
for file in *.jpg
do
mv "$file" "${file%.jpg}.jpg.bak"
done
#!/bin/bash
# 查找并删除30天前的.log文件
find /var/log -name "*.log" -type f -mtime +30 -exec rm -f {} \;
#!/bin/bash
# 监控磁盘空间,超过90%时发送警告
THRESHOLD=90
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
mail -s "磁盘空间警告: 使用率 ${CURRENT}%" admin@example.com <<< "根分区空间即将用完"
fi
#!/bin/bash
# 自动备份指定目录到远程服务器
BACKUP_DIR="/home/user/important_files"
REMOTE_SERVER="user@backup.example.com"
REMOTE_PATH="/backups"
tar -czf backup-$(date +%Y%m%d).tar.gz $BACKUP_DIR
scp backup-$(date +%Y%m%d).tar.gz $REMOTE_SERVER:$REMOTE_PATH
rm backup-$(date +%Y%m%d).tar.gz
#!/bin/bash
# 批量测试一组IP的连通性
IP_LIST="192.168.1.1 192.168.1.2 192.168.1.3 8.8.8.8"
for ip in $IP_LIST
do
ping -c 1 $ip > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "$ip 可达"
else
echo "$ip 不可达"
fi
done
#!/bin/bash
# 检查进程是否运行,如果没有则启动
PROCESS="nginx"
pgrep $PROCESS > /dev/null
if [ $? -ne 0 ]; then
echo "$PROCESS 未运行,正在启动..."
systemctl start $PROCESS
fi
#!/bin/bash
# 分析Apache/Nginx访问日志,统计访问量前10的IP
LOG_FILE="/var/log/nginx/access.log"
echo "访问量前10的IP:"
awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -nr | head -10
#!/bin/bash
# 批量创建用户并设置随机密码
USER_LIST="user1 user2 user3"
for user in $USER_LIST
do
useradd $user
PASS=$(openssl rand -base64 12)
echo "$user:$PASS" | chpasswd
echo "用户 $user 已创建,密码: $PASS"
done
#!/bin/bash
# 收集系统基本信息并保存到文件
REPORT_FILE="system_report_$(date +%Y%m%d).txt"
{
echo "===== 系统信息报告 ====="
echo "生成时间: $(date)"
echo ""
echo "=== 系统信息 ==="
uname -a
echo ""
echo "=== 内存使用 ==="
free -h
echo ""
echo "=== 磁盘空间 ==="
df -h
echo ""
echo "=== 运行时间 ==="
uptime
} > $REPORT_FILE
echo "报告已保存到 $REPORT_FILE"
这些脚本涵盖了Linux系统管理的常见需求,熟练掌握后可以大大提高工作效率。