抱歉,我对 Linux bash 命令的了解非常基础,我已经搜索了一段时间,但我不能 100% 确定我需要搜索什么。
我想知道是否有办法在 Linux bash 脚本中获取当前登录用户的远程主机名?我有一个脚本,每次用户运行它时我都需要登录。我像这样获取日期:
cdat=`/bin/date +%a' '%d' '%h' '%Y', '%H':'%M`;
我现在需要添加用户远程主机(而不是他们登录时使用的用户名)。我也不是 100% 确定我在这里使用了正确的术语,只是为了澄清一下;我所说的“远程主机名”是指在我通过 ssh 登录的大多数服务器上打印在屏幕上的相同输出,例如:
Last login: Mon Jul 22 16:35:09 2013 from win7-i7-stuart.my.domain.com
我正在寻找那win7-i7-stuart.my.domain.com
一点。
答案1
who
jmcnama pts/4 Jul 18 13:30 (9010-b6m2cx1.nmgco.com)
who 输出的最后一个字段提供:
username=jmcnama
remote=$(who | awk -v user=$username '$1 == user {print $(NF)}')
可能还有其他问题,例如用户多次登录。最后一个命令也有帮助。最后有问题 - 它可以截断长源节点值。
据我所知,没有 /proc“文件”显示登录的来源。最后和谁的数据存储在 /var//log/wtmp 中(通常)。因此,这是此信息的唯一文件来源。
答案2
最好使用该命令who am i
,这样您就不会获得重复的信息,并且在仅使用普通的who
.
$ who am i
sam pts/6 2013-07-22 13:21 (192.168.1.110)
幽默地说,你也可以使用这个:
$ who mom likes
sam pts/6 2013-07-22 13:21 (192.168.1.110)
您可以使用解析它sed
,以便它只是他们连接的主机:
$ who am i | sed 's/.*(\(.*\))/\1/'
192.168.1.110
您还可以使用以下命令查看用户登录的完整历史记录last
:
$ last <username>
例如:
$ last sam | less
sam pts/6 192.168.1.110 Mon Jul 22 13:21 still logged in
sam pts/6 192.168.1.110 Mon Jul 22 11:02 - 11:02 (00:00)
sam pts/5 192.168.1.110 Thu Jul 18 14:41 - 16:41 (01:59)
sam pts/5 192.168.1.110 Wed Jul 17 15:56 - 16:28 (00:31)
sam pts/5 192.168.1.110 Wed Jul 17 15:56 - 15:56 (00:00)
sam pts/4 192.168.1.110 Wed Jul 17 14:28 - 14:29 (00:00)
sam pts/7 192.168.1.110 Tue Jul 16 16:27 - 16:50 (00:23)