$LOGNAME 和 logname 之间的区别

$LOGNAME 和 logname 之间的区别

echo $LOGNAMElogname命令正常运行时,我从它们获得相同的结果:

pandya@pandya-desktop:~$ echo $LOGNAME
pandya
pandya@pandya-desktop:~$ logname
pandya

它们之间有什么区别吗?

答案1

环境变量

$LOGNAME$USER和给出的相同

当前登录用户的名称。此变量由系统设置。您可能不应该手动更改其值。

man logname

logname-打印用户的登录名


解释不同用途通过以下示例:

pandya@pandya-desktop:~$ sudo su
root@pandya-desktop:/home/pandya# echo $LOGNAME
root
root@pandya-desktop:/home/pandya# logname
pandya
root@pandya-desktop:/home/pandya# exit
exit
pandya@pandya-desktop:~$

您可以在终端中以 root 身份登录后看到以下区别,

  • $LOGNAME给出当前终端中登录的用户(即root
  • logname打印用户的登录名登录到会话(即pandya

答案2

实用程序日志名在 16.04 中被破坏,显然是故意的,因为有可能破解其返回的值,这可能是一个安全漏洞。 https://bugzilla.gnome.org/show_bug.cgi?id=747046 我在一些脚本中使用过 logname,发现它很有用,因为无论我是从我自己的级别还是从 sudo 调用它,它总是返回相同的值(我的登录名),而环境变量 $USER 和 $LOGNAME 则不是。我并不担心有人入侵我的电脑并修改它返回的值。唉……我找到了一个解决方法。我在我的主目录中创建了一个文件

echo $USER > ~/.logname

当我想访问我的日志名(例如,分配给 Bash 变量 g_logname)时,我会这样做:

declare g_logname="$(<~/.logname)";

对我来说,这很有效,无论是以我自己的身份还是通过 sudo 在 root 级别执行,这都会保留“~”作为我的主目录的分配。我可以为系统上每个用户的主目录创建一个 .logname 文件。是的,有人可能会入侵我的计算机并更改这些文件,但我并不担心这一点。我只希望我的脚本能够正常工作。

相关内容