3

主人公

  • 管理者
  • パイプ
  • クロンデーモン
  • 一連のテキスト処理ユーティリティ
  • ネットスタット
  • >>スクライブ

設定

Cron Daemon は、無実のユーザーnetstatにネットワーク ステータスを強制的に表示させるという同じ作業を繰り返し実行しています ( netstat -n)。その後、パイプは情報を取得し、それを補助的なテキスト処理ユーティリティ ( | grep tcp | awk '{ print $5 }' | cut -d "." -f-4) に配信する必要があります。>>重要な結果をファイルに記録する必要があります。彼の殿下である管理者は怠惰でイライラしやすい支配者である>>ため、新しい情報をファイルに書き留めたいだけです。

*/1 * * * * netstat -n | grep tcp | awk '{ print $5 }' | cut -d "." -f-4 >> /tmp/file

の独り言>>

To append, or not append, that is the question: 
Whether 'tis new information to bother The Admin with 
and earn an outrageous Fortune,
Or to take Arms against `netstat` and the others, 
And by opposing, ignore them? To die: to sleep;

出版社によるメモ: 私と同じように、ハムレットを理解するのに問題を抱えていたすべての人にとって、問題は、文字列が既にファイルに含まれているかどうかを確認し、含まれていない場合はファイルに追加する方法です。

4

2 に答える 2

1
What a piece of work is piping, how easy to reason about, 
how infinite in use cases, in bash and script, 
how elegant and admirable in action,
how like a vim in flexibility, 
how like a gnu!

以下は、少し異なるテイクです。

netstat -n | awk -F"[\t .]+" '/tcp/ {print $9"."$10"."$11"."$12}' | sort -nu | while read ip; do if ! grep -q $ip /tmp/file; then echo $ip >> /tmp/file; fi; done;

説明:

awk -F"[\t .]+" '/tcp/ {print $9"."$10"."$11"."$12}'

awk は、入力文字列をタブと "." で分割します。入力文字列は、「tcp」を含む行によって (個別の grep 呼び出しを使用する代わりに) フィルター処理されます。最後に、結果の出力フィールドがドットで連結され、出力されます。

sort -nu

IP を数値順に並べ替え、一意のエントリのセットを作成します。uniqこれにより、別のコマンドが不要になります。

if ! grep -q $ip /tmp/file; then echo $ip >> /tmp/file; fi;

ファイル内の IP を grep します。見つからない場合は、IP が追加されます。

注:このソリューションは、古いエントリを削除せず、実行ごとにファイルをクリーンアップしません-質問が暗示しているように、追加するだけです.

于 2013-09-21T19:49:27.510 に答える
1

非常に大きなファイルを扱っている場合を除き、uniqコマンドを使用してファイルから重複行を削除できます。これは、ファイルもソートされることを意味します。これが利点か欠点かはわかりません。

netstat -n | grep tcp | awk '{ print $5 }' | cut -d "." -f-4 >> /tmp/file && sort /tmp/file | uniq > /tmp/file.uniq

これにより、重複することなくソートされた結果が得られます/tmp/file.uniq

于 2013-09-21T10:55:14.303 に答える