【问题标题】:How do I get the name of the active user via the command line in OS X?如何通过 OS X 中的命令行获取活动用户的名称?
【发布时间】:2010-11-09 10:49:25
【问题描述】:

如何在 OS X 中通过命令行获取活动用户的名称?

【问题讨论】:

    标签: macos command-line


    【解决方案1】:

    由于 'whoami' 已经过时,它的使用可能更向前兼容:

    id -un
    

    【讨论】:

    • “whoami”在什么意义上已经过时了?谁宣布它过时了?
    • @Jonathan:Leopard 上whoami 的手册页确认它已被id 取代。
    • 啊!他们为什么要改变自古以来就存在的东西?
    • 谁说?
    • 12 年后,whoamiid 仍然可以在我的 macOS Big Sur 11.3.1 系统上运行。我没有故意安装或配置任何会添加它的东西,所以它可能还在?
    【解决方案2】:

    如果您想显示全名(而不是用户名),请添加 -F 标志:

    $ id -F
    Andrew Havens
    

    【讨论】:

    • -F 是 Mavericks 中的非法选项 - 这是什么时候开始起作用的?
    • '-' 0r z gia b0rah
    【解决方案3】:

    whoami

    编辑

    whoami 实用程序已被 id(1) 实用程序淘汰,等效于 id -un。建议使用命令id -p 进行正常交互。

    【讨论】:

      【解决方案4】:

      我很确定 OS X 中的终端就像 unix,所以命令是:

      whoami
      

      我现在没有mac,如果我错了,请有人纠正我。

      注意 - whoami 实用程序已过时,等效于 id -un。它会给你当前用户

      【讨论】:

        【解决方案5】:

        通过here

        检查 /dev/console 的所有者似乎效果很好。

        stat -f "%Su" /dev/console

        【讨论】:

        • 如果您通过 ssh 连接到一台机器并想查看用户是否在本地登录,这非常有用。如果不是,该命令将返回“root”。
        • 这是一个被低估的答案。您不能使用sudo id -un 来获取登录用户的名称(因为id 更多的是“运行id 命令的用户的ID 是什么)。这使得id 非常适合“什么用户正在运行我的脚本”,但不适用于管理职责。
        【解决方案6】:

        如果你想知道谁当前登录了系统:

        $w 15:56:14 5 天,20:58,6 个用户,平均负载:0.43、0.53、0.50 用户 TTY 登录@空闲 JCPU PCPU 什么 我点/2 Fri19 1:03m 0.98s 0.98s -/bin/bash 我点/3 09:55 6:00m 0.43s 0.43s /bin/bash 我点/5 15:56 0.00s 0.23s 0.00s w

        (来自 Linux 系统;OS X 上的格式可能略有不同,但信息应该大致相同。)

        可能有多个登录会话;毕竟,UNIX 被设计成一个多用户系统。

        【讨论】:

          【解决方案7】:

          您还可以在 Linux 或 MacOS 下使用 BSD 通用命令手册中的 logname 命令查看当前登录用户的用户名,即使用户正在执行 sudo 操作。这很有用,例如,在使用 sudo 安装系统范围的软件包时修改用户的 crontab:crontab -u $(logname)

          man logname:

          LOGNAME(1)
          
          NAME
              logname -- display user's login name
          

          【讨论】:

          • 这绝对是最干净和最简单的解决方案。无论哪个用户执行命令,它都有效。
          【解决方案8】:

          有两种方法-

          whoami
          

          echo $USER
          

          【讨论】:

            【解决方案9】:

            这个问题还没有完全回答,恕我直言。我将尝试解释:我有一个 crontab 条目,它安排了一个 bash shell 命令过程,它反过来对我的文件进行了一些清理;完成后,使用 OS X 通知中心(使用命令 osascript -e 'display notification ...)向我发送通知。如果有人(例如我的妻子或女儿)将计算机的当前用户切换为她,让我在后台,发送通知时 cron 脚本失败

            那么,谁是当前用户意味着是否有其他人成为了有效用户,而将我留在了后台stat -f "%Su" /dev/console 是否返回当前活动用户名称?

            答案是肯定的;所以,现在我的 crontab shell 脚本已经通过以下方式进行了修改:

            ...
            if [ "$(/usr/bin/stat -f ""%Su"" /dev/console)" = "loreti" ]
            then /usr/bin/osascript -e \
              'display notification "Cleanup done" sound name "sosumi" with title "myCleanup"'
            fi
            

            【讨论】:

              【解决方案10】:

              MAC终端中获取用户名很容易...

              我一般在终端中使用whoami...

              例如,在这种情况下,我需要它来安装 Tomcat 服务器...

              【讨论】:

                【解决方案11】:

                您也可以从环境变量中检索它,但这可能不安全,所以我会选择 Andrew 的答案。

                printenv USER

                如果您需要从应用程序中检索它,例如 Node,从环境变量中获取它会更容易,例如

                process.env.USER.

                【讨论】:

                  【解决方案12】:

                  定义“活跃用户”。

                  如果问题是“谁是登录用户”,那么“我是谁”或“whoami”就可以(尽管他们给出不同的答案——“whoami”只报告一个用户名;“我是谁”报告在终端和登录时间也是如此)。

                  如果问题是“哪个用户 ID 是 shell 的有效 ID”,那么使用“id”通常会更好。这会报告真实有效的用户 ID 和组 ID,以及补充组 ID。如果 shell 运行的是 SUID 或 SGID,这可能很重要。

                  【讨论】:

                    猜你喜欢
                    • 2021-08-27
                    • 2012-01-16
                    • 2012-07-17
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2020-05-28
                    • 2012-08-16
                    • 2019-06-03
                    相关资源
                    最近更新 更多