ls -s 默认按文件大小降序排列(最大在前),无需加 -r;加 -r 反而变为升序。推荐日常使用 ls -lsh 以显示详细信息并以人类可读格式展示大小。

ls -S 默认就是按大小倒序(最大在前)
很多人误以为 ls -S 只是“启用大小排序”,其实它默认行为就是降序:最大的文件排最上面。不需要额外加 -r,加了反而会变成升序。
常见错误现象:ls -Sr 看起来“没按大小排”,其实是把最小的文件排到了最前——因为 -r 把 -S 的默认降序给翻过来了。
-
ls -S:按大小降序(最大 → 最小) -
ls -Sr:按大小升序(最小 → 最大) -
ls -lS:带详细信息 + 大小降序(推荐日常用)
加 -h 才能看懂大小,但别漏掉 -l
-h 本身不触发排序,只是让字节数变成 1.2M、4.5K 这种可读格式。但它必须和 -l 搭配才有意义——否则 ls -Sh 会只显示文件名和大小缩写,丢失权限、时间等关键信息,且列对齐混乱。
性能影响:加 -h 几乎无开销,但某些老旧 BusyBox 环境可能不支持,报错 invalid option -- 'h'。
- 正确写法:
ls -lSh(推荐) - 错误写法:
ls -Sh(无详细信息,大小列错位) - 兼容写法(无 -h):
ls -lS(显示字节数,适合脚本解析)
想看前 N 个最大文件?别只靠 ls
ls 只能排当前目录下的文件,不能跨子目录,也不支持“取 top 10”这种限制。真要找整个目录树里最大的几个文件,得用 find + sort:
例如查根下前 5 个大于 100MB 的文件:
find / -type f -size +100M -print0 2>/dev/null | xargs -0 ls -lhS 2>/dev/null | head -n 5
注意点:
-
2>/dev/null必须加,否则权限不足的路径会刷屏报错 -
-print0和xargs -0防止文件名含空格或换行时出错 -
ls -lhS在这里只做最后格式化,排序实际由find输出顺序 +ls内部重排共同决定,不够稳定;更可靠的是用du:du -ah / | sort -hr | head -n 5
alias 设置后容易忽略的陷阱
很多人在 ~/.bashrc 里加 alias ll='ls -lSh',以为一劳永逸。但要注意:
- 该 alias 不影响子 shell 或 cron 任务,那些环境里
ll可能根本不存在 - 如果系统自带
ll是ls -alF,你的 alias 会覆盖它,导致隐藏文件(如.bashrc)不再显示 - 远程 SSH 时,非登录 shell 默认不加载
~/.bashrc,ll会报 command not found
真正稳定的方案是直接记熟 ls -lSh,或者用函数封装逻辑,而不是依赖 alias。











