0

在任何给定时间,我都需要知道有多少唯一用户连接到 redhat 服务器。以下命令可以轻松完成此操作:

who | awk '{ print $1 }' | sort -ud | wc -l

但是,我需要在 perl 脚本中使用此功能,以便网络监控实用程序可以在预定时间运行它,并跟踪一段时间内唯一连接的数量。

虽然我想用 perl 学习脚本,但我不知道自己学习脚本需要多长时间,而且我目前没有足够的时间专门学习 perl。对于创建具有上述功能的 perl 脚本的任何帮助,我们将不胜感激。

4

3 回答 3

1

要轻松地将其包装到 perl 脚本中,请执行以下操作:

#!/usr/bin/perl

$result = `who | awk '{ print \$1 }' | sort -ud | wc -l`;
print $result;

一定要转义 $1,否则它将被 Perl 插值。

之后你用 $result 做什么取决于你到底想要做什么。您可以随着时间的推移对其进行平均,将每个结果存储在文件或数据库中......这实际上取决于您想要对结果执行的操作。如果您愿意提供更多详细信息,我可以提供一些建议。

于 2012-10-31T13:35:18.327 回答
0

假设您想要一个返回用户数量的 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";

作为最后一行,你就完成了。哦,如果您想独立运行文件,请使其可执行:-)

于 2012-10-31T13:47:40.870 回答
0

要获得计数:

my $usercount = `who | awk '{print $1}' | sort | uniq | wc -l`;

要将实际用户名放入数组中:

my @users = `who | awk '{print \$1}' | sort | uniq`;

值得一提的是,学习 perl 基础知识相当快(对我来说,很有趣)。我建议从 O'Reilly Media 获取一份 Learning Perl 的副本。它有平装本和电子书两种形式,它是我读过的最好的学习任何东西的教科书。抓住那个,尽管时间很短,但你很快就能掌握基础知识。

于 2012-10-31T14:04:18.187 回答