月薪5千如何3年存20万

操作前务必谨慎!仔细核对步骤,确认环境安全,备份重要数据,明确操作目的与潜在风险,必要时寻求专业指导,确认无误后再执行,避免不可逆损失。

当你的 Linux 系统突然弹出“磁盘空间不足”的警告,或者执行命令时遇到 No space left on device 的错误,意味着你需要立即采取行动清理磁盘了,磁盘空间耗尽不仅会导致程序崩溃、数据无法保存,甚至可能让系统变得不稳定,别担心,本文将手把手教你如何诊断问题根源、安全有效地清理空间,并预防未来再次发生。

  • 理解你在删除什么: 随意删除系统文件可能导致系统崩溃、程序无法运行或数据永久丢失。
  • 备份关键数据: 在进行大规模删除操作前,强烈建议备份重要文件和数据。
  • 使用 sudo 需谨慎: 很多清理命令需要管理员权限 (sudo),确保你清楚命令的作用。
  • 优先清理用户数据: /home 目录下的用户文件(如下载、缓存、旧项目)是最安全的清理起点。
  • 避免直接删除 /tmp/dev 这些目录通常由系统管理,直接删除可能引发问题。

第一步:精准诊断 – 找出空间被谁吃掉了

盲目删除效率低且危险,我们需要精确找出是哪个分区(或挂载点)满了,以及是哪些文件或目录占用了大量空间。

  1. 查看整体磁盘使用情况 (df):

    df -h
    • -h 选项让结果以人类可读的单位(G, M)显示。
    • 重点关注 Use% 列,找出使用率接近或达到 100% 的分区(如 , /home, /var)。
    • 记下满的分区对应的 Mounted on(挂载点), 或 /var
  2. 深入定位大文件/目录 (du / ncdu):
    知道哪个分区满后,需要深入该分区找出“罪魁祸首”。

    • 使用 du (disk usage):

      sudo du -h --max-depth=1 /path/to/full/mountpoint | sort -h
      • /path/to/full/mountpoint 替换为上一步找到的满的挂载点(如 , /var, /home)。
      • -h:人类可读格式。
      • --max-depth=1:只显示指定目录下一级子目录的大小。
      • | sort -h:将结果按人类可读的大小排序(从小到大)。注意看最后几行,最大的目录会排在最后。
      • 找到最大的目录后,可以 cd 进入它,再次运行 sudo du -h --max-depth=1 | sort -h 来层层深入,直到定位到大文件或特定的大目录。
    • 推荐使用 ncdu (NCurses Disk Usage):
      ncdu 是一个交互式、更直观的工具,强烈推荐安装使用:

      # 安装 ncdu (根据发行版选择命令)
      sudo apt install ncdu    # Debian/Ubuntu
      sudo yum install ncdu    # CentOS/RHEL
      sudo dnf install ncdu    # Fedora

      使用:

      sudo ncdu /path/to/full/mountpoint
      • 它会扫描目录并显示一个带进度条的可导航界面。
      • 使用方向键浏览,按 Enter 进入子目录,按 d 删除选中的文件或目录(非常小心!),按 查看帮助。
      • 它能快速直观地展示目录大小占比,是定位空间占用者的利器。

第二步:针对性清理 – 安全有效地释放空间

