欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

dscl 有大用 有大大用 有大大大用


   

姓名    

dscl——标准输入  标准输出  ——文件——选择——帮助——版本    

概要    

dscl [ arguments]

dscl命令有很多用途,但出于我们的目的,它用于创建、修改和删除用户。通常,您在用户和组 (Lion) 或帐户(OS X 的早期版本)下使用系统偏好创建用户,坦率地说,这对于单个用户来说是最简单的方法。但是,如果您需要通过 shell 来执行此操作(例如,批量创建多个用户), dscl则这是经过批准的技术。在本节中,我们将在本地 Macintosh 上创建一个用户。首先我们需要选择:    

  • 一个用户名。我们将使用zippy.

  • 一个密码。

  • 用户 ID 的唯一正整数。我们将使用 550。

  • 用户所属的默认组。我们将使用 staff组 ID 为 20 的组。

没有一个命令可以创建具有所有必要属性的用户;您必须发出多个dscl命令才能完成工作。首先,我们将创建用户:22 ]    

sudo dscl localhost -create /Local/Default/Users/zippy
   

立即设置密码,使入侵者无法登录:    

sudo passwd zippy
密码:*******
   

现在指定用户 ID,一个必须唯一的正整数,即 Macintosh 上没有其他用户具有相同的 ID。您可以通过运行以下命令来发现正在使用的最高用户 ID:    


214dscl . list /users UniqueID | awk '{print $2}' \
  | sort -n | tail -1
   

它列出了所有用户及其 ID,提取第二项(ID),按数字排序,然后打印最后一个(最高的)ID。选择一个高于 500 的新 ID,因为用户...    

来自  https://www.oreilly.com/library/view/macintosh-terminal-pocket/9781449328962/re98.html



dscl

目录服务命令_ _ _ _

目录服务

<i>     dscl [-u user][-p |-P password][-f filepath] [-raw][-plist] [-url][-q] [datasource [command]]

(v10.5.3)

创建、读取和管理目录服务数据。

没有command交互式运行。

数据存储的密钥访问编辑器,命令:列表、搜索、创建、读取、附加、合并、更改、删除和 diff。
它不知道数据存储区的信息,例如哪些键有效或用于特定路径,也没有任何规则来说明哪些类型的值对特定键有效,哪些值适合。
它似乎确实是访问 mac os 的用户授权数据存储的工具。

制表符完成:输入路径名时,按制表符将搜索以自动完成部分名称,显示可能的匹配项并尝试更正大写。

没有选项进入交互模式。

选项            
-u user            使用 DS Proxy时需要            
-p            提示输入密码            
-P [password            

-f filepath            在 localonly 模式下运行的 DS 守护程序的目标文件路径
示例:/Volumes/Build100/var/db/dslocal/nodes/Default
要使用的节点名固定在 /Local/Target            

-raw            不要从 DS 常量中去掉前缀            
-plist            XML plist 格式            
-url            URL 样式编码中的属性值            
-q            安静 - 没有交互式提示            

datasource                

localhost            默认            
localonly            仅使用本地节点激活 DirectoryService 守护进程 - 守护进程在使用后退出            
hostName            需要 DS 代理支持,( DS-158)            
nodeName            目录服务样式节点名称            
domainName            NetInfo 风格域名            


   

目录服务目录节点。    

dscl在一个    


  节点名称    


使用主机名或 IP 地址-u并使用-P-p 向远程主机进行身份验证。
对于localonly 一个单独的 DirectoryService 守护进程被激活,它只包含本地插件。    

如果未提供文件路径,则只能访问系统上已注册的本地节点。
访问权限被添加到 指向位于文件路径的数据库-f的本地节点。 示例: 通过节点名提供该数据库的文件路径,然后访问该数据库Local/Target
Volumes/Build100/var/db/dslocal/nodes/DefaultLocal/Target    


   

路径规范    

操作模式对应于数据源是节点还是主机。
对于一个节点,顶级路径将是记录类型
顶级路径示例:    

/Users/alice
/Groups/admin
               

对于主机,顶级路径对应于 Open Directory 插件和搜索路径。指定插件遍历到一个节点名,之后的路径和之前的用法是等价的。这些可能是与上述等效的路径:    


   

/NetInfo/root/Users/alice
/LDAPv3/10.0.1.42/Groups/admin
   
=nb>

如果路径组件包含带有嵌入/字符的键或值,则必须使用反斜杠对其进行转义。由于 shell 还处理转义字符,因此需要一个额外的反斜杠来正确指定转义。 要读取 " " 路径中
名为 " ldapserver:/Users"的挂载记录,请使用:/Mounts
   


   

dscl . read /Mounts/ldaphost:\/Users    


   

命令    

read [path [key …]]
cat .
               
显示(不区分大小写)目录属性                    
单链表。阅读/用户/www
AppleMetaNodeLocation:/本地/默认
生成的UID:FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000046
NFSHomeDirectory: /Library/WebServer
密码: *
主要组 ID:70
真正的名字:
 万维网服务器
记录名称:_www www
记录类型:dsRecTypeStandard:用户
唯一标识:70
用户外壳:/usr/bin/false
                   


                   


-raw                显示完整的 DirectoryService API 常量和属性类型。                    
dscl-原始。阅读/用户/www     
dsAttrTypeStandard:AppleMetaNodeLocation:/Local/Default
dsAttrTypeStandard:生成的UID:FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000046
dsAttrTypeStandard:NFSHomeDirectory: /Library/WebServer
dsAttrTypeStandard:密码:*
dsAttrTypeStandard:PrimaryGroupID:70
dsAttrTypeStandard:实名:
 万维网服务器
dsAttrTypeStandard:记录名称:_www www
dsAttrTypeStandard:记录类型:dsRecTypeStandard:用户
dsAttrTypeStandard:UniqueID: 70
dsAttrTypeStandard:UserShell: /usr/bin/false
               

-url                值以 URL 的样式编码。                    
AppleMetaNodeLocation:/本地/默认
生成的UID:FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000046
NFSHomeDirectory: /Library/WebServer
密码: *
主要组 ID:70
真正的名字:
 世界%20Wide%20Web%20Server
记录名称:_www www
记录类型:dsRecTypeStandard:用户
唯一标识:70
用户外壳:/usr/bin/false
               

-plist                显示键和属性类型。 改版                    
dscl -plist 。阅读/用户/www
<?xml 版本="1.0" 编码="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist 版本="1.0">
<字典>
    <key> dsAttrTypeStandard:AppleMetaNodeLocation </key>  <array>  <string> /Local/Default </string>  </array> 
    <key> dsAttrTypeStandard:GeneratedUID </key>  <array>  <string> FFFFEEEE-DDDD-CCCC- BBBB-AAAA00000046 </string>  </array> 
    <key> dsAttrTypeStandard:NFSHomeDirectory </key>  <array>  <string> /Library/WebServer </string>  </array> 
    <key> dsAttrTypeStandard:Password </key>  <数组>  <字符串> * </string>  </array> 
    <key> dsAttrTypeStandard:PrimaryGroupID</key>  <array>  <string> 70 </string>  </array> 
    <key> dsAttrTypeStandard:RealName </key>  <array>  <string>万维网服务器</string>  </array> 
    <key> dsAttrTypeStandard:RecordName </key>  <array>  <string> _www </string>  <string> www </string>  </array> 
    <key> dsAttrTypeStandard:RecordType </key>  <array>  <string> dsRecTypeStandard:Users < /字符串>  </数组>
    <key> dsAttrTypeStandard:UniqueID </key>  <array> <string> 70 </string>  </array> 
    <key> dsAttrTypeStandard:UserShell </key>  <array>  <string> /usr/bin/false </string>  </array>
</dict>
</plist>
               

readpl[i] path key [value_index] plist_path                显示plist_path,
[ with i: for the plist at value_indexiorigin 1) ]
的内容key value                    

