首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​

Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​

作者头像
盹猫
发布2025-07-22 18:59:46
发布2025-07-22 18:59:46
50400
代码可运行
举报
运行总次数:0
代码可运行

引言

作为一名Linux用户,你是否曾因系统盘空间不足而烦恼?随着系统使用时间的增长,各种缓存文件、旧内核、日志文件会不断累积,占用宝贵的磁盘空间。今天我要分享一个实用也是本人一直在用的Bash脚本,它能自动化完成Linux系统盘的清理工作,让你的系统重获新生。

脚本功能概述

这个系统盘清理脚本提供了全方位的清理功能:

  1. ​基础清理​​:APT缓存、临时文件、缩略图缓存
  2. ​系统维护​​:旧内核移除、日志轮转
  3. ​应用清理​​:浏览器缓存、Snap旧版本、Docker无用数据
  4. ​空间分析​​:大文件查找、磁盘使用情况对比

查找出大文件后,可以对较大的文件做进一步的处理,如果是安装的无用文件,可以卸载获得空间。

脚本亮点解析

1. 安全的权限检查
代码语言:javascript
代码运行次数:0
运行
复制
if [ "$(id -u)" -ne 0 ]; then
    echo -e "${YELLOW}警告: 建议使用root权限运行此脚本以执行所有清理操作${NC}"
    read -p "是否继续? (y/n) " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        exit 1
    fi
fi

脚本首先检查执行权限,如果不是root用户会给出警告。这种交互式确认设计既保证了安全性,又给了用户灵活选择的空间。

2. 智能的旧内核清理
代码语言:javascript
代码运行次数:0
运行
复制
current_kernel=$(uname -r)
sudo apt-get purge $(dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | grep -vE "$current_kernel|$(echo $current_kernel | sed 's/-generic//')" | sort -u)

这段代码会:

  1. 获取当前正在使用的内核版本
  2. 列出所有已安装的内核包
  3. 排除当前使用中的内核
  4. 安全移除其他旧内核

这种设计确保了我们至少保留一个可用的内核版本,避免系统无法启动的风险。

3. 全面的日志管理
代码语言:javascript
代码运行次数:0
运行
复制
find /var/log -type f -name "*.log" -mtime +7 -exec rm -f {} \;
journalctl --vacuum-time=7d

双重日志清理策略:

  • 删除/var/log目录下超过7天的日志文件
  • 使用journalctl压缩系统日志,仅保留最近7天的记录
