Llinux last 命令显示最近登录的用户列表(C/C++实现)

有时您将不得不监控或访问与登录相关的信息。在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)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值