如果plist_path字典数组的键,则其内容以 plist 形式显示在plist_path.
如果 plist_path是字符串、数字、布尔值、日期或数据对象的键,则仅显示值。                    


readall [path [key ]]                显示给定类型的所有记录,                    
单链表。readall /users RecordName UniqueID
记录名称:_accessoryupdater
唯一标识:278
-
记录名称:_amavisd
唯一标识:83
-
记录名称:_analyticsd
......一些重新格式化
记录名称:_xserverdocs 唯一 ID:251
-
记录名称:守护进程唯一 ID:1
-
记录名称:dgerman com.apple.idms.appleid.prd.001019-05-6083f738-c989-45c0-a0c0-61c7d6a816bb
唯一标识:501
-
记录名称:goggalixy210722 唯一 ID:504
-
记录名称:mgerman 唯一 ID:503
-
记录名称:nobody 唯一 ID:-2
-
记录名称:
 内置\本地系统
唯一标识:0
-
记录名称:车辙唯一ID:502
               

list [path]
ls
               
列出子目录
在列出搜索路径的情况下,名称前面有一个索引快捷方式,可在指定路径时代替名称。                    

在交互模式下使用时,路径是可选的。
如果没有给出路径,将使用当前目录。                    

BSD
Local

Search
Contact
                   

search path key val
               
搜索与模式匹配的记录,以给定路径为根。
该路径可以是节点路径或记录类型路径。
有效键是目录服务记录属性类型。                

create record_path [key [val …]]
mk
               
创建记录、属性或值。
如果只给出记录路径,如果记录不存在,则创建记录。
如果给出了一个键,那么将创建一个具有该键的属性。
要将值添加到现有属性,请使用appendmerge
警告 - 具有给定密钥的现有属性将被销毁。                    

如果包含值,则将为给定键设置它们。
并非所有目录节点都支持没有值的属性。                    


                   


createpl[i] record_path key [value_index] plist_path v1 [v2 …]                    在 plist_path 创建一个字符串或字符串数组。
[ with i: for the plist at value_index ]
要在作为数组的 plist 的根目录处创建,请使用“0”作为 plist_path。
如果仅v1指定,则将在...处创建一个字符串plist_path
如果v1 v2 指定...,则将在 处创建一个字符串数组plist_path                    

警告 - 给定 plist_path 的现有值将被破坏。                    


append record_path key val                 将一个或多个附加valkeyin record_path
如果该属性不存在,则创建该属性。                    


                   


merge record_path key val                 将一个或多个附加valrecord_path.
如果该属性还没有这些值。
如果该属性不存在,则创建该属性。                    


                   


change[i] record_path key [ old_valindex] new_val                用 in替换old_valor
[ with i] 的值index列表中的at值。 key
new_valrecord_path
               

diff path1 path2 [key] …                比较来自path1和的数据path2                
delete path [key [val …]]
rm
               
删除目录、属性或值。如果给出了目录路径,则 delete 命令将删除该目录。
只能用于记录类型和记录路径。
如果给出了一个键,那么具有该键的属性将被删除。
如果给出了一个或多个值,则这些值将从带有键的属性中删除。                    


                   


deletepl[i] record_path key [index] plist_path [val …]                删除 plist 中的值。
[ with iindexkey的值]
如果没有给出值,则 deletepl 删除plist_path
如果给出一个或多个值,则删除其中的值plist_path.                

passwd user_path [new_pasword | old_password new_pasword]                通过完整路径更改用户的密码,而不仅仅是用户名。
如果您已通过节点身份验证(通过指定 -u and -P 或在交互式节点中使用 auth 命令),则
指定新密码。
如果您未通过身份验证,则必须指定用户的旧密码。                    


                   


其他交互式命令                    


                   