4. 用户友好的浏览器缓存清理
代码语言:javascript
代码运行次数:0
运行
复制
for user in /home/*; do
    [ -d "$user" ] || continue
    echo "清理用户: $(basename "$user")"
    [ -d "$user/.cache/google-chrome/Default/Cache" ] && rm -rf "$user/.cache/google-chrome/Default/Cache"
    [ -d "$user/.cache/mozilla/firefox" ] && find "$user/.cache/mozilla/firefox" -name "cache2" -exec rm -rf {} +
done

这段代码会:

  • 遍历/home目录下的所有用户
  • 清理Chrome和Firefox的浏览器缓存
  • 显示正在清理哪个用户的缓存

使用建议

  1. ​定期运行​​:建议每月运行一次,保持系统清洁
  2. ​谨慎选择​​:对于Docker清理等操作,脚本会请求确认
  3. ​备份重要数据​​:虽然脚本设计安全,但清理前备份总是好习惯
  4. ​自定义调整​​:可根据需要修改保留天数(如日志的7天期限)

清理效果对比

脚本会在执行前后分别显示磁盘使用情况,让你直观看到空间释放效果:

代码语言:javascript
代码运行次数:0
运行
复制
echo -e "\n${GREEN}=== 当前磁盘使用情况 ===${NC}"
df -h /
# ...各种清理操作...
echo -e "\n${GREEN}=== 清理后磁盘使用情况 ===${NC}"
df -h /

结语

这个自动化清理脚本是Linux系统维护的得力助手,特别适合:

  • 开发环境频繁安装卸载导致空间不足
  • 服务器环境需要定期维护
  • 个人电脑长期使用后性能下降

通过合理配置,你可以将其设置为定期任务,让系统始终保持最佳状态。完整脚本已在文章结尾提供,欢迎取用并根据自己的需求进行调整!

脚本源码

代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/bash

# Linux 系统盘清理脚本
# 功能:清理系统垃圾文件、旧内核、缓存等以释放磁盘空间
# 注意:运行前请确保有管理员权限,部分操作可能需要root权限

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color

# 检查是否为root用户
if [ "$(id -u)" -ne 0 ]; then
    echo -e "${YELLOW}警告: 建议使用root权限运行此脚本以执行所有清理操作${NC}"
    read -p "是否继续? (y/n) " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        exit 1
    fi
fi

# 显示当前磁盘使用情况
echo -e "\n${GREEN}=== 当前磁盘使用情况 ===${NC}"
df -h /

# 清理APT缓存
echo -e "\n${GREEN}=== 清理APT缓存 ===${NC}"
sudo apt-get clean
sudo apt-get autoclean

# 移除不再需要的依赖包
echo -e "\n${GREEN}=== 移除不再需要的依赖包 ===${NC}"
sudo apt-get autoremove --purge

# 清理旧内核 (保留当前和上一个版本)
echo -e "\n${GREEN}=== 清理旧内核 ===${NC}"
current_kernel=$(uname -r)
echo "当前内核版本: $current_kernel"
# 更安全的旧内核清理方式
sudo apt-get purge $(dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | grep -vE "$current_kernel|$(echo $current_kernel | sed 's/-generic//')" | sort -u)

# 清理日志文件 (保留最近7天)
echo -e "\n${GREEN}=== 清理日志文件 ===${NC}"
find /var/log -type f -name "*.log" -mtime +7 -exec rm -f {} \;
journalctl --vacuum-time=7d

# 清理临时文件
echo -e "\n${GREEN}=== 清理临时文件 ===${NC}"
# 更安全的临时文件清理方式,不删除正在使用的文件
sudo find /tmp -type f -atime +7 -delete
sudo find /var/tmp -type f -atime +14 -delete

# 清理缩略图缓存
echo -e "\n${GREEN}=== 清理缩略图缓存 ===${NC}"
[ -d "$HOME/.cache/thumbnails" ] && rm -rf "$HOME/.cache/thumbnails"/*

# 清理浏览器缓存 (Chrome/Firefox)
echo -e "\n${GREEN}=== 清理浏览器缓存 ===${NC}"
for user in /home/*; do
    [ -d "$user" ] || continue
    echo "清理用户: $(basename "$user")"
    [ -d "$user/.cache/google-chrome/Default/Cache" ] && rm -rf "$user/.cache/google-chrome/Default/Cache"
    [ -d "$user/.cache/google-chrome/Default/Code Cache" ] && rm -rf "$user/.cache/google-chrome/Default/Code Cache"
    [ -d "$user/.cache/mozilla/firefox" ] && find "$user/.cache/mozilla/firefox" -name "cache2" -exec rm -rf {} +
done

# 清理旧的snap版本
echo -e "\n${GREEN}=== 清理旧的snap版本 ===${NC}"
if command -v snap &> /dev/null; then
    LANG=C snap list --all | awk '/disabled/{print $1, $3}' | while read -r snapname revision; do
        sudo snap remove "$snapname" --revision="$revision"
    done
fi

# 清理Docker无用数据
echo -e "\n${GREEN}=== 清理Docker无用数据 ===${NC}"
if command -v docker &> /dev/null; then
    read -p "确定要清理所有未使用的Docker数据吗? (y/n) " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Yy]$ ]]; then
        docker system prune -af
    fi
fi

# 查找大文件 (大于100MB)
echo -e "\n${GREEN}=== 查找大文件(大于100MB) ===${NC}"
find / -xdev -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh | head -n 20

# 显示清理后的磁盘使用情况
echo -e "\n${GREEN}=== 清理后磁盘使用情况 ===${NC}"
df -h /

echo -e "\n${GREEN}清理完成!${NC}"
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
    • 脚本功能概述
    • 脚本亮点解析
      • 1. 安全的权限检查
      • 2. 智能的旧内核清理
      • 3. 全面的日志管理
      • 4. 用户友好的浏览器缓存清理
    • 使用建议
    • 清理效果对比
    • 结语
  • 脚本源码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档