shell脚本记录登录到本机的用户,登录时间和登录位置

来源:互联网 发布:centos 内核版本 编辑:程序博客网 时间:2024/04/30 09:35

有这样一个需求,记录所有登录用户的信息,包括用户名、登录时间和登录位置到/var/log/login

日志的格式为 username   login_location  login_time


需求分析:用户的话无非就是root或者是普通用户;

我可以用whoami或者echo $USER命令来查看当前的登录用户

[root@kissing ~]# echo $USER
root
[root@kissing ~]# whoami
root

而登录时间的话,使用命令date就可以搞定

[root@kissing ~]# date +%y-%m-%d\ %H:%M:%S
13-09-21 00:20:40

而登录位置的话,分两种,一种是本地登录,另一种是远程登录;如何判定用户是从哪里登录呢?

[root@kissing ~]# w
 00:39:25 up 30 min,  3 users,  load average: 0.16, 0.22, 0.18
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.0.102    00:11   27:06   0.20s  0.20s -bash
root     pts/1    192.168.0.102    00:12   10:35   0.19s  0.19s -bash
root     pts/2    192.168.0.102    00:28    0.00s  0.11s  0.02s w

从这里可以知道,使用w命令可以知道用户登录的位置还有终端,但是究竟哪个才是当前用户的对应的终端信息?

有四个管理员登录,而且用户都是root,所以我们无法用user匹配出为宜信息,而不同的只能是tty可以匹配出唯一数据,

终端

     ------本地终端(tty1-tty6,图形终端的话都是以:开头的),将本地终端都归为本地登录

    -------远程终端(ssh),远程登录的为ip_address


登录到linux上后,使用命令ps查看当前的进程

[root@kissing ~]# ps
  PID TTY          TIME CMD
 2450 pts/2    00:00:00 bash
 2485 pts/2    00:00:00 ps

可以知道我当前运行的进程是bash

[root@kissing ~]# ps | grep bash
 2450 pts/2    00:00:00 bash

[root@kissing ~]# ps | grep bash | grep -v grep | awk '{print $2}'
pts/2



将这个脚本放在全局变量/etc/bashrc中,就可以实现,用户已登录,马上就会被记录的目的



原创粉丝点击