Linux shell 脚本检查其他用户是否有未读邮件

Linux shell 脚本检查其他用户是否有未读邮件

我正在创建一个 shell 脚本,它将接受用户 ID 作为参数来检查该用户是否有未读邮件/var/spool/mail

我该如何检查用户的邮件状态?/var/spool/mail只有未读邮件吗?如果是这样,那么我假设我只会检查文件大小大于 0 的用户。

答案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 仅检查系统邮箱中是否存在邮件。如果是,则返回退出状态为零,否则返回非零值。

-u user 读取给定用户名的邮箱。

要允许非 root 用户检查其他用户的电子邮件,您必须sudo在文件中创建一条规则/etc/sudoers,允许该用户mailx以 root 身份运行,例如:

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

检查man sudoers完整的格式。

然后你只需测试退出状态

sudo mailx -e -u tom

被弗雷德处决

相关内容