【发布时间】:2010-11-09 10:49:25
【问题描述】:
如何在 OS X 中通过命令行获取活动用户的名称?
【问题讨论】:
标签: macos command-line
如何在 OS X 中通过命令行获取活动用户的名称?
【问题讨论】:
标签: macos command-line
由于 'whoami' 已经过时,它的使用可能更向前兼容:
id -un
【讨论】:
whoami 的手册页确认它已被id 取代。
whoami 和 id 仍然可以在我的 macOS Big Sur 11.3.1 系统上运行。我没有故意安装或配置任何会添加它的东西,所以它可能还在?
如果您想显示全名(而不是用户名),请添加 -F 标志:
$ id -F
Andrew Havens
【讨论】:
【讨论】:
我很确定 OS X 中的终端就像 unix,所以命令是:
whoami
我现在没有mac,如果我错了,请有人纠正我。
注意 - whoami 实用程序已过时,等效于 id -un。它会给你当前用户
【讨论】:
【讨论】:
sudo id -un 来获取登录用户的名称(因为id 更多的是“运行id 命令的用户的ID 是什么)。这使得id 非常适合“什么用户正在运行我的脚本”,但不适用于管理职责。
如果你想知道谁当前登录了系统:
$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 被设计成一个多用户系统。
【讨论】:
您还可以在 Linux 或 MacOS 下使用 BSD 通用命令手册中的 logname 命令查看当前登录用户的用户名,即使用户正在执行 sudo 操作。这很有用,例如,在使用 sudo 安装系统范围的软件包时修改用户的 crontab:crontab -u $(logname)
每man logname:
LOGNAME(1)
NAME
logname -- display user's login name
【讨论】:
有两种方法-
whoami
或
echo $USER
【讨论】:
这个问题还没有完全回答,恕我直言。我将尝试解释:我有一个 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
【讨论】:
您也可以从环境变量中检索它,但这可能不安全,所以我会选择 Andrew 的答案。
printenv USER
如果您需要从应用程序中检索它,例如 Node,从环境变量中获取它会更容易,例如
process.env.USER.
【讨论】:
定义“活跃用户”。
如果问题是“谁是登录用户”,那么“我是谁”或“whoami”就可以(尽管他们给出不同的答案——“whoami”只报告一个用户名;“我是谁”报告在终端和登录时间也是如此)。
如果问题是“哪个用户 ID 是 shell 的有效 ID”,那么使用“id”通常会更好。这会报告真实有效的用户 ID 和组 ID,以及补充组 ID。如果 shell 运行的是 SUID 或 SGID,这可能很重要。
【讨论】: