他のユーザーが未読のメールがあるかどうかを確認するLinuxシェルスクリプト

他のユーザーが未読のメールがあるかどうかを確認するLinuxシェルスクリプト

ユーザーが未読メールを持っているかどうかを確認するためにユーザーIDをパラメータとして受け入れるシェルスクリプトを作成しています/var/spool/mail

ユーザーのメールステータスを確認するにはどうすればよいですか?/var/spool/mail未読メールのみ?その場合は、ファイルサイズが0より大きいユーザーのみを確認するとします。

答え1

未読メッセージを見つける1つの方法は、メールスプールファイルのタイムスタンプを確認することです。ファイルがアクセス(読み取り)された後に記録された場合、つまりファイルがmtime大きいatime場合は未読メッセージがあります。

for f in /var/spool/mail/* ; do 
     [ $(stat -c '%Y -gt %X' "$f") ] && echo "$f has unread mail"
done

もちろん、メールボックスを開くと、誰かが個々のメッセージを表示しているかどうかにかかわらず、メールボックスの内容はすべて「読んだ」と見なされます。

多くの場合、読んでいるメッセージも~/mboxスプールディレクトリから移動(に移動)されるため、ファイルサイズを確認するだけです。

答え2

オプションと次のようにmailx(以前のmail)コマンドを使用できます。-eu

-eシステムメールボックスでのみメールを確認します。もしそうなら、終了ステータス0が返され、そうでなければゼロ以外の値が返されます。

-u user指定されたユーザー名のメールボックスを読み取ります。

root以外のユーザーが他のユーザーのEメールを確認できるようにするには、そのユーザーがrootとして実行できるようにするファイルにルールを作成する必要がありますsudo。例:/etc/sudoersmailx

fred localhost=/bin/mailx -e -u *

man sudoers完全な形式を確認してください。

次に終了ステータスをテストします。

sudo mailx -e -u tom

フレッドによって処刑される

関連情報