-2

For linux why when providing stdin (input redirection) to logname it is not able to determine the user?

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

Moverover this does not seem to affect whoami.

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

Edit: Adding OS versions (tested it on multiple different Linux machines).

@> 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
4

1 回答 1

0

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

于 2013-11-13T17:55:49.527 回答