2012-10-31 58 views
0

我需要知道在任何給定時間有多少唯一用戶連接到了redhat服務器。下面的命令做到這一點很容易:使用perl腳本的獨特連接linux用戶

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

不過,我需要在Perl腳本中此功能,使網絡監測工具,可以在預定的時間運行,並隨時跟蹤獨特的連接數。

雖然我想用perl學習腳本,但我不知道需要多長時間學習如何編寫腳本,而且我現在沒有足夠的時間致力於學習perl。任何幫助創建一個perl腳本與上述功能將不勝感激。

+0

我正在使用的監控軟件需要使用perl作爲解釋器 - 我試過使用bash,它不會工作... – sduff

回答

1

要輕鬆地包裝成一個Perl腳本這一點,做到這一點:

#!/usr/bin/perl 

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

一定要逃出$ 1,否則將被Perl進行插值。

之後你用$結果做什麼取決於你想要做什麼。您可以隨時間對其進行平均,將每個結果存儲在文件或數據庫中......這取決於您希望如何處理結果。如果你想提供更多的細節,我可以提供一些建議。

+2

您正在考慮'qx()',而不是'system()'。此外,你需要逃避'$ 1'。 – pilcrow

+0

我不得不添加一些小東西,但是這個做法非常棒,非常感謝! :-) – sduff

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"; 

作爲最後一行,你就完成了。哦,使文件可執行,如果你想運行它獨立:-)

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。它有平裝本和電子書格式,並且它是我讀過的用於學習任何東西的最好的教科書。抓住那一個,儘管時間不夠,但不需要很長的時間就可以讓基礎知識得到滿足。

+0

謝謝你的提高,我一定會看看! :-) – sduff