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

标签 linux bash time authentication

我想知道如何记录用户的登录和注销:这将是一种衡量某人在一个月内连接了多少时间的方法。

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

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

塞德里克

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

最佳答案

这是一个 Perl 脚本,它总结了 last 打印的内容。它基于书中的示例 Running Linux ,为提高可读性而进行了清理,并进行了更正以在现代机器上工作(last 的 输出的格式似乎自最初编写以来已经发生了变化)。将代码保存到一个文件中,然后您可以通过将 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"; 
}

关于用于计算机限制的 linux 用户登录/注销日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2775199/

相关文章:

string - 排序列表并将排序后的值添加到 bash 中的新列表

java - 将结果打印为 : ax+b = 0 线性方程的程序

linux - 运行自定义初始化 : Failed to spawn homepage main process: unable to execute: No such file or directory

linux - 带有特殊字符的 sed

regex - 如何使用sed分割字符串?

sql - SUM 分钟 SQL 服务器

php - 如何提取从特定日期算起经过的秒数?

linux - root 或非 root 用户的 HDFS start-all.sh

linux - RTNETLINK 在 mininet 上回答 : Invalid argument, MPLS

linux - 如何处理 gnuplot 中的大值