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 に答える