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

dscl

查询和修改 macOS 本地目录服务中的用户、组与属性记录。

补充说明

macOS 的本地账户存放在目录服务中,dscl . 表示本地节点。读操作安全:-list /Users、-read /Users/短名、-read /Groups/admin GroupMembership;写操作需要 sudo,包括 -create、-append、-delete、-passwd。现代 macOS 没有 NetInfo,底层是 /var/db/dslocal/nodes/Default/ 下的 plist,但不要直接编辑这些文件。

边界:dscl 只改目录记录,不创建家目录、不同步钥匙串密码,也不处理 SecureToken。创建用户优先用 sysadminctl 或系统设置;改登录密码用 passwd,用 dscl . -passwd 可能导致钥匙串与登录密码不一致。加入组后通常要重新登录才在图形会话生效。

常用示例

# 1. 列出本地用户,排除以下划线开头的系统账户
% dscl . -list /Users | grep -v '^_'

# 2. 查看当前用户的 UID、主组、家目录和登录 shell
% dscl . -read /Users/$USER UniqueID PrimaryGroupID NFSHomeDirectory UserShell

# 3. 查看管理员组成员;改动前先留档
% dscl . -read /Groups/admin GroupMembership

# 4. 找出 UID 最大的几个账户,排查手工创建造成的冲突
% dscl . -list /Users UniqueID | sort -k2,2n | tail -5

# 5. 把用户加入管理员组;下次登录生效,验证前不要关闭当前管理会话
% sudo dscl . -append /Groups/admin GroupMembership alice
% dscl . -read /Groups/admin GroupMembership

# 6. 检查账户是否持有 SecureToken(FileVault 相关)
% dscl . -read /Users/$USER AuthenticationAuthority | grep -o SecureToken

易错点与排错

相关命令

参考链接

读完自测

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

  1. dscl . 里的点号代表什么?网络目录账户能用它看到吗?
  2. 为什么不建议用 dscl . -passwd 修改登录密码?
  3. 把用户加入 admin 组后,为什么当前终端可能仍没有管理员权限?
答案
  1. 代表本地目录节点;网络账户在 Active Directory/Open Directory 节点,. 看不到。
  2. 它只改目录记录中的密码,可能不与钥匙串密码同步,导致用户丢失对原有钥匙串的访问;应使用系统设置或 passwd。
  3. 组成员关系在登录时载入会话,已有会话不会刷新;需要重新登录,必要时刷新目录缓存。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令