系统学习 macOS 学习路径:从 BSD 文件命令到系统、网络与开发维护

ls

查看目录条目与 macOS 扩展元数据,识别 ACL、扩展属性与文件标志。

补充说明

macOS 的 ls 来自 BSD 工具链,默认在终端里多列输出、被管道接走时单列输出,只显示非隐藏项。加 -l 后才展示类型、权限、链接数、所有者、组、大小和时间。macOS 在 BSD 版本上增加了 -@(扩展属性)、-e(ACL)、-O(文件标志)等选项,这些在 GNU ls 里没有同名短选项;-G、-T、-v 在 GNU ls 里也有同名短选项,但含义不同(GNU -G 不显示组名、-T 设置制表宽度、-v 是自然排序),不要按 macOS 的语义套用。

与 GNU 的差异要记牢:macOS 的 -v 是“原样打印不可打印字符”,不是 GNU 的自然排序;macOS 没有 --time-style、--block-size、--quoting-style、--group-directories-first。脚本需要稳定、可解析的文件清单时不要切 ls 输出,改用 find -print0 或 stat -f。

长格式权限后面的 @ 表示存在扩展属性,+ 表示存在 ACL,两者可能同时出现;-O 会额外打印 uchg、hidden、restricted 等文件标志。APFS 默认大小写不敏感但保留大小写,输入 ls Foo 也可能列出 foo。

常用示例

# 查看下载目录(含隐藏项),并列出扩展属性名
% ls -la@ ~/Downloads

# 同时看 ACL 和文件标志;末尾的 + 与 uchg 是“删不掉/改不了”的线索
% ls -leO /usr/local/bin | head -n 20

# 按修改时间倒序,-T 显示完整时间,便于比对构建产物
% ls -lTt ~/Documents | head -n 10

# 只列目录本身;*/ 不会匹配点开头的隐藏目录
% ls -d ~/Library/*/

# -f 关闭排序并自动包含隐藏项,适合快速确认目录是否为空
% ls -f /etc | head

# 机器可读输出:文件名、字节数、权限、最后访问时间
% stat -f '%N %z %Sp %Sa' *

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. ls -l 输出里的 @ 和 + 分别代表什么?怎样查看具体内容?
  2. macOS 的 ls -v 与 GNU ls -v 行为有何不同?
  3. 为什么不能用 ls -l 的目录大小判断目录占用的磁盘空间?
答案
  1. @ 表示有扩展属性,+ 表示有 ACL;分别用 ls -l@ 和 ls -le 查看。
  2. macOS 的 -v 原样打印不可打印字符;GNU 的 -v 是按版本号自然排序。
  3. 目录大小只是目录 inode 自身占用的块数,内容总量要用 du -sh 统计。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令