sudoを使用して、成功と失敗に関係なく、すべてのログインを監視するスクリプトを作成しようとしています。
今私にいます:
set tdate = $(date "+%b %d")
set attempted_su_log = /var/log/suattempts
cat /var/log/secure | grep $tdate | grep 'servername su' >> $attempted_su_log
/var/log/secureで現在の日付を特定して発生した日付のエントリのみを取得するにはどうすればよいですか?
私が走るとき
cat /var/log/secure | grep 'Mar 18' | grep 'servername su'
コマンドラインから必要な結果を得ましたが、$ tdate変数で設定された現在の日付でgrepをスクリプトする方法がわかりません。
答え1
grep:のパラメータを引用する必要がありますgrep "$tdate"
。これは$tdate
、二重引用符を追加しない限り、2つのスペースで区切られた単語に拡張され、2つの引数としてgrepに渡されるためです。
無駄なcatの使用を排除し、grepを一度だけ呼び出すようにスクリプトを改善できます。
</var/log/secure grep "$tdate.*servername su" >>"$attempted_su_log"
答え2
tdate
そこにスペースがあります。したがって、grepは2番目の部分をtdate
ファイル名として扱います。$tdate
これが発生しないようにするには、二重引用符で囲む必要があります。コマンドは次のようにする必要があります。
cat /var/log/secure | grep "$tdate" | grep 'servername su' >> $attempted_su_log