如何在 UNIX 上获取用户的友好用户名?

  • 本文关键字:用户 获取 UNIX bash unix
  • 更新时间 :
  • 英文 :


我想获得"友好"名称,而不是用户名,至少在给定用户的字符串中。我尝试过的事情:

whoami
jamesarosen
id -un
jamesarosen
id -p
uid jamesarosen
groups  staff com.apple.access_screensharing ...
id -P
jamesarosen:********:501:20::0:0:James A. Rosen:/Users/jamesarosen:/bin/bash

最后一个有我要寻找的信息,但我宁愿不必将其解析,尤其是因为我对格式(特别是: s的数量)并不十分充满信心跨OS。

解析用户全名

的GECOS字段

/etc/passWD的格式和大多数GECOS字段在类似于Unix的系统中都非常标准化。如果您发现例外,请一定要告诉我们。同时,在类似Unix的系统上获得想要的最简单方法是使用 getent cut 来解析Gecos字段。例如:

getent passwd $LOGNAME | cut -d: -f5 | cut -d, -f1

我知道的唯一方法是解析它:

grep -P "^$(whoami):" /etc/passwd | cut -f5 -d:

您可以确定/etc/passwd的格式

您可以使用finger获取该信息:

finger `id -un` | head -1 | cut -d: -f3-

具有优势(或不利的不同,取决于您的要求),它将为非本地用户检索信息。

如果您只想从/etc/passwd获取信息,那么像其他人已经提到的那样,您很可能必须以一种或另一种方式分析文件。我个人更喜欢awk完成此任务:

awk -F: -vid=`id -u` '{if ($3 == id) print $5}' /etc/passwd

看一下/etc/passwd文件。此文件向您显示如何存储用户信息。您的用户信息可能会在此处存储,也可能不会存储(UNIX用于存储用户使用了几种不同的数据库),但是格式是相同的。

基本上,UNIX使用用户ID(UID)存储什么用户。下一个条目是旧的密码条目,然后是UID,主要组ID,GECOS字段,$HOME目录和用户的外壳。(MacOS中的id -P命令中显示了三个额外的条目。我不知道它们是什么,但是它们使Gecos字段成为第八个字段,而不是第五个字段)。

使用系统上的id -P命令为您提供了此条目。一些系统使用getent甚至getpwent作为命令。您需要做的是解析此条目。每个场都被结肠隔开,因此您需要第五或第八个条目(取决于您必须使用的命令)。

awkcut命令做得很好。cut可能更有效,但是awk更常见,所以我倾向于使用它。

awk中,标准场分隔符是 White Space ,但是您可以使用-F参数来更改此操作。在尴尬中,一行中的每个字段都有一个数字,并在一个美元符号之前。$0字段是整个线。

使用awk,您得到:

id -P | awk -F: '{print $8}'

这说要采用id -P命令,并将:用作字段分离器,然后打印出第八个字段。卷曲括号围绕着所有 awk程序,需要单个引号来防止外壳解释$8

在Bash中,您可以使用$( )运行命令并返回其输出,因此您可以设置环境变量:

$USER_NAME=$(id -P | awk -F: `{print $8}`)
echo $USER_NAME

至少在macOS上(以及其他 *bsd-alikes),您可以使用:id -F仅获取全名。

相关内容

  • 没有找到相关文章

最新更新