给定用户,如何返回主页?

给定用户,如何返回主页?

我的脚本中有一个USER变量,我想HOME根据该USER变量查看他的路径。我怎样才能做到这一点?

答案1

有一个实用程序可以查找用户信息,无论该信息是否存储在本地文件(例如/etc/passwdLDAP 或其他方法)中。它被称为getent.

为了从中获取用户信息,您可以运行getent passwd $USER.您将得到一条返回信息,如下所示:

[jenny@sameen ~]$ getent passwd jenny
jenny:*:1001:1001:Jenny Dybedahl:/home/jenny:/usr/local/bin/bash

现在您可以简单地从中删除主目录,例如使用 cut,如下所示:

[jenny@sameen ~]$ getent passwd jenny | cut -d: -f6
/home/jenny

答案2

您可以用来eval获取某人的主目录。

eval echo "~$USER"

至少对于本地用户来说这肯定有效。我不知道像 LDAP 这样的远程用户是否使用eval.

答案3

通常的地方是/home/$USER,但这不一定是通用的。搜索此类信息的最终位置是在文件内/etc/passwd

该文件是世界可读的(任何人都可以读取它),因此任何用户都可以访问其内容。
如果文件中存在 $USER,则倒数前一项是用户主目录。

这将选择条目并打印主目录:

awk -v FS=':' -v user="$USER" '($1==user) {print $6}' "/etc/passwd"

对于更复杂的(远程)系统,getent 是从 NSS(名称服务交换库)系统获取用户信息的常用命令。

一个命令

getent passwd "$USER" | cut -d : -f 6

将提供同等信息(如果有)。

答案4

如果您以 root 身份登录,如果您知道USER的密码,或者没有USER密码,则以下是另一个选项:

    su -c 'echo ~' ${USER}

在标准su行为下,如果USER未定义或为空,su则将尝试以 root 身份运行该命令。

如果 的值USER不是有效的用户名,则会引发相应的错误:su: user <user> does not exist

这里已经有很多好的答案,但这可能仍然对某人有帮助。

相关内容