
申し訳ありません。 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)
出力が提供する最後のフィールドは次のとおりです。
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)