在麒麟os中,ls显示文件逻辑大小(内容字节数),du显示物理占用空间(磁盘块实际使用量);稀疏文件会导致ls值远大于du值,可用du -h --apparent-size强制du显示逻辑大小。

如果您在麒麟OS中需要确认某个文件实际占用多少磁盘空间,或想对比文件显示大小与真实存储开销的差异,则需区分使用 du 和 ls 命令。以下是两种命令的具体应用方式:
一、使用 ls 命令查看文件逻辑大小
ls 命令显示的是文件内容的字节数,即文件创建时写入的数据总量,不反映磁盘块的实际占用情况。该值适用于判断文件内容体量,但无法体现稀疏文件、空洞或文件系统块对齐带来的物理空间差异。
1、打开终端,可使用快捷键 Ctrl + Alt + T 或在桌面空白处右键选择“打开终端”。
2、输入命令 ls -lh 文件名 并按回车执行,例如 ls -lh document.pdf。
3、输出中第二列(如 2.3M)即为该文件的逻辑大小,单位已自动转换为人类可读格式。
4、若需按大小排序列出当前目录所有文件,可执行 ls -lhS;添加 -a 参数可同时显示隐藏文件,即 ls -lhaS。
二、使用 du 命令查看文件物理占用空间
du 命令统计的是文件在磁盘上实际占用的块空间,受文件系统默认块大小(通常为 4KB)影响。即使一个文件仅含 1 字节内容,也会至少占用 1 个完整数据块。该值更能反映真实的存储压力。
1、在终端中输入 du -h 文件名 并回车,例如 du -h config.log。
2、输出首列为该文件实际占用的磁盘空间,如 4.0K config.log,表明其占用了 1 个 4KB 块。
3、若需同时显示多个文件的物理占用并汇总,可执行 du -ch 文件1 文件2,最后一行将出现 total 行。
4、对符号链接,如需统计其指向目标的实际占用而非链接本身,应添加 -L 参数,即 du -hL 链接名。
三、对比 ls 与 du 输出差异的典型场景
当文件包含大量空洞(如日志轮转后截断、数据库快照稀疏映像),ls 显示的逻辑大小会远大于 du 报告的物理占用。反之,若文件由大量极小碎片组成且未对齐块边界,du 可能略大于 ls,但通常差异微小。此差异是文件系统底层机制所致,非命令错误。
1、创建测试稀疏文件:执行 truncate -s 1G sparse.img,此时 ls -lh sparse.img 显示 1.0G,但 du -h sparse.img 返回 0。
2、向该文件写入少量真实数据:执行 dd if=/dev/zero of=sparse.img bs=1M count=1 conv=notrunc。
3、再次运行 ls -lh sparse.img 仍显示 1.0G,而 du -h sparse.img 将显示约 1.0M,体现物理块实际分配量。
4、使用 stat sparse.img 可查看 Blocks 字段(物理块数)与 Size 字段(逻辑字节数)的原始数值,验证二者关系。
四、快速定位大文件的组合用法
结合 ls 与 du 的特性,可在不依赖图形工具的前提下高效识别异常大文件。ls -S 提供初步排序线索,du 则用于核实真实磁盘开销,避免被稀疏文件误导。
1、进入目标目录,例如执行 cd /var/log。
2、运行 ls -lhS | head -n 5,获取逻辑体积最大的前 5 个文件名。
3、对每个候选文件,逐一执行 du -h 文件名,记录其物理占用值。
4、若某文件 ls 显示为 500MB 但 du 仅报告 4.0K,可判定其为稀疏日志,无需立即清理;若 du 值接近 ls 值,则为真实高占用对象,需进一步分析。
五、使用 --apparent-size 参数强制 du 显示逻辑大小
du 默认报告物理占用,但可通过 --apparent-size 参数切换为显示与 ls 一致的逻辑字节数。该参数适用于需要统一比对标准的审计或迁移场景,尤其在处理跨文件系统复制时可预估源端数据量。
1、执行 du -h --apparent-size 文件名,例如 du -h --apparent-size /home/user/archive.tar。
2、输出结果将与 ls -lh /home/user/archive.tar 完全一致,均为该文件内容的原始字节数。
3、该参数可与其他选项共用,如 du -sh --apparent-size * 可列出当前目录下所有项目的内容大小总和(非磁盘占用)。
4、注意:启用此参数后,du 不再体现文件系统块分配行为,因此不能用于评估实际磁盘压力。










