다른 사용자가 읽지 않은 이메일이 있는지 확인하는 Linux 쉘 스크립트

다른 사용자가 읽지 않은 이메일이 있는지 확인하는 Linux 쉘 스크립트

해당 사용자가 읽지 않은 메일이 있는지 확인하기 위해 사용자 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 시스템 메일함에서만 메일을 확인합니다. 그렇다면 종료 상태 0이 반환되고, 그렇지 않으면 0이 아닌 값이 반환됩니다.

-u user 주어진 사용자 이름의 메일함을 읽습니다.

루트가 아닌 사용자가 다른 사용자의 이메일을 확인할 수 있도록 허용하려면 해당 사용자가 루트로 실행할 수 있도록 허용하는 sudo파일에 규칙을 만들어야 합니다 . 예:/etc/sudoersmailx

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

man sudoers전체 형식을 확인하세요 .

그런 다음 종료 상태를 테스트하면 됩니다.

sudo mailx -e -u tom

프레드에 의해 처형됨

관련 정보