服务器运维:Linux 磁盘查看 & 清理常用命令

服务器运维:Linux 磁盘查看 & 清理常用命令

一、整体使用思路(先看全局,再清理)

  • 第一步:看整个磁盘使用情况(df)
  • 第二步:看具体哪个目录占得多(du、ncdu 等)
  • 第三步:按类型清理:
    • 系统缓存 / 日志 / 旧内核 / 包管理器缓存
    • 应用日志、临时文件
    • 用户自己的大文件(日志、镜像、备份、下载等)
      可以用一个小流程图来概括:



开始: 磁盘空间不足
df -h 查看整体使用
du 或 ncdu 找最大目录
是系统位置?
系统缓存/日志/内核/包缓存清理
用户目录/应用日志/临时文件 清理
定期维护任务

如 journalctl/vacuum

logrotate/apt autoclean
再次 df/du 检查效果

下面展开具体命令。


二、查看磁盘使用情况("看")

1. df:查看文件系统整体使用情况

  • 查看所有挂载点的使用情况 :

    bash 复制代码
    df -h
    • -h:human-readable(K/M/G)
    • 会显示每个挂载点:总容量、已用、可用、使用百分比、挂载点路径
  • 只看本地的文件系统(不显示 tmpfs 等):

    bash 复制代码
    df -hT -x tmpfs -x devtmpfs
    • -T:显示文件系统类型(ext4、xfs 等)
    • -x:排除某些类型
  • 查看某个目录所在的文件系统使用情况:

    bash 复制代码
    df -h /var /home
    text 复制代码
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda2        50G   32G   16G  67% /

2. du:查看目录/文件占用的空间

  • 查看当前目录下各一级子目录的大小:

    bash 复制代码
    du -h --max-depth=1
    • -h:人类可读
    • --max-depth=1:只看一层
  • 按大小排序,找出最大的几个目录(非常常用):

    bash 复制代码
    du -h --max-depth=1 | sort -hr | head -n 10
    • sort -hr:按数字逆序(大在前)且按人类可读格式(100M/1G)
    • head -n 10:前 10 行【turn0search15】【turn0search16】
  • 查看某个目录的总大小:

    bash 复制代码
    du -sh /var/log
    • -s:summary,只看总计

3. lsblk / fdisk -l:查看磁盘和分区

  • 列出块设备及挂载点:

    bash 复制代码
    lsblk -f
    • -f:会显示文件系统类型、UUID、挂载点等
  • 查看详细分区信息(需 root):

    bash 复制代码
    sudo fdisk -l

