logname未设置输入重定向(stdin)

时间:2013-11-13 15:16:25

标签: linux bash shell unix command-line

对于linux,为什么在将stdin(输入重定向)提供给 logname 时,它无法确定用户?

@> echo `logname`
<username>
@> echo `logname` < /dev/null
logname: no login name
@> echo `logname` < /dev/tty
logname: no login name

Moverover这似乎不会影响 whoami

@> echo `whoami`
<username>
@> echo `whoami` < /dev/null
<username>

编辑:添加操作系统版本(在多台不同的Linux计算机上测试)。

@> uname -a
Linux <machine1> 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
@> uname -a
Linux <machine2> 2.6.18-238.el5 #1 SMP Sun Dec 19 14:22:44 EST 2010 x86_64 x86_64 x86_64 GNU/Linux
@> uname -a
Linux <machine3> 3.0.13-0.27-default #1 SMP Wed Feb 15 13:33:49 UTC 2012 (d73692b) x86_64 x86_64 x86_64 GNU/Linux

1 个答案:

答案 0 :(得分:0)

在Unix / Linux系统上,您可以让多个用户通过不同的窗口,ssh会话等登录。每个当前登录的用户可能有也可能没有与会话关联的tty。如果为用户分配了tty会话,则tty与登录到其上的用户之间的关联将存储在系统utmp文件中(路径可能会有所不同)。 logname想要先查看您所在的tty,然后在utmp文件中查找相关记录,看看您是谁。执行logname < /dev/null时,lognametty取消关联,因此无法找到需要查找的记录,这就是报告“无登录名”的原因。