首页 / 技术分享 /
Linux 上查看文件(夹)大小

Linux 上查看文件(夹)大小

GPT-5

2026-01-03
3 次浏览
0 条评论

本文介绍在 Linux 上查看单个文件与目录(文件夹)大小的常用方法,包含快速菜谱、核心命令、进阶选项与常见坑。

脚本工具
Linux
文件大小查看
分享:

命令清单(复制即用)

# 查看当前目录下每个条目的大小(人类可读),并按大小排序
du -sh -- * | sort -h

# 查看某目录一层内各子目录大小(不深入)
du -h --max-depth=1 /path/to/dir | sort -h

# 查看某目录及其子目录的总大小
du -sh /path/to/dir

# 查看单个文件的字节大小与人类可读大小
stat -c 'bytes=%s' file; ls -lh file

# 找出某目录中最大的 20 个文件
find /path/to/dir -type f -printf '%s\t%p\n' | sort -nr | head -20

# 只统计当前挂载的文件系统(不跨挂载点)
du -xh --max-depth=1 /path/to/dir

# 可视化查看目录占用(交互式)
ncdu /path/to/dir

核心概念

  • 文件大小有两种衡量:
    • 逻辑大小(apparent size):文件内容的字节数(如 stat/ls -l)。
    • 磁盘占用(disk usage):实际占用的磁盘块数(如 du)。受稀疏文件、文件系统压缩、块大小等影响。
  • “人类可读”显示:-h 会以 KB/MB/GB 显示,便于阅读。
  • 目录大小的本质:目录本身记录条目,du 通过累加其内文件的占用得出目录的总大小。

查看单个文件大小

1) 使用 ls/stat

# 人类可读大小(KB/MB/GB)
ls -lh file

# 只输出字节数(逻辑大小)
stat -c '%s' file
# 或
wc -c < file  # 输出字节数(不显示文件名)

2) du 统计磁盘占用

# 文件实际占用(磁盘块),人类可读
du -h file

# 用字节显示“逻辑大小”(GNU du:--bytes 等效于 --apparent-size --block-size=1)
du -b file

# 显示“逻辑大小”(apparent size),单位人类可读
du -h --apparent-size file

查看目录大小

1) 目录总占用

du -sh /path/to/dir
  • -s:只输出总计(summary)
  • -h:人类可读单位

2) 按层级列出

# 仅列出一级子目录占用
du -h --max-depth=1 /path/to/dir | sort -h

# 更深层级(例如两层)
du -h --max-depth=2 /path/to/dir | sort -h

3) 不跨文件系统

# 统计时停留在当前挂载点(不进入其他挂载的分区/设备)
du -xh --max-depth=1 /path/to/dir

4) 列出当前目录每项大小

# 注意通配符不含隐藏文件;如需包含隐藏文件可用 .[!.]* 与 *
du -sh -- * | sort -h

# 包含隐藏文件的简单方法(bash)
du -sh .[^.]* * 2>/dev/null | sort -h

排序与筛选

按大小排序输出

# du 输出后按人类可读单位排序
du -h --max-depth=1 /path/to/dir | sort -h

# 按字节数排序(更精确)
du -B1 --max-depth=1 /path/to/dir | sort -n

找出大文件

# Top 20 最大文件(字节数降序)
find /path/to/dir -type f -printf '%s\t%p\n' | sort -nr | head -20

# 仅匹配特定扩展名(例如日志)
find /var/log -type f -name '*.log' -printf '%s\t%p\n' | sort -nr | head

进阶选项与差异

  • 稀疏文件(sparse file):

    • stat -c %s file 显示逻辑大小(可能很大),但 du 显示占用更小,因为未写入的洞不占块。
    • du --apparent-size 看逻辑大小,用不带该选项的 du 看实际占用。
  • 文件系统压缩/去重:

    • Btrfs/ZFS 等可能因压缩、重复数据消除而使 dustat 差异明显。
  • 硬链接(hard link):

    • GNU du 默认“对同一内容只计一次”(即文件有多个硬链接不会重复计入)。
    • 若希望对每个硬链接都计一次,使用 du --count-links
  • 块大小与单位:

    • du -B1 用字节输出,-B1K/-B1M 用固定单位;-h 使用自适应单位。
  • 排除路径:

    • --exclude='pattern' 排除匹配项:
      du -h --max-depth=1 /path/to/dir --exclude='*.tmp' --exclude='node_modules'

交互式与可视化工具

  • ncdu(推荐):基于 ncurses 的交互式目录体积查看器,支持删除。

    # 安装(不同发行版命令略有差异)
    sudo apt install ncdu     # Debian/Ubuntu
    sudo dnf install ncdu     # Fedora
    sudo yum install ncdu     # CentOS/RHEL(可能需 EPEL)
    ncdu /path/to/dir
  • tree -h:以树状打印并显示人类可读大小(需安装 tree)。

    sudo apt install tree
    tree -h /path/to/dir | less

常见坑与建议

  • 权限问题:

    • du 进入目录需要遍历权限;无权限时体积可能不准确,使用 sudo 或针对具体目录统计。
    • 示例:sudo du -sh /var/* | sort -h
  • 隐藏文件与挂载点:

    • 注意通配符与隐藏文件;统计根目录时可能跨多个挂载点,使用 -x 限制到单一文件系统。
  • 远程/网络文件系统:

    • NFS/SSHFS 等环境下,du 性能可能受网络影响;尽量在目标主机本地统计或使用 ncdu 交互筛选。
  • 输出管道与本地化:

    • sort -h 识别人类单位;若不可用,可先转为字节:du -B1 ... | sort -n

实用示例合集

# 1) 全系统下 /var 目录内各子项占用排行
sudo du -xh --max-depth=1 /var | sort -h

# 2) 项目目录按两层深度统计
du -h --max-depth=2 ~/projects/myapp | sort -h

# 3) 精确找出最大的日志文件
find /var/log -type f -printf '%s\t%p\n' | sort -nr | head -50

# 4) 稀疏文件占用差异演示
truncate -s 10G sparse.img         # 逻辑大小 10GB
du -h sparse.img                    # 实际占用远小于 10GB
du -h --apparent-size sparse.img    # 显示逻辑大小

# 5) 仅统计当前挂载点的目录大小
du -xh --max-depth=1 /home | sort -h

# 6) 排除某些目录
du -h --max-depth=1 /path/to/dir --exclude='node_modules' --exclude='.cache' | sort -h

参考与帮助

  • man du, man stat, man ls, man find, man ncdu, man tree
  • GNU coreutils 文档(du/ls/stat 的选项与行为说明)

评论区 (0)

你需要先 登录 后才能发表评论。
还没有人评论,赶快成为第一个吧。

关于云信益站

云信益站是由荣县人创办的公益网站,集家乡宣传、技术分享与开发服务于一体。在这里,您可以探索荣县的美景、美食与历史,查询实用本地信息,学习软件开发技术。让我们以数字技术连接桑梓,赋能家乡发展。

联系站长

关注我们

© 2025 云信益站. 保留所有权利.