根据 dfdu/ncdu 定位的结果,针对性地清理:

  1. 清理用户空间 (/home/用户名):

    • 浏览器缓存: Chrome, Firefox 等浏览器的缓存文件可能非常大,通常在 ~/.cache (~/.cache/mozilla/firefox/, ~/.cache/google-chrome/) 目录下,可以在浏览器设置里清理,或手动删除 ~/.cache 下的内容(注意有些应用缓存也在这里)。
    • 下载目录 (~/Downloads): 检查并删除不再需要的大文件。
    • 旧文档、媒体文件: 音乐、视频、图片、旧项目归档等。
    • 应用缓存和临时文件: 查看 ~/.local/share/~/.config/ 下特定应用的缓存目录(谨慎操作,删除前了解作用)。
    • Trash (回收站): 图形界面清空回收站,或命令行清空 ~/.local/share/Trash/files/
  2. 清理系统日志 (/var/log):
    系统和服务日志会不断增长,是 /var 分区满的常见原因。

    • 查看日志大小: sudo ncdu /var/logsudo du -sh /var/log/* | sort -h
    • 使用 logrotate: Linux 通常有 logrotate 服务自动管理日志轮转和删除旧日志,检查其配置 (/etc/logrotate.conf/etc/logrotate.d/) 确保正常工作,可以手动运行 sudo logrotate -f /etc/logrotate.conf 强制立即轮转。
    • 清理特定日志文件 (谨慎!):
      • 可以安全清理 *.gz 文件(这是 logrotate 压缩的旧日志)。
      • 对于巨大的当前日志文件 (如 syslog, messages, kern.log),最佳实践是清空内容而不是删除文件本身,因为有些服务需要文件存在:
        sudo sh -c 'echo > /var/log/syslog'  # 清空 syslog 文件内容
      • 或者使用 truncate 命令:
        sudo truncate -s 0 /var/log/messages  # 将 messages 文件大小截断为 0
      • 绝对避免直接 rm 重要的当前日志文件! 这可能导致记录日志的服务出错。
    • 清理 journald 日志 (Systemd 系统):
      journalctl --disk-usage              # 查看日志占用的磁盘空间
      sudo journalctl --vacuum-size=100M   # 将日志总大小限制到 100M,删除旧日志
      sudo journalctl --vacuum-time=2weeks # 删除超过 2 周的日志

      也可以编辑 /etc/systemd/journald.conf 中的 SystemMaxUse=SystemMaxFileSize= 来永久限制大小。

  3. 清理包管理器缓存:
    包管理器 (apt, yum/dnf, pacman) 会下载并缓存安装包,长期积累会占用不少空间。

    • APT (Debian/Ubuntu):
      sudo apt clean          # 删除 /var/cache/apt/archives/ 和 /var/cache/apt/archives/partial/ 中所有 .deb 包
      sudo apt autoclean      # 删除已卸载软件的旧版本 .deb 包
    • YUM (CentOS/RHEL 7):
      sudo yum clean all      # 清理所有缓存(元数据和包文件)
    • DNF (Fedora/CentOS/RHEL 8+):
      sudo dnf clean all      # 清理所有缓存
    • Pacman (Arch/Manjaro):
      sudo pacman -Sc        # 删除缓存中未安装的包和旧版本(保留当前安装版本的缓存)
      sudo pacman -Scc       # 删除缓存中所有包文件(更彻底,但下次安装需重新下载)
  4. 清理临时文件 (/tmp/var/tmp):

    • 系统重启通常会清空 /tmp
    • /var/tmp 设计用于在重启后保留的临时文件,但也可能积累垃圾。
    • 安全清理: 可以删除其中明显是临时文件且长时间未修改(如超过 7 天)的文件:
      sudo find /tmp -type f -atime +7 -delete  # 删除 /tmp 下超过 7 天未访问的文件
      sudo find /var/tmp -type f -atime +14 -delete # 删除 /var/tmp 下超过 14 天未访问的文件
      • 谨慎使用 -delete 建议先运行不带 -deletefind 命令查看会匹配哪些文件,确认安全后再执行删除。
        sudo find /var/tmp -type f -atime +14  # 先列出,确认无误
        sudo find /var/tmp -type f -atime +14 -delete # 再删除
  5. 查找并删除核心转储文件 (Core Dumps):
    程序崩溃时可能生成很大的核心转储文件,通常位于 /var/lib/systemd/coredump/ 或应用程序的当前目录(如 或用户主目录),查找并删除不再需要的:

    sudo find / -name 'core.*' -size +100M -exec ls -lh {} \;  # 查找大于 100M 的 core 文件并列出
    sudo find / -name 'core.*' -size +100M -delete             # 找到后删除 (谨慎!确认位置)
  6. 清理未使用的 Snap 或 Flatpak 包 (如果使用):

    • Snap:
      snap list --all | grep disabled  # 查看已禁用(旧版本)的 snap
      sudo snap remove --purge <package-name>@<revision>  # 清除指定版本的 snap
    • Flatpak:
      flatpak uninstall --unused      # 卸载未使用的运行时和扩展
  7. 查找并删除重复文件 (可选):
    使用工具如 fdupesrmlint 可以查找并帮助删除重复文件,释放空间。

第三步:预防胜于治疗 – 建立长效机制

清理之后,采取措施防止空间再次耗尽:

  1. 设置磁盘空间监控:

    • 使用 df -h 定期手动检查。
    • 配置监控系统(如 Nagios, Zabbix, Prometheus + Grafana)或简单的 cron 任务,在空间使用率达到阈值(如 80%)时发送邮件或告警。
    • 使用 ncdu 定期扫描关键目录。
  2. 配置合理的日志轮转 (logrotate):
    检查并优化 /etc/logrotate.conf/etc/logrotate.d/ 下的配置文件,确保日志文件按大小或时间轮转,并保留适当数量的旧日志(如保留 4 周或 4 个轮转文件),对于特别活跃的日志(如应用日志),可以单独配置更激进的轮转策略。

  3. 定期清理包缓存:
    可以将 apt clean / dnf clean all / pacman -Sc 等命令加入 cron 计划任务,每周或每月自动执行一次。

  4. 分离关键目录到独立分区:
    在安装系统或之后调整分区时,考虑将 /home, /var, /tmp 甚至 /var/log 挂载到独立的磁盘分区,这样即使某个分区(如 /var/log)满了,也不会导致根 分区崩溃影响整个系统。

  5. 培养良好习惯:

    • 及时清理下载目录和回收站。
    • 定期归档或删除不再需要的项目文件和大媒体文件。
    • 了解常用应用缓存的位置,适时清理。

处理 Linux 磁盘空间满的问题,关键在于精准诊断df, du, ncdu)和安全清理,优先从用户数据(/home)和可再生的缓存(包缓存、浏览器缓存)入手,谨慎处理系统日志和临时文件,建立监控和自动化清理机制(logrotate, cron)是防止问题复发的根本,操作前务必确认目标备份重要数据,对 sudorm 命令保持敬畏之心,通过系统性的方法,你可以高效、安全地释放空间,保持 Linux 系统健康稳定运行。

引用与进一步学习:

  • df 命令手册: man df (终端输入)
  • du 命令手册: man du (终端输入)
  • ncdu 官网: https://dev.yorhel.nl/ncdu
  • logrotate 手册: man logrotate (终端输入) 或 https://linux.die.net/man/8/logrotate
  • journalctl 手册: man journalctl (终端输入)
  • Linux Filesystem Hierarchy Standard (FHS): https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html (了解标准目录用途)
  • 各发行版官方文档: (如 Ubuntu, CentOS, Arch Wiki) 通常有详细的存储管理和清理指南。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9049.html

(0)
酷番叔酷番叔
上一篇 2025年7月28日 16:29
下一篇 2025年7月28日 16:46

相关推荐

  • 修改文件权限怎么做

    在Linux系统中,文件的ctime(change time)记录文件元数据(如权限、所有权等)或内容最后一次被修改的时间,默认情况下,用户无法直接修改ctime,因为它由内核自动管理,但通过特定操作可间接更新或强制修改它,以下是详细方法:理解ctime的特性ctime的自动更新机制:当以下操作发生时,ctim……

    2025年6月12日
    6700
  • Linux如何激活网卡?

    在Linux系统中,网卡的激活是确保网络通信的基础操作,无论是服务器还是桌面环境,正确激活网卡并配置网络参数都是日常运维的重要环节,本文将详细讲解Linux系统中激活网卡的多种方法,涵盖命令行操作、配置文件编辑及工具化管理,并针对常见问题提供解决方案,查看网卡状态与识别网卡名称在激活网卡前,需先确认系统中是否存……

    2025年8月30日
    3400
  • Linux系统如何新建用户组?详细命令与操作步骤是什么?

    Linux用户组是管理用户权限和资源隔离的重要机制,通过将用户划分到不同组,可以实现对文件、目录等资源的批量授权,简化权限管理流程,在系统运维或日常使用中,新建用户组是基础操作,本文将详细介绍Linux环境下新建用户组的方法及相关注意事项,使用groupadd命令新建用户组groupadd是Linux系统中专门……

    2025年9月18日
    2500
  • linux 如何连接数

    Linux 中,可使用 ssh [用户名]@[主机地址] 命令

    2025年8月19日
    3500
  • Linux GCC依赖的两个包如何安装?

    在Linux系统中,GCC(GNU Compiler Collection)是应用最广泛的编译器套件,用于将C、C++、Objective-C等源代码编译为可执行程序,GCC的编译和运行依赖于多个基础软件包,其中最核心的两个依赖包是binutils和glibc(GNU C Library),缺少这两个包会导致G……

    2025年9月26日
    2100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信