Mac OSX:users vs dscl 命令列出用户

pet*_*who 9 macos

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

users
Run Code Online (Sandbox Code Playgroud)

dscl . -read /Users/
Run Code Online (Sandbox Code Playgroud)

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

当我在 google 上搜索“在 Mac 上列出用户”时,大多数人会告诉我使用第二个。但是,当我执行“man users”时,它显示此命令是“列出当前用户”。

你能告诉我有什么不同吗?

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

mkdir mysqldir --user mysql
Run Code Online (Sandbox Code Playgroud)

2rs*_*2ts 25

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

dscl . -list /Users
Run Code Online (Sandbox Code Playgroud)

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

dscl . -read /Users/<username>
Run Code Online (Sandbox Code Playgroud)

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

dscl . -read /Users/<username> <key>
Run Code Online (Sandbox Code Playgroud)

的例子<key>RecordNameRealNameUniqueID,和NFSHomeDirectory

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

dscl . -readall /Users
Run Code Online (Sandbox Code Playgroud)

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

dscl . -readall /Users <key>
Run Code Online (Sandbox Code Playgroud)

希望你注意到的区别-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>
Run Code Online (Sandbox Code Playgroud)

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


Gor*_*son 10

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

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