ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Linux磁盘空间排查:sudodu命令高效使用指南

Linux磁盘空间排查:sudodu命令高效使用指南 1. Linux磁盘空间排查神器sudodu命令详解作为一名运维工程师最常遇到的紧急情况之一就是服务器磁盘空间告警。当收到no space left on device的报错时如何快速定位哪些文件占用了大量空间今天我要分享一个被严重低估的磁盘空间排查工具——sudodu命令。这个命令结合了sudo和du的优势能让你在几秒钟内找出磁盘空间的罪魁祸首。sudodu并不是一个标准的Linux命令而是资深运维工程师们常用的组合技通过sudo权限执行du命令避免因权限不足导致的统计不准确问题。在实际生产环境中很多大文件往往属于root用户普通du命令无法获取完整信息。sudodu完美解决了这个痛点特别适合排查/var、/usr等系统目录的空间占用情况。1.1 为什么需要sudodu传统的磁盘空间排查通常使用df和du命令组合df -h # 查看磁盘整体使用情况 du -sh /path/to/directory # 查看目录大小但这种方法存在三个明显缺陷普通用户执行du时遇到无权限访问的目录会直接跳过导致统计结果偏小需要手动切换目录层级效率低下输出信息过于分散难以快速定位问题sudodu通过三个关键改进解决了这些问题使用sudo权限确保能扫描所有文件自动按大小排序显示结果人性化的可读格式输出2. sudodu命令完全指南2.1 基础用法与参数解析最基础的sudodu命令格式如下sudo du -h --max-depth1 / | sort -h这个命令可以分解为三个部分sudo du -h以可读格式(GB/MB/KB)统计磁盘使用情况--max-depth1只统计指定目录下一级子目录的大小| sort -h按人类可读的大小进行排序实际使用时我推荐使用这个增强版命令sudo du -xh --max-depth1 / | sort -hr | head -n 20新增的两个参数-x不跨越文件系统边界避免统计挂载点-r反向排序最大的排在最前面head -n 20只显示前20个结果2.2 典型应用场景示例场景1快速定位根目录下的大文件sudo du -xh --max-depth1 / | sort -hr | head -n 10输出示例24G / 11G /var 6.5G /usr 3.2G /home 1.4G /opt场景2深入分析特定目录发现/var占用异常后可以进一步钻取sudo du -xh --max-depth1 /var | sort -hr | head -n 10场景3查找指定类型的超大文件结合find命令定位超过100MB的文件sudo find / -type f -size 100M -exec du -h {} | sort -hr2.3 输出结果解读技巧当看到sudodu的输出时重点关注以下几类目录/var/log- 日志文件堆积特别是nginx、tomcat日志/var/lib/docker- Docker容器和镜像存储/tmp- 临时文件未清理/home/*/.cache- 用户缓存文件/usr/local- 手动安装的软件经验提示看到异常大的目录时先用ls -lh查看文件修改时间最近修改的大文件通常是问题根源。3. 高级技巧与自动化方案3.1 创建sudodu快捷命令为了避免每次输入冗长的命令可以在~/.bashrc中添加别名alias sudodusudo du -xh --max-depth1更新配置后使用简化的命令即可sudodu / | sort -hr | head -n 203.2 自动化磁盘监控脚本对于需要定期检查的服务器可以创建自动化脚本#!/bin/bash LOG_FILE/var/log/disk_usage_$(date %Y%m%d).log THRESHOLD80 # 预警阈值(%) # 检查磁盘使用率 df -h | awk -v threshold$THRESHOLD NR1 { gsub(/%/,,$5) if ($5 threshold) { print 警告: $1 使用率 $5% threshold% system(sudo du -xh --max-depth1 $6 | sort -hr | head -n 10 $LOG_FILE) } }这个脚本会检查所有挂载点使用率对超过阈值的分区执行sudodu分析将结果保存到带日期的日志文件中3.3 结合ncdu进行交互式分析对于更喜欢图形化界面的用户可以安装ncdu工具sudo apt install ncdu # Debian/Ubuntu sudo yum install ncdu # CentOS/RHEL使用sudo权限运行sudo ncdu /ncdu提供了交互式界面可以用方向键导航按d删除不需要的文件。4. 常见问题与解决方案4.1 权限被拒绝问题即使使用sudo某些特殊目录如/proc仍可能报错du: cannot access /proc/12345/task/12345/fd/4: No such file or directory这是正常现象可以通过2/dev/null过滤错误信息sudo du -xh --max-depth1 / 2/dev/null | sort -hr4.2 处理符号链接默认情况下du会跟踪符号链接可能导致重复统计。添加-L参数可以避免sudo du -Lxh --max-depth1 / | sort -hr4.3 排除特定目录有时需要排除某些目录如/mntsudo du -xh --exclude/mnt --max-depth1 / | sort -hr4.4 处理大量小文件当目录中包含数百万个小文件时du可能变慢。这时可以使用--inodes参数统计文件数量而非大小先通过find命令筛选示例sudo find /path -type f | wc -l # 统计文件总数 sudo find /path -type f -size 1M | wc -l # 统计大于1MB的文件数5. 磁盘空间优化实践5.1 日志文件清理对于/var/log目录可以使用logrotate工具自动管理。手动清理时可以# 清空日志文件保留inode sudo truncate -s 0 /var/log/syslog # 按时间删除旧日志 sudo find /var/log -type f -mtime 30 -delete5.2 Docker磁盘清理Docker会占用大量空间定期执行# 删除停止的容器 docker container prune # 删除未被使用的镜像 docker image prune -a # 完整清理包括构建缓存 docker system prune -a5.3 软件包缓存清理不同Linux发行版的清理方法# Debian/Ubuntu sudo apt clean # CentOS/RHEL sudo yum clean all # Arch Linux sudo pacman -Sc5.4 用户缓存清理清理所有用户的缓存sudo find /home -type d -name .cache -exec rm -rf {} \;清理旧的snap包sudo snap list --all | awk /disabled/{print $1, $3} | \ while read snapname revision; do sudo snap remove $snapname --revision$revision; done6. 生产环境最佳实践在关键服务器上实施磁盘空间管理时建议设置监控告警使用PrometheusGrafana监控磁盘使用率日志轮转策略配置合理的logrotate规则定期维护计划每月执行一次全面清理关键目录隔离将日志、数据库等频繁写入的目录放在独立分区一个实用的维护脚本示例#!/bin/bash # 每月1号凌晨执行 # 清理旧内核保留最近2个 sudo apt autoremove --purge # 清理日志保留30天 sudo find /var/log -type f -mtime 30 -delete # 清理Docker docker system prune -af # 清理临时文件 sudo rm -rf /tmp/* sudo rm -rf /var/tmp/* # 更新locate数据库 sudo updatedb我在实际运维中发现80%的磁盘空间告警都是由日志文件、Docker镜像和用户缓存引起的。通过合理配置自动清理策略可以显著减少人工干预的需要。对于特别关键的服务器建议将/tmp挂载为tmpfs既能提升性能又能避免临时文件堆积。
返回列表