我正在创建一个 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
)带有选项的命令-e
和u
:
-e 仅检查系统邮箱中是否存在邮件。如果是,则返回退出状态为零,否则返回非零值。
-u user 读取给定用户名的邮箱。
要允许非 root 用户检查其他用户的电子邮件,您必须sudo
在文件中创建一条规则/etc/sudoers
,允许该用户mailx
以 root 身份运行,例如:
fred localhost=/bin/mailx -e -u *
检查man sudoers
完整的格式。
然后你只需测试退出状态
sudo mailx -e -u tom
被弗雷德处决