在任何给定时间,我都需要知道有多少唯一用户连接到 redhat 服务器。以下命令可以轻松完成此操作:
who | awk '{ print $1 }' | sort -ud | wc -l
但是,我需要在 perl 脚本中使用此功能,以便网络监控实用程序可以在预定时间运行它,并跟踪一段时间内唯一连接的数量。
虽然我想用 perl 学习脚本,但我不知道自己学习脚本需要多长时间,而且我目前没有足够的时间专门学习 perl。对于创建具有上述功能的 perl 脚本的任何帮助,我们将不胜感激。
在任何给定时间,我都需要知道有多少唯一用户连接到 redhat 服务器。以下命令可以轻松完成此操作:
who | awk '{ print $1 }' | sort -ud | wc -l
但是,我需要在 perl 脚本中使用此功能,以便网络监控实用程序可以在预定时间运行它,并跟踪一段时间内唯一连接的数量。
虽然我想用 perl 学习脚本,但我不知道自己学习脚本需要多长时间,而且我目前没有足够的时间专门学习 perl。对于创建具有上述功能的 perl 脚本的任何帮助,我们将不胜感激。
要轻松地将其包装到 perl 脚本中,请执行以下操作:
#!/usr/bin/perl
$result = `who | awk '{ print \$1 }' | sort -ud | wc -l`;
print $result;
一定要转义 $1,否则它将被 Perl 插值。
之后你用 $result 做什么取决于你到底想要做什么。您可以随着时间的推移对其进行平均,将每个结果存储在文件或数据库中......这实际上取决于您想要对结果执行的操作。如果您愿意提供更多详细信息,我可以提供一些建议。
假设您想要一个返回用户数量的 Perl 子例程,您可以这样做:
sub uniqueUsers {
my %users;
foreach my $line (split("\n", `who`)) {
$users{(split(" ", $line))[0]}++;
};
return scalar(keys(%users));
}
如果你想要一个完整的独立 Perl 脚本,它只打印出唯一用户的总数并退出,添加
#!/usr/bin/perl
作为开头的一行,并且
print uniqueUsers() . "\n";
作为最后一行,你就完成了。哦,如果您想独立运行文件,请使其可执行:-)
要获得计数:
my $usercount = `who | awk '{print $1}' | sort | uniq | wc -l`;
要将实际用户名放入数组中:
my @users = `who | awk '{print \$1}' | sort | uniq`;
值得一提的是,学习 perl 基础知识相当快(对我来说,很有趣)。我建议从 O'Reilly Media 获取一份 Learning Perl 的副本。它有平装本和电子书两种形式,它是我读过的最好的学习任何东西的教科书。抓住那个,尽管时间很短,但你很快就能掌握基础知识。