ls -lsh最轻量即时,按文件逻辑大小降序排列,不递归、不扫描;du -sh*统计磁盘实际占用,含元数据与硬链接,二者口径不同,适用目标各异。

直接用 ls -lSh 就能按大小从大到小列出当前目录下所有文件(不含子目录),加 -r 反转就是从小到大。这是最轻量、最即时的方案,不递归、不扫描、不依赖额外工具。
为什么不用 du -sh *?
du -sh * 看起来直观,但它统计的是每个条目实际占用的磁盘空间——包括目录本身的元数据、硬链接重复计数、稀疏文件等,和文件逻辑大小(ls 显示的 Size)可能不一致。比如一个空目录或只含符号链接的目录,du 可能显示 4K,而 ls 显示 0。真要看“文件本身有多大”,ls 更贴近直觉。
-
du适合查“删了能腾多少真实空间” -
ls适合查“哪个文件看着就占地方” - 隐藏文件(如
.git)默认不被*匹配,du -sh .[!.]* *或先shopt -s dotglob才能覆盖
ls -lSh 和 ls -thlSr 的区别在哪?
ls -lSh 按大小降序(最大在前),ls -thlSr 是按修改时间(-t)再反向(-r),容易误以为是“按大小升序”。真正从小到大排文件大小,该用 ls -lShr ——-S 是主排序键,-r 是它的反转开关。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
-l:显示权限、所有者、大小等详细信息 -
-h:大小单位自动转 K/M/G,避免满屏字节 -
-S:按文件大小排序(不是按名字、时间) -
-r:仅反转-S的结果,不影响其他排序逻辑
遇到 Permission denied 怎么办?
ls 在当前目录有读权限就能列出文件名和大小;如果某个文件你没权限读,ls -l 会显示大小为 ? 或直接报错。这时候别硬扛,换 du -sh * 2>/dev/null 过滤掉错误输出——du 遇到无权访问的文件会跳过并继续,只要父目录可读,它仍能给出大致分布。
- 错误信息形如:
ls: cannot read symbolic link ...: Permission denied -
2>/dev/null不影响正常输出,只是把报错吞掉 - 若需保留错误提示以便排查,改用
2>&1 | grep -v "Permission denied"
真正要小心的是符号链接和硬链接:它们会让 du 和 ls 给出不同数字,这不是命令错了,而是统计口径不同。选哪个,取决于你当下想回答的问题——“这个文件占多少逻辑体积?”还是“删掉它实际能释放多少磁盘块?”