4. 其他小工具

  • ncdu:交互式的磁盘使用分析工具(很直观)

    bash 复制代码
    sudo ncdu /
    • 使用方向键进入目录,按 d 删除文件/目录
  • pydf:一个带彩色的 df 替代工具

    bash 复制代码
    pydf
  • baobab(图形化磁盘分析工具,GNOME 桌面

    bash 复制代码
    baobab

三、找出大文件/目录("找")

1. du 排序法(最常用)

  • 找出当前目录下占用最大的 10 个目录/文件:

    bash 复制代码
    du -ah . | sort -hr | head -n 10
    • -a:包含文件
  • 指定目录,比如 /var 下:

    bash 复制代码
    du -ah /var 2>/dev/null | sort -hr | head -n 10

2. find + size 法(按文件大小查找)

  • 查找大于 100M 的文件(从根目录开始,会有些慢,可换成具体路径):

    bash 复制代码
    sudo find / -type f -size +100M 2>/dev/null
  • 查找 /home 下大于 500M 的文件并显示大小:

    bash 复制代码
    find /home -type f -size +500M -exec du -sh {} \; 2>/dev/null | sort -hr | head -n 10

    逻辑:

    • -type f:只要文件
    • -size +500M:大于 500M
    • -exec du -sh {} ;:对每个文件执行 du -sh,显示大小

四、系统层面的常见清理("系统清理")

1. systemd 日志(journald)

默认 systemd 日志可能会越来越大,可以限制大小或保留时间:

  • 将日志限制到最大 300M:

    bash 复制代码
    sudo journalctl --vacuum-size=300M
  • 只保留最近 10 天的日志:

    bash 复制代码
    sudo journalctl --vacuum-time=10d

查看当前日志占用:

bash 复制代码
sudo journalctl --disk-usage

2. 包管理器缓存(以 Debian/Ubuntu 为例)

Ubuntu/Debian 中的 apt 会缓存大量 .deb 包:

  • 清理已卸载软件的依赖包(不再需要的包):

    bash 复制代码
    sudo apt autoremove
  • 清理本地软件包缓存(/var/cache/apt/archives):

    bash 复制代码
    sudo apt clean
    bash 复制代码
    sudo apt autoclean
    • clean:删除所有缓存包
    • autoclean:只删除过期的旧版本包
  • 删除旧内核(谨慎操作,至少保留一个可用的内核):

    bash 复制代码
    sudo apt autoremove --purge

3. 旧内核(更通用的方式)

查看已安装内核:

bash 复制代码
dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'

(比较复杂,一般是包管理器自动清理)

更安全的方式是通过包管理器清理旧内核(如 apt autoremove,或对应发行版的命令)。

4. 系统临时目录 /tmp、/var/tmp

  • 清理 /tmp(一般重启会自动清理,也可以手动):

    bash 复制代码
    sudo rm -rf /tmp/*

    注意:不要删 /tmp 本身目录,只删里面的内容。

  • 清理 /var/tmp(通常保留更久,需谨慎确认内容):

    bash 复制代码
    sudo rm -rf /var/tmp/*

5. 日志轮转 /var/log(logrotate)

通常系统通过 logrotate 来管理 /var/log 下的日志,可以手动触发轮转或检查配置:

  • 手动执行轮转:

    bash 复制代码
    sudo logrotate -f /etc/logrotate.conf
  • 查看/编辑配置:

    bash 复制代码
    sudo less /etc/logrotate.conf
    sudo ls /etc/logrotate.d/

常见做法是在配置中设置:

  • rotate 保留份数
  • compress 压缩旧日志
  • maxsize 单个日志最大大小

6. 用户回收站(桌面环境)

  • 如果是图形桌面环境,回收站一般在:

    • ~/.local/share/Trash/
    • 或 ~/.Trash/
      清理(谨慎):
    bash 复制代码
    rm -rf ~/.local/share/Trash/files/*
    rm -rf ~/.local/share/Trash/info/*

五、删除/清理文件的常用命令("删")

1. 基本删除命令

  • 删除文件:

    bash 复制代码
    rm 文件名
  • 删除目录及内容(递归、强制):

    bash 复制代码
    rm -rf 目录名

注意:rm -f 不再提示,一定确认路径正确。

2. 按时间/名称/条件批量删除(find + rm)

  • 删除 /var/log 下 30 天前修改的 .log 文件(先不加 -delete 测试):

    bash 复制代码
    sudo find /var/log -name "*.log" -type f -mtime +30

    确认无误后:

    bash 复制代码
    sudo find /var/log -name "*.log" -type f -mtime +30 -delete
  • 删除 1 小时前修改过的文件(-cmin:按状态更改时间分钟):

    bash 复制代码
    find /path -type f -cmin +60
  • 按名字包含某字符串删除(如包含 "chrome" 的文件):

    bash 复制代码
    find . -type f -name '*chrome*' -delete

3. 删除大量文件时的注意事项

某些目录包含数百万个文件时,直接 rm -rf 会非常慢,甚至失败【turn0search5】:

  • 尝试使用 find + delete:

    bash 复制代码
    find 目录 -type f -delete
    find 目录 -type d -empty -delete
  • 或用 rsync "空目录"覆盖的方式(进阶用法):

    bash 复制代码
    mkdir /tmp/empty
    rsync -a --delete /tmp/empty/ 要清空的目录/

六、不同发行版的"一键清理"工具(可选)

  • Ubuntu / Debian 系:

    bash 复制代码
    sudo apt autoremove
    sudo apt clean
  • Fedora / CentOS / RHEL 系(dnf/yum):

    bash 复制代码
    sudo dnf clean all
    sudo dnf autoremove
  • openSUSE(zypper):

    bash 复制代码
    sudo zypper clean
  • Arch Linux:

    bash 复制代码
    sudo pacman -Sc  # 清理未安装包的缓存
    # 或
    sudo paccache -r  # 使用 paccache 脚本清理旧版本缓存

七、安全检查与定期维护建议

  1. 清理前一定要做的事:

    • 确认路径(多看几眼,尤其是带 / 的全局路径)
    • 大规模删除前先"只列出不删除"(find 不加 -delete、rm 不加 -f)
    • 对重要数据先备份
  2. 建议定期维护:

    • 使用 crontab 定期:
      • 清理临时文件
      • 对日志做 journalctl --vacuum-time
      • 运行 apt/yum/dnf autoremove 等
  3. 示例 crontab(每周日凌晨 2 点检查一次磁盘):
    编辑:

    bash 复制代码
    crontab -e

    加入:

    text 复制代码
    0 2 * * 0 df -h >> /var/log/disk_usage.log

    把 df 结果写到日志,方便事后查看历史。


八、一个快速速查表

  • 查看整体使用:df -h
  • 查看某个目录占用:du -sh /path
  • 找最大目录:du -h --max-depth=1 | sort -hr | head
  • 找大文件:find /path -type f -size +100M
  • 清理 systemd 日志:journalctl --vacuum-size=300M
  • Debian/Ubuntu 清理包缓存:apt clean && apt autoclean && apt autoremove
  • 按时间删除旧日志:find /var/log -name "*.log" -mtime +30 -delete
  • 清理 /tmp:rm -rf /tmp/*
  • 清理回收站(用户):rm -rf ~/.local/share/Trash/files/*
相关推荐
ben9518chen16 小时前
Linux用户管理
linux·运维·服务器
m0_7373025816 小时前
云服务器的多元形态进化史
服务器
root666/16 小时前
【后端开发-nginx】proxy_pass和proxy_redirect参数作用
运维·nginx
用户61354114601616 小时前
xampplinux_v174beta11在 Linux 下的安装与配置步骤
linux
Byron Loong17 小时前
【系统】Mac系统和Linux 指令对比
linux·macos·策略模式
DO your like17 小时前
手机热点搭建个人局域网
服务器·智能手机·智能路由器
markvivv17 小时前
在 Kylin Linux Advanced Server for Kunpeng V10 上构建 VSCode 1.106
linux·vscode·kylin
2501_9404140817 小时前
搞了一次平台工程,我把本地的 Docker Desktop 彻底卸了
运维·docker·容器
看见繁华17 小时前
Linux 交叉编译实践笔记
linux·运维·笔记