cd dir                设置当前目录                
pushd [pathr][
pd                
当指定路径时,设置当前目录,同时将前一个目录推送到目录堆栈。
如果未指定路径,则交换目录堆栈的顶部两个元素。
显示最终目录堆栈。                    


                   


popd                弹出目录堆栈,返回新的顶级目录并显示最终目录堆栈。                    


                   


auth (su)[user [password]]                以指定用户身份进行身份验证,默认root.
如果在主机模式下运行,当前目录必须在节点的子目录中。                    


                   


authonly [user [password]]                验证a的密码user,默认root
               

MCX 扩展:                
mcxread record path [optArgs] [appdomain [keyName]]                

mcxset record path [optArgs] appdomain keyName [mcxdomain [keyvalue]]                

mcxedit record path [optArgs] appdomain keyPath [keyvalue]                

mcxdelete record path [optArgs] [appdomain [keyName]]                

mcxexport record path [optArgs] [appdomain [keyName]]                

mcximport record path [optArgs]<file path<="" var="">                

mcxhelp                

如果 dscl 在主机模式下运行,则当运行此命令时,当前目录必须位于节点的子目录中。    


   

例子    

查看本地目录节点中的一条记录    
单链表。read /Users/www |cut -c1-140 # 避免显示所有 JPEGPhoto 数据
AppleMetaNodeLocation:/本地/默认
生成的UID:FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000046
NFSHomeDirectory: /Library/WebServer
密码: *
主要组 ID:70
真正的名字:
 万维网服务器
记录名称:_www www
记录类型:dsRecTypeStandard:用户
唯一标识:70
用户外壳:/usr/bin/false

> 单链表
进入交互模式...(键入“帮助”命令)
 ls
 光盘
   

为 www 用户记录创建或替换 UserShell 属性值
dscl . -create /Users/www UserShell /usr/bin/false    

为 user1 用户记录的 MCXSettings 属性创建或替换 mcx_application_data:loginwindow plist 值的测试键
dscl . -createpl /Users/user1 MCXSettings mcx_application_data:loginwindow:test value    

列出给定节点上所有用户记录的 uniqueID 值
dscl /LDAPv3/ldap.company.com -list /Users UniqueID    

尝试附加一个包含空格的值
dscl . -append /Users/www Comment "This is a comment"
dscl 出错时返回 - (255)。    

> read /Users/dgerman
Cannot open remote host, error: DSOpenDirServiceErr
   

不要忘记点!    


   

read . /Users/www
/Users/www: (null)

单链表。阅读/组/员工
AppleMetaNodeLocation:/本地/默认
生成的UID:ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000014
集团成员:FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000000 59997304-7D55-48BD-B285-40E59A7E608C
              C623BE2C-CC4C-4500-A27F-60912FF32A49 FFFFEEEE-DDDD-CCCC-BBBB-AAAA0000003A
GroupMembership:root rut dgerman _serialnumberd
密码: *
主要组 ID:20
真实姓名:职员
记录名称:员工 BUILTIN\Users
记录类型:dsRecTypeStandard:组
SMBSID:S-1-5-32-545





德尔曼2012 年 8 月 7 日


#dscl 。阅读 /Users/dgerman | 切-c1-120#不显示所有的JPEGphoto
 dsAttrTypeNative_writers_hint: dgerman
 dsAttrTypeNative_writers_jpegphoto: dgerman
 dsAttrTypeNative_writers_LinkedIdentity: dgerman
 dsAttrTypeNative_writers_passwd: dgerman
 dsAttrTypeNative_writers_picture: dgerman
 dsAttrTypeNative_writers_realname: dgerman
 dsAttrTypeNative_writers_UserCertificate: dgerman
 dsAttrTypeNative帐户策略数据:<xml 版本="1.0" 编码="UTF-8">
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist 版本="1.0">
<字典>
    <key>creationTime<key> <real>1453774461.1459241<real>
    <key>failedLoginCount<key> <integer>0<integer>
    <key>failedLoginTimestamp<key> <integer>0<integer>
    <key>lastLoginTimestamp<key> <real>978307200<real>
    <key>passwordLastSetTime<key> <real>1354061376<real>
<字典>
<plist>

dsAttrTypeNative : LinkedIdentity :
 <xml 版本="1.0" 编码="UTF-8"?>
<DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist 版本="1.0">
<字典>
    <key>appleid.apple.com<key>
    <字典>
        <key>允许密码重置<key> <true/>
        <key>关联身份<key>
        <array> <dict> <key>未验证名称<key> <string>dgermanapl@real-world-systems.com<string> <dict> <array>
    <字典>
<字典>
<plist>


AppleMetaNodeLocation : /Local/Default
 AuthenticationAuthority : ;Kerberosv5;
;dgerman@LKDC:SHA1.E08104A89DD6B9076C3EAFDB36F44C0C27EAB1A3;
LKDC:SHA1.E08104A89DD6B9076C3EAFDB36F44C0C27EAB1A3;
;ShadowHash;哈希表:
AuthenticationHint : initals 2x hex
 Building : Real-world-Systems.com
 GeneratedUID : D974AB7E-DDD1-4F89-823F-B65965D43013
 HomePhoneNumber : 973/226-6672
 JPEGPhoto : ffd8ffe0 00104a46 … + + + + + + + + 很多字十六进制 + + + + + + + + + + ...
 NFSHomeDirectory : /Users/dgerman 链接到 /Volumes/DATA/dgerman
密码: ********
图片: /Library/User Pictures/Animals/Butterfly.tif
 PrimaryGroupID : 20
实名: Dennis German
 RecordName : dgerman
 RecordType : dsRecTypeStandard:Users
 UniqueID : 501
 UserShell: /bin/bash
    

单链表。阅读 /groups/staff|cut -c1-140 dsAttrTypeNative:record_daemon_version:4850000 AppleMetaNodeLocation:/本地/默认 生成的UID:ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000014 组员:FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000000              C623BE2C-CC4C-4500-A27F-60912FF32A49              59997304-7D55-48BD-B285-40E59A7E608C              FFFFEEEE-DDDD-C GroupMembership:root dgerman rut _serialnumberd 密码: * 主要组 ID:20 真实姓名:职员 记录名称:员工 BUILTIN\Users 记录类型:dsRecTypeStandard:组 SMBSID:S-1-5-32-545
,smb-nt>


 
./默认值:别名配置组机器网络用户
                   .plist
./Default/aliases:管理员 manager none 操作员 MAILER-AGENT MAILER-DAEMON postmaster dumper

./Default/config: KerberosKDC SharePoints

./默认/配置/SharePoints:
 Dennis German 的公共文件夹
 管理员的公共文件夹
 rut 的公共文件夹

./默认/组:
_amavisd _appowner _appserveradm _appserverusr _ard _atsserver
_日历 _clamav _cvs
_devdocs _guest _installer _jabber _keytabusers    
_lp _lpadmin _mailman _mcxalr _mdnsresponder _mysql
_pcastagent _pcastserver _postdrop _postfix _qtss
_sandbox _securityagent _serialnumberd _spotlight _sshd _svn     
_teamsserver _tokend _unknown _update_sharing _uucp _windowserver _www
_xgridagent _xgridcontroller
 可访问性 admin authedusers bin certusers consoleusers
 daemon dialer everyone group interactusers kmem localaccounts
 邮件 netaccounts netusers 网络 没有人 nogroup 操作员 所有者
 procmod procview smmsp 员工系统 utmp 轮

 com.apple.sharepoint.group.1 com.apple.sharepoint.group.2 com.apple.sharepoint.group.3

./默认/机器:广播主机本地主机 
./默认/网络:环回

./默认/用户:
  _amavisd _appowner _appserver _ard _atsserver _calendar _clamav _cvs _cyrus _devdocs   
  _eppc _installer _jabber _lp _mailman _mcxalr _mdnsresponder _mysql _pcastagent _pcastserver    
  _postfix _qtss _sandbox _securityagent _serialnumberd _spotlight _sshd _svn _teamsserver _tokend
  _unknown _update_sharing _uucp _windowserver _www _xgridagent _xgridcontroller

  admin dgerman root rut 无人守护进程  
           

   > 单链表。阅读 /users/dgerman | cut-c1-90 # 剪切以最小化 JPG 输出 scl_cmd DS 错误:-14009 (eDSUnknownNodeName) 在交互时 oops dscl  


ls xxxxxx(不报任何东西)可能不是目录,试试 read xxxxxx


DirectoryService , DirectoryServiceAttributes(7) mactech.com/articles/mactech/Vol.22/22.10/2210MacInTheShell/index.html

2003 年 8 月 25 日 Mac OS X



2012 年 11 月 29 日

单链表。阅读/组/员工
AppleMetaNodeLocation:/本地/默认
生成的UID:ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000014
组员:FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000000
群组成员:root
密码: *
主要组 ID:20
真实姓名:职员
记录名称:员工 BUILTIN\Users
记录类型:dsRecTypeStandard:组
SMBSID:S-1-5-32-545


MCX 扩展

指定要对目录节点中的record path哪条记录进行操作(例如: /Users/mcx1)(必需)
在交互模式下使用“.” 表示“当前目录”(最后使用“cd”命令设置的目录)。

示例appDomain'com.apple.dock'

示例 keyName参数: 'tilesize'

keyPath参数是现有键值中子 plist 的路径。例如mount-controls:dvd:1,表示数组中的第二个元素,键名dvd中的键名为mount-controls(第一个是0

mcxDomain是应用于密钥的管理类型:( 托管none )always、、、onceoftenunset

keyValue是要用于键的新值 。defaults使用与命令行工具相同的语法。
指定 plist 或 xml 值时,请将参数括在撇号中。
例如:

    dscl ...'(验证,弹出)'
    dscl ...'real64.0/real'


MCX 扩展遵循与其他 dscl comamnds 相同的语法,遵循相同的身份验证规则,并且可以在交互和命令行模式下使用

本地命令行示例

$ dscl 。mcxread /Users/mcxtest com.apple.dock tilesize
$ dscl -u admin -P apple 。mcxset /Users/mcxtest com.apple.dock tilesize always -float 32

本地交互示例

> $ dscl
> cd /NetInfo/Users/mcxtest
> mcxread 。com.apple.dock =
** 对于基于写入的命令,您必须首先“cd”到相应的节点,然后发出“auth”命令 **
> cd /NetInfo/Users/mcxtest
> auth admin apple
> mcxset。com.apple.dock tilesize 始终 -float 32

远程命令行示例

$ dscl -u diradmin -P 苹果 10.0.116.132 mcxread /LDAPv3/127.0.0.1/Users/phd1 = =

无法远程使用需要对节点进行写访问的命令(示例mcxset)。

远程交互示例

$ dscl -u diradmin -P apple 10.0.116.132
> mcxread /LDAPv3/127.0.0.1/Users/phd1 com.apple.SoftwareUpdate CatalogURL
** 对于基于写入的命令,您必须先“cd”到相应的节点,然后发出'auth' 命令 **
> cd /LDAPv3/127.0.0.1
> auth diradmin apple
> mcxset Users/phd1 com.apple.dock tilesize always -float 62.5


显示 MCX 首选项键的现有值。]]
mcxread record path [optArgs] [appDomain [keyName

[选择参数]



-v mcxVersion            应该检索哪个版本的密钥。搜索默认版本 1 密钥。            
-o filePath            应写入结果的输出文件。默认结果写入标准输出。            
-format xml|plist|text                如何格式化输出。默认text.            
appDomain            您要从中检索密钥的应用程序域。
如果省略,=则将转储指定记录的所有应用程序域。                


               

keyName            您要检索的密钥的名称。如果省略或等于'=',则将显示所有键。                


               

示例:
显示 'com.apple.dock' 应用程序域中的 'autohide' 键的值
mcxread /Users/mcx1 com.apple.dock autohide
以 XML 格式显示,'com.apple.dock' 应用程序域中
mcxread /Users/mcx1 -format xml com.apple.dock =
的所有键 以 plist 格式显示,当前记录的所有应用程序域的所有键]]]
mcxread . -format plist = = mcxset record path [optArgsappDomain keyName [mcxDomain<[keyValue [UPK[optArgs]
<table border="1" cellspacing="0" cellpadding="5:"

="">
-v mcxVersion                    要设置的密钥的版本。如果省略,将创建版本 1 密钥。                    
appDomain                    要在其中设置密钥的应用程序域。                    
keyName                    正在设置的密钥的名称                    
mcxDomain                    要应用于密钥的管理类型。有关有效值,请参见上文。此外,如果缺少此参数或 '.' 然后将搜索现有的密钥,并且不会更改现有的管理值。将管理设置为“无”与删除密钥相同(将删除指定记录中该密钥的管理)。                    
keyValue                    指定键的新值。可以使用与“默认值”命令行工具相同的语法来指定值。如果键的现有值不会被更新。                    
UPK                    (可选)联合策略密钥的值。如果存在,UPK *必须*被指定为字典。字典的有效键包括:                        
mcx_input_key_names                                    (单个字符串或字符串数组)                                    
mcx_output_key_name                                    (单串)                                    
mcx_remove_duplicates                                    (布尔值)                                    
mcx_union_as_dictionary                                    (布尔值)                                    
mcx_replace                                    (布尔值)                                    

指定inputmcx_input_key_names, outputmcx_output_key_name
如果省略 mcx_input_key_names 或 mcx_output_key_name,则 的值keyName将用于缺失值。                        

。例子:        

        使用“always”管理将 com.apple.dock 域中的“autohide”键设置为 TRUE。
    mcxset /Users/mcx1 com.apple.dock 总是自动隐藏 -bool 1
    
        将“自动隐藏”键移至“一次”管理,保留键的现有值。
    麦克斯集。com.apple.dock 自动隐藏一次
        
        删除当前记录的 com.apple.dock 域中自动隐藏键的管理。
    麦克斯集。com.apple.dock 自动隐藏无
    
        将 autohide 的值设置为 FALSE,保留现有的管理级别
    麦克斯集。com.apple.dock 自动隐藏。-布尔0
    
        将tilesize键设置为浮点数64.0
    麦克斯集。com.apple.dock 瓷砖尺寸。real64.0/real
    
    
        

指定 UPK 的示例:        

       麦克斯集。com.apple.test testkey-Raw 总是 '(1,2,3)' '< input=testkey-Raw; 输出=测试键;mcx_remove_duplicates=1;mcx_replace=1;mcx_union_as_dictionary=0;}'        麦克斯集。com.apple.test testkey-Raw always '< keya=a; 键B=B;键c=c;}' '< 输出=testkey; mcx_union_as_dictionary=1;}'

mcxedit record path [optArgsappDomain keyPath [keyValue]
更新现有 MCX 首选项键的值。[选择参数]        

-v mcxVersion                    要设置的密钥的版本。默认版本 1 密钥将被编辑。                    
appDomain                    要在其中设置密钥的应用程序域。                    
keyPath                    要编辑的 EXISTING 键的路径。                    
keyValue                    指定键路径的新值。可以使用与“默认值”命令行工具相同的语法来指定值。如果省略 value 参数,则将删除键路径。注意:不允许使用此命令删除整个密钥。要删除整个密钥,请使用“mcxset”并指定管理域“none”。                    
例子:
        将自动隐藏键更改为 TRUE,保留当前管理设置
    麦克西编辑。com.apple.dock 自动隐藏 -bool 1
    
        将 'mount-controls' 字典中的 'dvd' 键设置为包含两个字符串的数组:'authenticate' 和 'eject'
    麦克西编辑。com.apple.systemuiserver mount-controls:dvd '(认证,弹出)'
        
        效果和上个例子一样,只是使用了xml语法
    麦克西编辑。com.apple.systemuiserver mount-controls:dvd arraystringauthenticate/stringstringeject/string/array
        
        将“mount-controls”字典的“dvd”键中的第二个数组元素更改为字符串“deny”
    麦克西编辑。com.apple.systemuiserver mount-controls:dvd:1 拒绝
    
        删除 'mount-controls' 字典的 'dvd' 键
    麦克西编辑。com.apple.systemuiserver mount-controls:dvd

mcxdelete record path [optArgs] [appDomain [keyName]] ==
删除 MCX 首选项键的管理。等效于使用“mcxDomain”值为“none”的 mcxset 命令。        

[选择参数]        

-v mcxVersion                    要删除的密钥的版本。如果省略,版本 1 密钥将被删除。                    
appDomain                    要在其中设置密钥的应用程序域。省略或指定“=”表示将处理所有应用程序域。                    
keyName                    要删除的密钥的名称。省略或指定“=”意味着将删除应用程序域中的所有键。                    
例子:
        不再管理“自动隐藏”Dock 键。
    麦克删除。com.apple.dock 自动隐藏
    
        删除所有 Dock 相关键的管理。
    麦克删除。com.apple.dock
    
        删除当前记录的所有键的管理。
    麦克删除。

mcxdeleteall record path [optArgs] [appDomain [keyName]]
与 mcxdelete 的工作方式相同,只是此命令不要求您指定特定记录的路径。相反,路径可以指向一个节点或记录类型,并且将处理其中的所有记录。例子:        

        假设当前工作目录指向 DS 节点,删除所有用户的所有管理密钥。
    mcxdeleteall 用户

        
        , 删除所有计算机记录的所有 Dock 相关密钥的管理。
    mcxdeleteall 计算机 com.apple.dock
        
        ,删除所有组记录的“自动隐藏”Dock 键的管理。
    mcxdeleteall Groups com.apple.dock 自动隐藏

        , 删除节点中所有用户、组、计算机、计算机组和计算机列表的所有管理密钥。  
    mcxdeleteall 。

麦克出口]] record path [optArgs] [appDomain [keyName        

与生成输出格式相同的功能mcxread,以后可以使用mcximport通常指定 -o将输出写入文件。        

例子:        

    麦克出口。-o /tmp/export.plist com.apple.dock

mcximport record path [optArgsfile path
= 导入之前使用“mcxexport”导出的键/值。导入文件中的每个键/值都将被处理,就好像数据被传递给“mcxset”一样。这意味着将导入文件中的数据添加到记录中的现有数据中。        

[选择参数]        

-d                    从记录中删除在导入文件中找到的任何键。相当于调用mcxdelete导入文件中的每个键。导入文件中键的值被忽略。                    
file                    包含要导入的数据的文件。                    
例子:
    麦克斯进口。/tmp/export.plist
    麦克斯进口。-d /tmp/export.plist

使用 dscl 代替 netinfo        


       

sudo plistbuddy /private/var/db/dslocal/nodes/Default/users/dgerman.plist >0 # 一些无法打印的东西!JPEG照片

       

plistbuddy Opendirectory 显示的用户 plist示例        

sudo ls -l /private/var/db/dslocal/nodes/Default/users/dgerman.plist
rw------- 1 根轮 336094 Mar 17 12:04 /private/var/db/dslocal/nodes/Default/users/dgerman.plist

./Default/groups 用户别名配置机器网络        

截至 2007 年 10 月的文件
使用 dscl 而不是 netinfo        






来自  https://www.real-world-systems.com/docs/dslocal.db.html




Mac 命令 - 目录编辑器、dscl 和自定义清单    

       

文章编号:181718        

日历_今天        

更新日期:27-02-2014        

产品        

Mac 库存解决方案    

问题/介绍        

 

解决        

本文概述了 Mac OS X 目录编辑器和相关的 dscl 命令行实用程序。它包括使用 Symantec Management Platform 的 Mac 自定义清单收集此目录数据的示例。本文旨在简单但足够详细地介绍此信息以供入门。         
 
Mac 可用的目录包括 Mac 上的本地目录、域上的 Active Directory 等。         
 
警告:请记住,未经授权访问生产数据可能违反公司政策和/或政府法律。建议您在访问生产公司数据之前咨询您的公司,以避免因未经授权的访问而引起任何问题。本文档的所有测试均在测试 Mac 计算机和带有虚拟数据的测试 Active Directory 服务器上完成。         
 
目录编辑器和 dscl 命令概述        
 
Mac OS X 的“目录实用程序”提供将 mac 计算机绑定到域、启用/禁用 root 用户和其他一些功能的功能。此实用程序位于 /System/Library/CoreServices/Directory Utility.app 中。         
 
目录实用程序鲜为人知的功能之一是“目录编辑器”。         
 
此功能的命令行版本是“ dscl ”,在其手册页中将其描述为“目录服务命令行实用程序”。         
 
目录编辑器和 dscl 命令都允许连接、查询和与目录交互。         
  
术语        
 
注意:“~=”在本文档中表示“等于或大致等于”。         
 
节点        
 
节点〜=数据源〜=(服务器和数据库)。节点可以指定本地数据库或托管在另一台机器上的数据库。示例节点类似于以下内容:         
 
/本地/默认        
/Active Directory/MYDOM0/所有域        
 
第一行显示本地 mac 计算机上默认数据库的节点。第二行是指定域中的所有域 Active Directory 数据库。         
 
命令        
 
dscl 实用程序有几个可以对数据库记录执行的操作。其中包括 list、read、readall、create、delete、merge、change 等。有关可用命令的更多详细信息,请参见“man dscl”。本文档将只处理读取类型的命令。         
 
小路        
 
路径 ~=(表和记录)。路径通常包括数据库表名和记录名。示例包括:         
 
用户 johndoe        
电脑 mymac$        
   
目录编辑器        
 
在目录编辑器屏幕中,服务器和数据库显示在“节点”下拉列表中:        
 
         
  
表格或所选节点的“路径”的第一部分显示在“查看”下拉列表中:        
 
         
  
然后,单个记录或路径的第二部分将显示在应用程序屏幕的左窗格中。在这种情况下,唯一的本地计算机是“localhost”,这是有道理的。从左窗格的列表中选择记录后,该记录的各个属性和相应数据将显示在窗口的主要部分,如下所示:        
 
         
  
这是使用 Mac 数据库编辑器和 dscl 命令行查找数据库数据的基本过程:选择或指定服务器和数据库(节点或数据源),然后选择表和记录(路径)。然后可以查看各个属性,例如 ipaddress、DNSName 等。         
  
'dscl' 命令        
 
dscl 命令使用终端应用程序或等效应用程序从 shell 提示符运行。它有两种模式——交互式和非交互式。dscl 命令返回目录编辑器应用程序中显示的相同数据。         
 
注意:大多数名称在使用 dscl 命令时都区分大小写。         
  
交互模式        
 
在 shell 提示符下键入 'dscl' 并按 'enter' 可以访问交互模式。交互模式显示“>”提示。此时,dscl 正在等待进一步的命令。要退出交互模式,请输入字母“q”并按“回车”。         
 
请注意,“ls”和“cd”命令在交互模式下工作。这允许查看当前位置的条目并遍历节点和路径。提示将包括目录路径中的当前位置。         
  
非交互模式        
 
在非交互模式下,整个命令在一行中输入,结果输出显示在屏幕上,然后是正常的 shell 提示符。         
 
此命令的一般语法是指定节点、要执行的命令、路径以及可选的属性或列列表。        
 
节点、命令、路径、属性        
 
要么        
 
数据源和数据库、命令、表和记录、属性        
 
请注意,属性是可选的。不指定属性将返回指定表中的所有属性。查看表的所有属性可能有助于确定属性名称以及哪些属性对给定需求最有帮助。         
 
示例非交互式命令:         
 
• dscl /Local/Default 读取 Computers/localhost IPAddress        
• dscl /Active\ Directory/MyDomSrv/mydom.com -read /Computers/mymacpro$ distinctName         
 
请注意,必须按此顺序指定节点、命令和路径。似乎无法指定命令、节点/路径或其他变体。         
   
读取 localhost 数据的交互序列示例        
 
dscl        
进入交互模式...(键入“帮助”命令)        
 
ls        
LDAPv3        
当地的        
接触        
搜索        
 
cd /本地/默认        
/Local/Default >读取计算机/localhost        
 
dsAttrTypeNative:KerberosFlags:110        
AppleMetaNodeLocation:/本地/默认        
IP地址:127.0.0.1        
IPv6地址:::1 fe80::1%lo0        
KerberosServices:主机 afpserver cifs vnc        
记录名称:本地主机        
记录类型:dsRecTypeStandard:计算机        
/本地/默认 >         
 
用于读取本地主机数据的示例非交互式命令        
 
dscl /Local/Default 读取计算机/localhost        
 
dsAttrTypeNative:KerberosFlags:110        
AppleMetaNodeLocation:/本地/默认        
IP地址:127.0.0.1        
IPv6地址:::1 fe80::1%lo0        
KerberosServices:主机 afpserver cifs vnc        
记录名称:本地主机        
记录类型:dsRecTypeStandard:计算机        
 
从 localhost 记录中读取单个属性的示例非交互式命令        
 
dscl /Local/Default 读取 Computers/localhost IPAddress        
IP地址:127.0.0.1        
   
以下示例显示了用于从特定计算机的 Active Directory 收集 DNSName、RealName 和 RecordName 的交互式和非交互式命令。          
 
用于读取特定活动目录计算机数据的交互式命令示例        
 
dscl        
进入交互模式...(键入“帮助”命令)        
 
cd Active\ Directory/MYDOM0/All\ Domains/Computers        
/Active Directory/MYDOM0/所有域/计算机         
 
ls        
MYDOM $        
我的麦克迷你$        
我的macpro$        
MYNB $        
WIN7VM $        
 
/Active Directory/MYDOM0/All Domains/Computers >读取 MYNB$ DNSName RealName RecordName        
 
DNS 名称:MYNB.mydom.com        
真实姓名:MYNB        
记录名称:MYNB$        
  
请注意,在上面的交互式示例中,数据库名称(计算机) 包含在命令的节点部分中。非交互模式不允许将数据库放在节点中。以下两个非交互式命令分别显示了不正确和正确的节点和路径语法。(此规则可能有所不同。)        
  
用于读取活动目录计算机数据的示例非交互式命令        
  
* 该节点包含在双引号中,因为它包含空格。         
 
dscl "/Active Directory/MYDOM0/All Domains/Computers" -read MYNB$ DNSName RealName RecordName        
数据源(/Active Directory/MYDOM0/All Domains/Computers)无效。        
 
dscl "/Active Directory/MYDOM0/All Domains" -read Computers/MYNB$ DNSName RealName RecordName        
 
DNS 名称:MYNB.mydom.com        
真实姓名:MYNB        
记录名称:MYNB$        
   
自定义清单以收集数据库信息        
 
此时,我们已准备好创建自定义清单脚本来收集特定数据。以下是两个使用“dscl”收集目录数据的自定义清单示例。         
 
注意:每个脚本的第一行都有注释,因此不包括辅助脚本。这允许在屏幕上查看输出,而无需将结果发送到 NS/SMP 服务器。要实际将数据发送到 NS/SMP 服务器,请移除开头的“#”符号。         
 
注意:那些具有更高编程技能的人可能能够减少在这些脚本中执行的“dscl”命令的数量。如果您愿意,请随时分享代码。        
 
收集本地用户信息        
 
-------------------------------------------------------------------        
#. `aex-helper 信息路径 -s INVENTORY`/lib/helpers/custominv_inc.sh        
# SCRIPT_BEGINS_HERE        
#        
#!/bin/sh        
 
# 指定自定义库存数据类、属性等。         
回声 cust_mac_localusers        
回声“分隔符=\”\“”        
echo "string250 string50 string250 string250 string50 string250"        
echo "NFSHomeDir PrimaryGroup RealName RecordName UniqueID UserShell"        
 
# 列出用户,获取每个用户的数据        
对于 i in `dscl /Local/Default -list /Users`;做         
  uniqueID=`dscl /Local/Default -read /Users/$i UniqueID | awk '{ 打印 $2 }'`        
 
  # 排除系统创建的 ID 低于 500 的用户        
  if ["${uniqueID:-0}" -ge 500 ]; 然后        
    nfsHD=`dscl /Local/Default -read /Users/$i NFSHomeDirectory | awk '{ 打印 $2 }'`        
    pGroupID=`dscl /Local/Default -read /Users/$i PrimaryGroupID | awk '{ 打印 $2 }'`        
    realName=`dscl /Local/Default -read /Users/$i RealName | awk '{ 打印 $2 }'`        
    recName=`dscl /Local/Default -read /Users/$i RecordName | awk '{ 打印 $2 }'`        
    userShell=`dscl /Local/Default -read /Users/$i UserShell | awk '{ 打印 $2 }'`        
    echo $nfsHD $pGroupID $realName $recName $uniqueID $userShell        
  是        
完毕        
-------------------------------------------------------------------        
   
收集 Active Directory 计算机名称        
 
-------------------------------------------------------------------        
#. `aex-helper 信息路径 -s INVENTORY`/lib/helpers/custominv_inc.sh        
# SCRIPT_BEGINS_HERE        
#        
#!/bin/sh        
 
# 指定自定义库存数据类、属性等。         
回声 cust_ad_computernames        
回声“分隔符=\”\“”        
回显字符串50 字符串50 字符串50        
echo "RealName DNSName DistinguishedName"        
 
# 获取AD中的计算机列表并返回特定属性;使用 awk 排除属性名称并仅返回值。         
对于 i 在 `dscl /Active\ Directory/MYDOM0/mydom.com -list /Computers` 中;做         
  realName=`dscl /Active\ Directory/MYDOM0/mydom.com -read /Computers/$i RealName | awk '{ 打印 $2 }'`        
  dnsName=`dscl /Active\ Directory/MYDOM0/mydom.com -read /Computers/$i DNSName | awk '{ 打印 $2 }'`        
  distName=`dscl /Active\ Directory/MYDOM0/mydom.com -read /Computers/$i distinctName | awk '{ 打印 $2 }'`        
  回声 $realName $dnsName $distName        
完毕        
-------------------------------------------------------------------        
 
下面附上以上两个样本。         
 


来自  https://knowledge.broadcom.com/external/article/181718/mac-commands-directory-editor-dscl-and.html



dscl

目录服务命令行实用程序
创建、读取和管理目录服务数据。如果在没有任何命令的情况下调用,dscl 将以交互模式运行,从标准输入读取命令。交互处理由quit 命令终止。(dscl 和 GUI 'Directory utility' 取代了旧的 'NetInfo Manager')

句法
      dscl [选项]数据源[命令]

选项
   -p 提示输入密码
   -u user      认证为用户
   -P password  认证密码
   -f filepath  目标本地节点数据库文件路径
   -raw 不要从 DirectoryService API 常量中去除前缀
   -plist 以 XML plist 格式打印出记录或属性
   -url 以 URL 样式编码打印记录属性值
   -q quiet - 没有交互式提示

命令:
   -读取[路径[...]]
   -readall [ path [ key ...]] 
  -readpl path key plist_path
   -readpli path key value_index plist_path   -list path [ key ]   -search路径 key val   -create record_path [ key [ val ...]]   -createpl record_path key plist_path val1 [ val2 ...]
  -createpli record_path key value_index plist_path val1 [ val2 ...]   -追加记录路径键值...   -合并记录路径键值...   -删除路径[[ val ...]]   -deletepl record_path key plist_path [ val ...]
  -deletepli record_path key value_index plist_path [ val ...]   -change record_path key old_val new_val   -changei record_path key val_index new_val   -diff path1 path2 [key ...]   -passwd 用户路径[密码| 旧密码新密码] 仅在交互模式下可用:   -cd 目录   -pushd [目录]   -popd   -auth [用户[密码]]   -authonly [用户[密码]]   -放弃


前导破折号(即中短横)(“-”)对于所有命令都是可选的。

dscl 对命令行上指定的数据源进行操作。这可以是由 DNS 主机名或 IP 地址指定的节点名称或 macOS 服务器(10.2 或更高版本)主机。节点名称可以是以斜杠 ("/") 开头的绝对路径,或以点 (".") 字符开头的相对域路径,它指定本地域,或 "..",指定本地域的父级。如果使用主机名或 IP 地址形式,则用户必须指定 -u 选项和 -P 或 -p 选项来指定远程主机上的管理用户和密码,以向远程主机进行身份验证。如果指定了“localhost”,则例外。

在命令行上传递密码本质上是不安全的,并且可能导致密码泄露。为提高安全性,请勿在命令中提供密码,系统会安全提示您。

PATH SPECIFICATION

指定要操作的路径时,有两种操作模式。这两种模式对应于数据源是节点还是主机。在指定节点的情况下,顶级路径将是记录类型。示例顶级路径将是:

     /用户/爱丽丝
     /组/管理员


在将主机指定为数据源的情况下,顶级路径对应于 Open Directory 插件和搜索路径。可以指定插件遍历到一个节点名,之后的路径就相当于以前的用法了。以下可能是与上述路径等效的路径:

     /NetInfo/root/用户/爱丽丝
     /LDAPv3/10.0.1.42/Groups/admin


如果路径组件包含带有嵌入斜杠字符的键或值,则斜杠字符必须使用前导反斜杠字符进行转义。由于 shell 还处理转义字符,因此需要一个额外的反斜杠来正确指定转义。例如,要读取“/Mounts”路径中名为“ldapserver:/Users”的挂载记录,将使用以下路径:

    单链表。-读取 /Mounts/ldaphost:\/用户

     所有路径名都区分大小写。


命令

每个命令的作用如下所述。有些命令有别名。例如,“猫”和“。” 是“读”的别名。命令
别名列在括号中。

   阅读(猫。)
   用法:读取 [path [key ...]]


打印目录。每个属性每行打印一个。属性键后跟一个冒号,然后是
该属性值的空格分隔列表。请注意,包含嵌入空格的值看起来与一对值相同。

如果已给出原始输出的-raw标志,则 read 打印记录和属性类型的完整 DirectoryService API 常量。

如果已指定 -url 标志,则打印的记录路径属性值以 URL 的样式编码。如果脚本或程序试图处理输出,这很有用,
因为值不会有任何空格或其他控制字符。

   阅读全文
   用法:readall [ path [ key ...]]


readall 打印给定类型的所有记录。readall 的输出格式与 read 的格式相同,在一行上使用“-”作为
记录之间的分隔符。

   阅读器
   用法:readpl路径键 plist_path


打印 plist_path 的内容。plist_path 后跟一个冒号,然后是一个空格,然后是路径的值。

如果 plist_path 是字典或数组的键,则其内容以 plist 形式显示在 plist_path 之后。如果 plist_path 是
字符串、数字、布尔值、日期或数据对象的键,则仅在 plist_path 之后打印值。

   读普利
   用法:readpli path key value_index plist_path


在键的 value_index 处打印 plist 的 plist_path 的内容。plist_path 后跟一个冒号,然后是一个空格,然后
是路径的值。

如果 plist_path 是字典或数组的键,则其内容以 plist 形式显示在 plist_path 之后。如果 plist_path 是
字符串、数字、布尔值、日期或数据对象的键,则仅在 plist_path 之后打印值。

   清单 (ls)
   用法:列出路径


列出给定目录的子目录。每行列出一个子目录。在列出搜索路径的情况下,名称前面有一个索引号,该索引号可以用作快捷方式,并在指定路径时用来代替名称。

在交互模式下使用时,路径是可选的。如果没有给出路径,将使用当前目录。

   搜索路径键值


搜索与模式匹配的记录。搜索根植于给定的路径。路径可以是节点路径或记录类型路径。有效键是目录服务记录属性类型。

   创建(MK)
   用法:创建record_path [ key [ val ...]]


创建记录、属性或值。如果只给出一个记录路径,如果记录不存在,create 命令将创建该记录。如果给出了一个键,那么将创建一个具有该键的属性。

警告 - 如果具有给定键的属性已经存在,它将被销毁并在其位置创建一个新属性。要将值添加到现有属性,请使用附加或合并命令。

如果命令中包含值,则将为给定键设置这些值。

注意 - 并非所有目录节点都支持没有值的属性。如果您尝试在此类目录节点中创建没有值的属性,则会出现错误。

   创建
   用法:createpl record_path key plist_path val1 [ val2 ...]


在 plist_path 创建一个字符串或字符串数组。

如果要在作为数组的 plist 的根目录创建值,请使用“0”作为 plist_path。

如果只指定了 val1,则会在 plist_path 处创建一个字符串。如果指定了 val1 val2 ...,则将在
plist_path 处创建一个字符串数组。

警告 - 如果具有给定 plist_path 的值已经存在,它将被销毁并在其位置创建一个新值。

   创建普利
   用法:createpli record_path key value_index plist_path val1 [ val2 ...]


在 plist_path 处为键的 value_index 处的 plist 创建一个字符串或字符串数组。

如果要在作为数组的 plist 的根目录创建值,请使用“0”作为 plist_path。

如果只指定了 val1,则会在 plist_path 处创建一个字符串。如果指定了 val1 val2 ...,则将在
plist_path 处创建一个字符串数组。

警告 - 如果具有给定 plist_path 的值已经存在,它将被销毁并在其位置创建一个新值。

   附加
   用法:追加record_path key val ...


将一个或多个值附加到给定记录中的属性。如果该属性不存在,则创建该属性。

   合并
   用法:合并record_path key val ...


如果属性还没有这些值,则将一个或多个值附加到给定目录中的属性。
如果该属性不存在,则创建该属性。

   改变
   用法:更改记录路径键 old_val new_val


将给定键的值列表中的给定旧值替换为指定记录中的新值。

   樟宜
   用法:changei path key index val


将给定键的值列表中给定索引处的值替换为指定记录中的新值。index 是一个整数值。索引 1 指定第一个值。大于列表中值数量的索引将导致错误。

   diff
  用法:diff path1 path2 key ...


比较来自 path1 和 path2 的数据,查看指定的键(如果没有指定键,则为全部)。

   删除(rm)
   用法:删除路径[key [val ...]]


删除目录、属性或值。如果给出了目录路径,则 delete 命令将删除该目录。这只能用于记录类型和记录路径。如果给出了一个键,那么具有该键的属性将被删除。如果给出了一个或多个值,则这些值将从具有给定键的属性中删除。

   删除
   用法: deletepl record_path key plist_path [ val ...]


删除 plist 中的值。如果没有给出值,deletepl 删除 plist_path。如果给出一个或多个值,deletepl 删除 plist_path 中的值。

   删除普利
   用法:deletepli record_path key value_index plist_path [ val ...]


在键的 value_index 处删除 plist 的值。如果没有给出值,deletepli 删除 plist_path。如果给出一个或多个值,deletepli 删除 plist_path 中的值。

   密码
   用法:passwd user_path [ new_password | 旧密码新密码]


更改用户的密码。用户必须由完整路径指定,而不仅仅是用户名。如果您通过了节点的身份验证(通过指定 -u 和 -P 标志或在交互式节点中使用 auth 命令),那么您可以指定新密码。如果您未通过身份验证,则必须指定用户的旧密码。如果在交互模式下未指定密码,系统将提示您输入密码。

交互式命令

   光盘
   用法:cd目录


设置当前目录。其他 dscl 命令的路径名可以相对于当前目录。

   推(pd)
   用法:推送路径


类似于 Unix shell 中常见的 pushd 命令。当指定路径时,它会设置当前目录,同时将前一个目录推送到目录堆栈。如果没有指定路径,它会交换目录堆栈的顶部两个元素。它还将打印最终的目录堆栈。

   流行音乐
   用法:popd


弹出目录堆栈并返回到新的顶层目录。它还将打印最终的目录堆栈。

   认证(苏)
   用法:auth [用户[密码]]


以指定用户身份进行身份验证,如果未指定用户,则以“root”身份进行身份验证。如果提供了密码,则该密码用于身份验证,否则命令提示输入密码。

如果 dscl 在主机模式下运行,则当运行此命令时,当前目录必须位于节点的子目录中。

   授权的
   用法:authonly [用户[密码]]


用于验证指定用户的密码,如果未指定用户,则用于验证“root”用户的密码。如果提供了密码,则该密码用于身份验证,否则命令提示输入密码。

如果 dscl 在主机模式下运行,则当运行此命令时,当前目录必须位于节点的子目录中。

   退出(q)
     用法:退出


结束交互命令的处理并终止程序。

   命令历史


向上和向下箭头键将扫描命令历史记录。

   制表符补全


输入路径名时,按 Tab 键将导致搜索以自动完成输入的部分子目录名称。它还将尝试在此过程中纠正大写。

例子

查看本地目录节点
dscl 中的一条记录。-阅读/用户/www

为www用户记录 dscl创建或替换 UserShell 属性值。
-create /Users/www UserShell /usr/bin/false

为user1用户 记录dscl的 MCXSettings 属性创建或替换mcx_application_data:loginwindow plist 值的测试键。-createpl /Users/user1 MCXSettings mcx_application_data:loginwindow:test value

列出给定节点上所有用户记录的 uniqueID 值
dscl /LDAPv3/ldap.company.com -list /Users UniqueID

附加一个包含空格的值
dscl 。-append /Users/www 评论“这是一条评论”

诊断

dscl 将在错误时返回 -1 (255)。

“必须赋予员工责任;以投资为后盾;并提供动力。没有他们,好人不会留下来”~罗伯特·海勒

相关 macOS 命令:

createhomedir - 在本地计算机上创建和填充主目录。
Stack Exchange - 从命令行创建本地 macOS 管理员帐户。
DirectoryService(8)
DirectoryServiceAttributes(7)
等效 (Linux) bash 命令:ldapmodify - LDAP 修改条目和 LDAP 添加条目工具。


来自  https://ss64.com/osx/dscl.html



 
5年前修改    
查看 68k 次    
9                    
               

我在终端中执行了这两个命令:                    

users
                   

                   

dscl . -read /Users/
                   

然后他们告诉我两个不同的结果。第二个给了我一个很长的列表,而第一个只是在 Mac 上显示了我的用户名。                    

当我用谷歌搜索“在 Mac 上列出用户”时,大多数人会告诉我使用第二个。然而,当我执行“man users”时,它告诉我这个命令是“list current Users”。                    

你能告诉我不同之处吗?                    

另外,我如何以 mysql 用户身份执行命令。以下命令不起作用:                    

mkdir mysqldir --user mysql
               
                       
                                   
改进这个问题                                    
2013 年 5 月 8 日 5:59 提问                                
用户头像                                    
                               
  • 1                                
    我发现您在 Mac 上获得您的用户名很有趣,dscl . -read /Users/因为我得到name: dsRecTypeStandard:Users了我所期望的,因为它正在尝试读取 a dsRecTypeUsers在这种情况下,请注意)。 
    – 2rs2ts                                    
     2013 年 7 月 17 日 19:07                                
添加评论                
       

3 个答案 正确答案                    

       
10                        
                   

dscl . -read /Users/不打印任何特别有趣的东西;您可能的意思是dscl . -ls /Users,它会打印在您的计算机上定义的用户帐户列表(包括许多通常隐藏的系统帐户)。users另一方面,打印当前登录您计算机的用户列表(通常只有您)。                        

对于您的第二个问题:您可以使用该sudo命令以另一个用户身份运行命令(例如sudo -u _mysql mkdir mysqldir)。请注意,这需要管理员权限,并且会要求您输入密码以进行验证。                        

                                       
改进这个答案                                        
2013 年 5 月 8 日 14:51 回答                                    
用户头像                                        
                                   
添加评论                    
       
27                        
                   

获取所有用户的列表(只是他们的简称):                        

dscl . -list /Users
                       

获取特定用户的详细用户信息:                        

dscl . -read /Users/<username>
                       

获取用户信息中的特定值:                        

dscl . -read /Users/<username> <key>
                       

的例子<key>RecordNameRealNameUniqueIDNFSHomeDirectory                        

获取所有用户的详细用户信息                        

dscl . -readall /Users
                       

获取所有用户信息中的特定值:                        

dscl . -readall /Users <key>
                       

-list希望您注意到和之间的区别-read其他好处:-plist输出为 XML,-search让您指定键和值,您将获得指示该值在哪里的输出。                        

2rs2ts:~/ $ dscl . -search /Users RealName "Andrew Garrett"          [12:04:07]
2rs2ts      RealName = (
    "Andrew Garrett"
)

2rs2ts:~/ $ dscl -plist . -read /Users/nobody                        [12:05:29]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>dsAttrTypeStandard:AppleMetaNodeLocation</key>
    <array>
        <string>/Local/Default</string>
    </array>
    <key>dsAttrTypeStandard:GeneratedUID</key>
    <array>
        <string>FFFFEEEE-DDDD-CCCC-BBBB-AAAAFFFFFFFE</string>
    </array>
    <key>dsAttrTypeStandard:NFSHomeDirectory</key>
    <array>
        <string>/var/empty</string>
    </array>
    <key>dsAttrTypeStandard:Password</key>
    <array>
        <string>*</string>
    </array>
    <key>dsAttrTypeStandard:PrimaryGroupID</key>
    <array>
        <string>-2</string>
    </array>
    <key>dsAttrTypeStandard:RealName</key>
    <array>
        <string>Unprivileged User</string>
    </array>
    <key>dsAttrTypeStandard:RecordName</key>
    <array>
        <string>nobody</string>
    </array>
    <key>dsAttrTypeStandard:RecordType</key>
    <array>
        <string>dsRecTypeStandard:Users</string>
    </array>
    <key>dsAttrTypeStandard:SMBRID</key>
    <array>
        <string>501</string>
    </array>
    <key>dsAttrTypeStandard:UniqueID</key>
    <array>
        <string>-2</string>
    </array>
    <key>dsAttrTypeStandard:UserShell</key>
    <array>
        <string>/usr/bin/false</string>
    </array>
</dict>
</plist>
                       

当然,您可以阅读手册页以获取更多信息。                        

                                       
改进这个答案                                        
2013 年 7 月 17 日 19:06 回答                                    
用户头像                                        
                                   
添加评论                    
       
1                        
                   

'users' 命令只列出当前登录的用户。                        

DESCRIPTION users 列出当前在系统上的用户的登录名,按排序顺序,空格分隔,在一行上。                        

                                       
改进这个答案                                        
于 2013 年 11 月 8 日 20:27 回答                                    
用户头像                                        
                                   
添加评论                    
       

你的答案            

来自  https://superuser.com/questions/592921/mac-osx-users-vs-dscl-command-to-list-user            


           


           


           


           

Mac 管理员应该知道的另外 5 个命令


Jesus Vigo 介绍了 Mac 管理员在远程管理用户和系统时应该知道的另外五个命令。

image.png

终端。这一切都始于计算,也是许多管理员感到宾至如归的地方。没有 GUI 或笨重的鼠标——现代命令行是大部分繁重工作发生的地方。

只需几次击键,系统管理员就可以用指尖控制节点和管理最终用户。安装软件、创建/修改帐户和配置设置——或全部三者!

让这篇文章作为“ Mac 管理员应该知道的 5 个命令”的附录,包括另外一组五个命令,以添加到您的 IT 常用命令库中。

1.修复卷上的磁盘权限

名字
有争议

参数
修复权限

示例
diskutil repairPermissions /

说明
运行扫描以修复计算机上卷的权限。众所周知,磁盘权限有时会导致 OS X 出现一些奇怪的行为。定期运行这些权限检查以修复随时间累积的错误是确保操作系统在磁盘上正常运行的好方法。

2.手动配置网络设置

名称
networksetup

参数
-setmanual “<networkservice>” ip 子网路由器

示例
networksetup -setmanual “Wi-Fi” 192.168.1.101 255.255.255.0 192.168.1.1

说明
手动配置网络服务,例如以太网,使用静态分配的地址,以允许连接到网络/互联网和安全性。

3.创建一个新的用户帐户

名称
dscl

参数
创建

示例
dscl 。创建 /Users/<username>
dscl 。创建 /Users/<username> UserShell /bin/bash
dscl 。创建 /Users/<username> RealName “<username>”
dscl 。创建 /Users/<username> UniqueID <uniqueID>
dscl 。创建 /Users/<username> PrimaryGroupID <groupID>
dscl 。创建 /Users/<用户名> NFSHomeDirectory /Local/Users/<用户名>

描述
dscl 命令是目录服务命令行实用程序,它还可以创建和修改新用户帐户。虽然可以说使用 GUI 创建新用户要简单得多,但您永远不知道在什么情况下可能会导致您需要通过终端创建帐户。

这些命令在连续运行时将创建新帐户。接下来,修改用户账户的shell和实名,然后分配uniqueID和groupID来确定成员资格。最后,建立用户帐户主目录的路径。

4.重置用户帐户密码

名称
dscl

参数
密码

示例
dscl 。passwd /Users/<用户名> <密码>

说明
在本地或远程重置最终用户的密码。但是,在执行此命令时,将需要原始密码才能处理该命令并覆盖以前的密码。

5.将用户帐户添加到组成员身份

名称
dseditgroup

参数
-o -a -t

示例
dseditgroup -o 编辑。-a <用户名> -t 用户管理员

描述
编辑组成员资格以将用户帐户添加到指定的组。将用户添加到“admin”组时,需要重新启动才能将当前设置替换为新的管理员级别权限。

上面列出的命令绝不是详尽无遗的,但这不是本文的目的。相反,我希望通过包含这些有用的命令,你会受到启发去寻找额外的资源——例如Apple 的信息手册页索引——来采用最符合你的管理风格和组织 IT 需求的额外有用的命令。

另见



来自  https://www.techrepublic.com/article/pro-tip-5-more-commands-mac-admins-should-know/


普通分类: