系统管理工具包: 监视用户的使用情况
2009-11-04 00:00:00 来源:WEB开发网#define UT_NAMESIZE 8
#define UT_LINESIZE 8
#define UT_HOSTSIZE 16
请注意,您必须正确地获取数据的大小,因为它将影响到您所读取的信息。如果您使用的是 Solaris 或者 BSD 系统,那么它使用了一种更加简单的结构(如清单 8 所示),因此,您需要使用一个不同的 packstring 和提取的字段,如清单 19 中所示。
清单 19. Solaris 或者 BSD 系统的数据转储
my $packstring = "a8a8a16l";
my $reclength = length(pack($packstring));
my @ut_types = qw(EMPTY RUN_LVL BOOT_TIME OLD_TIME
NEW_TIME INIT_PROCESS LOGIN_PROCESS
USER_PROCESS DEAD_PROCESS ACCOUNTING);
open(D,"</var/log/wtmp") or die "Couldn't open wtmp, $!";
while(sysread(D,my $rec,$reclength))
{
my ($line,$name,$host,$time)
= unpack($packstring,$rec);
print("$line, $name, $host,", scalar localtime($time),"\n");
}
close(D) or die "Couldn't close wtmp, $!";
运行这个脚本,您将获得 wtmp 的登录信息。获取行信息所在的行是注销而不是登录,如清单 20 中的代码片段所示。
清单 20. 获取 wtmp 的登录信息
ftp599, statmon, nautilus.mcslp.p,Wed Sep 12 16:00:13 2007
ftp599, , ,Wed Sep 12 16:00:14 2007
ftp4003, statmon, sulaco.mcslp.pri,Wed Sep 12 16:04:35 2007
ftp4003, , ,Wed Sep 12 16:04:35 2007
ftp4035, statmon, narcissus.mcslp.,Wed Sep 12 16:05:00 2007
ftp4035, , ,Wed Sep 12 16:05:00 2007
ftp4037, statmon, nostromo.mcslp.p,Wed Sep 12 16:05:01 2007
ftp4037, , ,Wed Sep 12 16:05:02 2007
ftp4057, statmon, nautilus.mcslp.p,Wed Sep 12 16:05:14 2007
ftp4057, , ,Wed Sep 12 16:05:14 2007
总结
在本文中,您简单地了解了在登录时所发生的操作、如何将登录记录到 UNIX 系统,以及如何使用这些信息以确定当前登录的用户和过去曾经登录过的用户。例如,您可以使用 Perl 脚本的修改版本,以提供总的用户时间信息,并以此向相应的用户或者部门收费。
更多精彩
赞助商链接