日次アーカイブ: 2007年11月08日

業務で使うネタを教材にして勉強していけば、やった結果が目に見えてわかるだろうと思った。
まずは、UNIXコマンドでいうところのgrepとsedをperlでやってみた。

※さっきウソ書いてしまいました。
$ perl -ne 'print if (m/session (opened|closed)/)' /var/log/messages
$ perl -ne 'print if (m/session [opened|closed]/)' /var/log/messages

[]でくくっちゃうと、「session odc」なんていうログも引っ掛けてしまうので、
単語単位でひっかけたいなら、文字クラス「[]」ではなく、パターングループ「()」で
引っ掛けるべきなのですね。

■ メールのログから、送信成功の行を抜き出す

$ perl -ne 'print if (m/sent/)' /var/log/maillog
Nov  8 06:00:02 intra1 postfix/local[12546]: DC72F8F839C: to=, orig_to=, relay=local, delay=1, status=sent (forwarded as 01DEA8F8392)
Nov  8 06:00:02 intra1 postfix/smtp[12548]: 01DEA8F8392: to=, orig_to=, relay=mx.example.info[192.168.0.2], delay=0, status=sent (250 Ok: queued as 1BF4C76873C)
Nov  8 07:31:33 intra1 postfix/local[16078]: 5AFB38F8057: to=, orig_to=, relay=local, delay=0, status=sent (forwarded as AE9F58F824E)
Nov  8 07:31:34 intra1 postfix/smtp[16079]: AE9F58F824E: to=, orig_to=, relay=mx.example.info[192.168.0.2], delay=1, status=sent (250 Ok: queued as EF4807681A1)
Nov  8 09:01:01 intra1 postfix/local[19426]: 9620E8F8392: to=, orig_to=, relay=local, delay=0, status=sent (forwarded as A91608F839C)
Nov  8 09:01:01 intra1 postfix/local[19424]: 8F0DA8F83BB: to=, orig_to=, relay=local, delay=0, status=sent (forwarded as B02E18F8392)
・・・

■ 正規表現を使って、sshでのログイン|ログアウトの履歴を抜き出す

$ perl -ne 'print if (m/session (opened|closed)/)' /var/log/messages
Nov  8 15:39:31 intra1 sshd(pam_unix)[1709]: session opened for user shasta by (uid=0)
Nov  8 15:40:24 intra1 su(pam_unix)[1926]: session opened for user root by shasta(uid=1000)
Nov  8 15:46:06 intra1 su(pam_unix)[1926]: session closed for user root
Nov  8 15:46:06 intra1 sshd(pam_unix)[1709]: session closed for user shasta
Nov  8 15:48:15 intra1 sshd(pam_unix)[2722]: session opened for user shasta by (uid=0)
Nov  8 15:48:28 intra1 su(pam_unix)[2947]: session opened for user root by shasta(uid=1000)
Nov  8 15:48:46 intra1 su(pam_unix)[2947]: session closed for user root
Nov  8 15:48:54 intra1 sshd(pam_unix)[2722]: session closed for user shasta
・・・

■ ログの日付を置換してみる

元のログ
Nov  8 04:02:11 intra1 syslogd 1.4.1: restart.
Nov  8 04:02:26 intra1 clamd[2689]: Database correctly reloaded (299083 signatures)

$ perl -ne 'print if (s/Nov  /11//)' /var/log/messages
11/8 04:02:11 intra1 syslogd 1.4.1: restart.
11/8 04:02:26 intra1 clamd[2689]: Database correctly reloaded (299083 signatures)
置換後は上記のようになった

■ ログの小文字を大文字にしてみる

元のログ
Nov  8 04:02:11 intra1 syslogd 1.4.1: restart.
Nov  8 04:02:26 intra1 clamd[2689]: Database correctly reloaded (299083 signatures)

$ perl -ne 'print if (tr/a-z/A-Z/)' /var/log/messages
NOV  8 04:02:11 INTRA1 SYSLOGD 1.4.1: RESTART.
NOV  8 04:02:26 INTRA1 CLAMD[2689]: DATABASE CORRECTLY RELOADED (299083 SIGNATURES)
置換後は上記のようになった