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

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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,这可能很重要。

【讨论】:

以上是关于如何通过 OS X 中的命令行获取活动用户的名称?的主要内容,如果未能解决你的问题,请参考以下文章

OS X下如何获取当前连接的***名称

如何在 Mac OS X 上获取拖放到应用程序二进制文件中的文件列表? [关闭]

如何在 OS X 10.7.3 中复制目录?

golang获取命令行参数

Linux相当于Mac OS X“打开”命令[关闭]

如何更改 Mac OS X 管理员帐户的名称