用户登录/注销日志用于计算机限制

时间:2010-05-05 16:51:17

标签: linux bash time login

我想知道如何记录用户的登录和注销:这是衡量一个人到目前为止连接多长时间的意思。

我知道可以使用命令“last”。但是此命令基于具有用户r / w权限的文件,因此可以更改这些数据。 我想在两个月内记录这些数据。

为什么我喜欢这样做?事实上,我想阻止普通用户每天使用计算机(主要是图形模式)超过一小时 - 除了周末,一周总共10小时。

塞德里克

(使用的系统:kubuntu,/编程语言:bash脚本)

2 个答案:

答案 0 :(得分:1)

这是一个Perl脚本,它总结了last打印的内容。它基于书籍Running Linux中的一个示例,为了便于阅读而进行了清理并更正了在现代机器上工作(last's输出的格式似乎自原始编写后发生了变化)。将代码保存到文件中,然后可以通过将last的输出汇总到它来运行它。

#!/usr/bin/perl 

# logintime.pl - Summarise amount of time a user is logged in.
# Usage: last | perl logintime.pl

use strict;
use warnings;

my %hours;
my %minutes;
my %logins;

# While we have input...
while ( <> ) {

  # Extract the username and login time...
  if ( my ($username, $hrs, $mins) = /^(\S+).*\((\d+):(\d+)\)/ ) {
    # Increment total hours, minutes, and logins 
    $hours{$username}   += $hrs; 
    $minutes{$username} += $mins; 
    $logins{$username}++;
  } 
} 

# For each unique user...
foreach my $user ( sort keys %hours ) { 
   # Calculate the total hours and minutes...
   $hours{$user}   += int($minutes{$user} / 60); 
   $minutes{$user} %= 60;

   # Print the information for this user...
   print "User $user, total login time "; 
   printf "%02d:%02d, ", $hours{$user}, $minutes{$user}; 
   print "total logins $logins{$user}.\n"; 
}

答案 1 :(得分:0)

并不完全符合您的要求,但this article显示了如何限制用户只能在指定时间内登录。

相关问题