WEB开发网
开发学院操作系统Linux/Unix 系统管理工具包: 监视用户的使用情况 阅读

系统管理工具包: 监视用户的使用情况

 2009-11-04 00:00:00 来源:WEB开发网   
核心提示: 在 Perl 中使用 unpack 函数需要创建适当的 packstring,它用于定义您希望从二进制记录数据(从原始二进制 utmp 文件中读取)中提取的数据类型,系统管理工具包: 监视用户的使用情况(9), 清单 17 显示了一个很简单的 Perl 脚本,该脚本用于对 wtmp 中的数据进行

在 Perl 中使用 unpack 函数需要创建适当的 packstring,它用于定义您希望从二进制记录数据(从原始二进制 utmp 文件中读取)中提取的数据类型。

清单 17 显示了一个很简单的 Perl 脚本,该脚本用于对 wtmp 中的数据进行直接转储。


清单 17. 转储 wtmp 中数据的 Perl 脚本

my $packstring = "a8a8a8ssssl"; 
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 ($user,$userid,$line,$pid,$type,$eterm,$eexit,$time) 
    = unpack($packstring,$rec); 
  print("$user, $userid, $line, $pid, $ut_types[$type], ", 
     "$eterm, $eexit, ", scalar localtime($time),"\n"); 
} 
 
close(D) or die "Couldn't close wtmp, $!"; 

请注意,您必须使用 sysread 来读取数据,因为您读取的是原始二进制包(而不是行)。您所使用的 packstring 将获取用户名、用户 ID、tty 线路、PID、utmp 类型、终端退出代码和时间。

最前面的三个字段是非常重要的,因为其中包含了行、名称和主机信息。在 utmp.h 中,对这些字段的大小进行了合适的定义(请参见清单 18)。


清单 18. utmp.h 中定义的最前面三个字段的大小

上一页  4 5 6 7 8 9 10  下一页

Tags:系统 管理 工具包

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接