如何通过 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
取代。
啊!他们为什么要改变自古以来就存在的东西?
谁说? whoami
和 id
仍然可以在我的 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 中的命令行获取活动用户的名称?的主要内容,如果未能解决你的问题,请参考以下文章