Linux查看目录下文件按大小排序 ls -S用法

Linux查看目录下文件按大小排序 ls -S用法

系统教程

ls -S 按文件逻辑大小(st_size)降序排列,不反映磁盘实际占用;常见误解包括误认其排序递归、目录大小含子内容、单位默认为MB等,实际需搭配-lh等选项或改用du定位真实磁盘大户。

ls -S 默认排序行为和常见误解

ls -S 按文件大小降序排列(最大在前),但它只比较「逻辑大小」,即 stat() 返回的 st_size 字段,不等于磁盘实际占用。比如空洞文件(sparse file)或硬链接多的文件,ls -S 显示的大小可能远小于 du 结果。

容易踩的坑:

  • ls -S 不递归,仅作用于当前目录一级
  • 对目录本身,ls -S 显示的是目录项数量(通常 4096 字节),不是其子内容总大小
  • 默认不显示单位,大文件易误读(如 123456789 是字节,不是 MB)

加参数让 ls -S 更实用

单独用 ls -S 输出信息有限,必须搭配其他选项才能真正定位大文件:

  • ls -lS:显示详细信息 + 按大小排序,关键看第 5 列(size 字段)
  • ls -lSh:加 -h 自动转为 K/M/G 单位,人眼可读性强得多
  • ls -lSht:再加 -t 会按修改时间二次排序(注意:-t 优先级高于 -S,实际是先按时间排,再按大小?错——ls 多个排序选项时,最后指定的生效,所以 -S 覆盖 -t
  • ls -lS --block-size=MB:强制单位为 MB(但注意:不是所有 ls 版本支持,GNU coreutils ≥ 8.25 可用)

为什么 ls -S 有时看起来没生效?

典型现象:ls -lS 输出和 ls -l 一样,大小列数值乱序。原因通常是:

Question AI

一款基于大模型的免费的AI问答助手、总结器、AI搜索引擎

下载

  • 终端宽度不足,ls 自动切为多列横向排版(此时排序仍发生,但视觉上不直观),加 -1 强制单列可验证
  • 文件名含空格或特殊字符,导致列对齐错乱,误判顺序;可用 ls -lS --quoting-style=shell-escape 查看真实字段边界
  • 使用了别名(如 alias ls='ls --color=auto'),而别名未继承 -S;检查用 type ls 或直接运行 /bin/ls -lS
  • 某些 shell(如 zsh)开启 glob 扩展后,通配符未引号包裹,* 被提前展开干扰命令意图

替代方案:当 ls -S 不够用时该用谁?

ls -S 适合快速浏览,但查「真正占磁盘多的文件」必须换工具:

  • du -sh * | sort -hr:统计每个条目实际磁盘用量(含子目录),-h 可读,-r 降序;注意 * 不匹配隐藏文件,要加 .* 需谨慎(避免 ...
  • find . -type f -exec du -h {} + | sort -hr | head -20:精准找普通文件,排除目录,限制输出前 20
  • ncdu:交互式磁盘用量分析器,比纯命令更直观,但需额外安装

真正麻烦的地方在于:你得想清楚——要的是「文件声明大小」还是「磁盘块占用」。前者用 ls -lSh,后者必须用 du 系列。混用会导致删错文件却释放不了空间。

本文地址:https://www.sztg.com.cn/article/621982.html

如非特殊说明,本站内容均来自于网友自主分享,如有任何问题均请联系我们进行处理!

猜您喜欢