Linux磁盘空间清理脚本

代码脚本 · 其他

安全清理系统垃圾文件、日志、缓存、旧内核,释放磁盘空间

详细内容

#!/bin/bash # ========================================== # Linux磁盘空间清理脚本 # 用途:安全清理系统垃圾、日志、缓存,释放磁盘空间 # 注意:清理前会显示可释放空间,需要确认后才执行 # 使用方法:bash disk_cleanup.sh # ========================================== echo "========== 磁盘空间清理工具 ==========" echo "" # 显示清理前磁盘使用 echo "【清理前磁盘使用】" df -h / | awk 'NR>1{printf " 总空间: %s, 已用: %s, 可用: %s, 使用率: %s\n", $2, $3, $4, $5}' echo "" TOTAL_FREE=0 # 1. 清理apt缓存 if command -v apt-get &>/dev/null; then APT_CACHE=$(du -sh /var/cache/apt/archives 2>/dev/null | cut -f1) echo "【1. APT缓存】 可清理: $APT_CACHE" read -p " 是否清理? (y/n): " CONFIRM if [ "$CONFIRM" = "y" ]; then sudo apt-get clean sudo apt-get autoclean echo " ✓ 已清理" fi echo "" fi # 2. 清理yum缓存 if command -v yum &>/dev/null; then YUM_CACHE=$(du -sh /var/cache/yum 2>/dev/null | cut -f1) echo "【2. YUM缓存】 可清理: $YUM_CACHE" read -p " 是否清理? (y/n): " CONFIRM if [ "$CONFIRM" = "y" ]; then sudo yum clean all echo " ✓ 已清理" fi echo "" fi # 3. 清理系统日志 echo "【3. 系统日志】" LOG_SIZE=$(du -sh /var/log 2>/dev/null | cut -f1) echo " /var/log 总大小: $LOG_SIZE" echo " 大日志文件:" find /var/log -type f -size +100M -exec ls -lh {} \; 2>/dev/null | awk '{print " "$9" ("$5")"}' read -p " 是否清空大日志文件(>100M)? (y/n): " CONFIRM if [ "$CONFIRM" = "y" ]; then find /var/log -type f -size +100M -exec truncate -s 0 {} \; echo " ✓ 已清空大日志文件" fi echo "" # 4. 清理journal日志 if command -v journalctl &>/dev/null; then JOURNAL_SIZE=$(journalctl --disk-usage 2>/dev/null) echo "【4. Journal日志】 $JOURNAL_SIZE" read -p " 是否只保留最近7天日志? (y/n): " CONFIRM if [ "$CONFIRM" = "y" ]; then sudo journalctl --vacuum-time=7d echo " ✓ 已清理" fi echo "" fi # 5. 清理用户缓存 echo "【5. 用户缓存目录】" for dir in ~/.cache ~/.npm ~/.pip/cache /tmp; do if [ -d "$dir" ]; then SIZE=$(du -sh "$dir" 2>/dev/null | cut -f1) echo " $dir: $SIZE" fi done read -p " 是否清理用户缓存(~/.cache等)? (y/n): " CONFIRM if [ "$CONFIRM" = "y" ]; then rm -rf ~/.cache/* [ -d ~/.npm ] && npm cache clean --force 2>/dev/null echo " ✓ 已清理用户缓存" fi echo "" # 6. 清理旧内核 if command -v dpkg &>/dev/null; then OLD_KERNELS=$(dpkg -l 'linux-image-*' | grep '^ii' | awk '{print $2}' | grep -v "$(uname -r)") echo "【6. 旧内核】" if [ -z "$OLD_KERNELS" ]; then echo " 无旧内核" else echo "$OLD_KERNELS" | sed 's/^/ /' read -p " 是否删除旧内核? (y/n): " CONFIRM if [ "$CONFIRM" = "y" ]; then sudo apt-get purge -y $OLD_KERNELS echo " ✓ 已删除旧内核" fi fi echo "" fi # 显示清理后磁盘使用 echo "【清理后磁盘使用】" df -h / | awk 'NR>1{printf " 总空间: %s, 已用: %s, 可用: %s, 使用率: %s\n", $2, $3, $4, $5}' echo "" echo "========== 清理完成 =========="

适配环境

适配系统:CentOS 7+,Ubuntu 18.04+,Debian 10+

依赖环境:bash 4.0+

参数说明

[]
磁盘清理运维

更多其他