有时您将不得不监控或访问与登录相关的信息。在Linux下应该怎么做呢?使用 last 命令显示上次登录用户的列表信息。last命令会读取/var/log/wtmp的文件,并显示自这个文件创建以来所有登录(退出)系统的用户列表。
Linux last 命令
last 命令显示上次登录用户的列表。 以下是它的语法:
last [options] [username…] [tty…]
以下是手册页对此last的解释:
选项:
Linux用户登录信息放在哪里?
/var/log/wtmp文件记录当前正在登录和历史登录系统的用户信息,默认由last命令查看,在Linux 和其他类 Unix 操作系统(如 MacOS)非常擅长日志记录。 在系统内部的某个地方,您可以想到的几乎所有内容都有一个日志。
我们所知道的是,wtmp 是一个日志,它捕获并记录每个登录和注销事件。 查看 wtmp 日志中的数据是对系统管理员职责采取安全措施的基本步骤。
与 Linux 中许多基于文本的日志文件不同,wtmp 是一个二进制文件。
要访问其中的数据,我们需要使用专为该任务设计的工具,该工具是last命令, 不是使用cat工具打开。
last示例
last命令从 wtmp 日志中读取数据并将其显示在终端窗口中。
列出当前和曾经登入系统的用户信息,它默认读取的是/var/log/wtmp文件的信息。输出的内容包括:用户名、终端位置、登录源信息、开始时间、结束时间、持续时间。注意最后一行输出的是wtmp文件起始记录的时间。
每次启动计算机时,都会在日志中输入虚构用户“reboot”的登录条目。 终端字段替换为内核版本。 这些条目的登录会话持续时间表示计算机的正常运行时间。
IP 地址相关列移动
在上面的截图中,我们故意模糊了一些包含 IP 地址的部分。如果你愿意,你可以通过将 IP 地址相关列移动到最右侧来稍微自定义此输出。 这可以使用 -a 命令行选项来完成。
读取不同的文件
当然也可以通过last -f参数指定读取文件,可以是/var/log/btmp、/var/run/utmp,当然,您必须将新文件名(连同其路径)作为输入传递给此选项。
打印完整的日期和时间信息
如果您希望 last 在输出中生成完整的日期和时间信息,请使用 -F 命令行选项:
显示特定数量的行
单独使用last命令会生成整个日志的转储,其中大部分会飞过终端窗口。 仍然可见的部分是日志中最早的数据。 这可能不是你想看到的。 通过在命令行上提供您想要的行数来做到这一点。
这给出了日志的前五行,这是最新的数据。
禁止显示主机名字段
last 输出中的第三列是主机名信息。 但是,出于某种原因,如果您希望该工具禁止显示此信息,请使用 -R 命令行选项。
显示远程用户的网络名称
-d(域名系统)选项告诉最后尝试将远程用户的 IP 地址解析为机器或网络名称。
last 并不总是可以将 IP 地址转换为网络名称。
显示系统关机记录和运行级别改变的日志
要显示运行级别更改和系统关闭条目等信息,请使用 -x 命令行选项。
Linux last下C/C++代码实现
int main(int argc, char *argv[])
{
int ch;
char *p;
maxrec = -1;
snaptime = 0;
while ((ch = getopt(argc, argv, "0123456789d:f:h:n:st")) != -1)
switch (ch)
{
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
if (maxrec == -1)
{
p = strchr(argv[optind - 1], ch);
if (p == NULL)
p = strchr(argv[optind], ch);
maxrec = atol(p);
if (!maxrec)
exit(0);
}
break;
case 'd':
snaptime = dateconv(optarg);
break;
case 'f':
file = optarg;
break;
case 'n':
errno = 0;
maxrec = strtol(optarg, &p, 10);
if (p == optarg || *p != '\0' || errno != 0 ||
maxrec <= 0)
printf("%s: bad line count", optarg);
break;
case 's':
sflag++; /* 将增量显示为秒 */
break;
case 't':
addarg(TTY_TYPE, ttyconv(optarg));
break;
case '?':
default:
usage();
}
}
编译运行:
总结
使用Linux last命令可以了解谁登录了您的 Linux 计算机、何时以及从何处登录是有用的信息。有关更多信息,可以查看man手册。
欢迎关注微信公众号【程序猿编码】,需要last命令完整源码的添加本人微信号(c17865354792)