Computer >> 컴퓨터 >  >> 스마트폰 >> Linux

리눅스 명령줄에서 이메일 보내기: mail·mutt 활용법부터 셸 스크립트 자동화까지

이 가이드에서는 리눅스 명령줄과 셸 스크립트에서 이메일을 보내는 방법, 그리고 이메일에 첨부파일을 추가하는 방법까지 단계별로 살펴봅니다.

리눅스 명령줄은 사용법만 익히면 매우 강력한 도구가 됩니다. 데이터 파싱, 프로세스 모니터링, 백업 자동화 등 다양하고 유용한 작업을 손쉽게 수행할 수 있습니다. 실무에서는 작업 결과를 리포트로 만들어 메일로 발송해야 하는 경우가 자주 생깁니다. "오늘의 백업이 정상적으로 완료되었다" 또는 "실패했다"는 간단한 알림일 수도 있죠. 이 글에서는 리눅스 명령줄 셸 스크립트에서 메일을 보내는 기본 방법을 소개하고, 명령줄에서 첨부파일을 전송하는 방법도 함께 다룹니다. 먼저 'mail' 명령어부터 시작하겠습니다.

mail 명령어 사용하기

먼저 sendmail이 설치되어 있고 정상적으로 동작하는지 간단히 테스트해 보겠습니다. 아래 명령어를 실행하되, "you@youremailid.com" 부분은 본인의 이메일 주소로 바꿔 입력하세요.

# mail -s "Hello world" you@youremailid.com

엔터 키를 누르면 새 줄로 이동합니다. 여기에 "This is a test from my server"라는 본문 텍스트를 입력한 뒤 다시 엔터 키를 누르고, Ctrl+D 키 조합을 눌러 입력을 마칩니다. 그러면 다른 주소로 참조 사본을 보낼지 묻는데, 역시 Ctrl+D를 눌러 건너뛰면 됩니다. 이후 자신의 메일함을 확인해 보세요. 위 명령은 지정한 이메일 주소로 "Hello world"라는 제목의 메일을 발송합니다.

명령 실행과 동시에 본문 내용을 추가하고 싶다면 다음과 같이 파이프(|)를 활용할 수 있습니다.

# echo "This will go into the body of the mail." | mail -s "Hello world" you@youremailid.com

파일의 내용을 메일 본문으로 넣고 싶다면 입력 리다이렉션(<)을 사용합니다.

# mail -s "Hello world" you@youremailid.com < /home/calvin/application.log

mail 명령어에서 자주 쓰이는 유용한 옵션은 다음과 같습니다.

-s 제목 (메일 제목 지정)
-c 이메일 주소 (참조, CC 지정)
-b 이메일 주소 (숨은참조, BCC 지정)

실제 사용 예시는 다음과 같습니다.

# echo "Welcome to the world of Calvin n Hobbes" | mail -s "Hello world" calvin@cnh.com -c hobbes@cnh.com -b susie.derkins@cnh.com

MUTT로 첨부파일 전송하기

mail 명령어의 가장 큰 단점은 첨부파일 전송을 지원하지 않는다는 점입니다. 반면 mutt는 첨부파일 전송을 지원합니다. 텍스트가 아닌 형식의 리포트나 용량이 크지 않은 백업 파일을 다른 곳으로 전송하는 스크립트를 작성할 때 특히 유용하게 활용할 수 있습니다. 물론 mutt는 첨부파일 전송 외에도 훨씬 많은 기능을 제공하는, mail 명령어보다 완성도 높은 명령줄 메일 클라이언트입니다. 여기서는 자주 필요한 기본 기능만 살펴보겠습니다. 파일을 메일에 첨부하는 방법은 다음과 같습니다.

# echo "Sending an attachment." | mutt -a backup.zip -s "attachment" calvin@cnh.com

이 명령은 calvin@cnh.com에게 제목(-s)이 "attachment"이고, 본문이 "Sending an attachment."이며, backup.zip 파일이 첨부(-a)된 메일을 보냅니다. mail 명령어와 마찬가지로 "-c" 옵션으로 참조(CC) 주소를 지정할 수도 있습니다.

셸 스크립트에서 이메일 보내기

기본기를 익혔다면 이제 셸 스크립트에서도 메일을 보낼 수 있습니다. 다음은 파티션의 디스크 사용량을 조회하고 그 결과를 메일로 발송하는 간단한 셸 스크립트입니다.

#!/bin/bash
df -h | mail -s "disk space report" calvin@cnh.com

위 코드를 리눅스 서버의 파일로 저장한 뒤 실행하면, 명령 결과가 담긴 메일을 받게 됩니다. 만약 이보다 더 많은 데이터를 보내야 한다면, 데이터를 텍스트 파일에 기록한 후 그 파일을 메일 본문에 넣으면 됩니다. 다음은 디스크 사용량과 메모리 사용량을 함께 조회하여 임시 파일에 저장한 뒤, 그 내용 전체를 메일 본문으로 발송하는 셸 스크립트 예제입니다.

#!/bin/bash
df -h > /tmp/mail_report.log
free -m >> /tmp/mail_report.log
mail -s "disk and RAM report" calvin@cnh.com < /tmp/mail_report.log

이번에는 좀 더 복잡한 상황입니다. 여러 파일을 백업한 뒤 그 백업 파일을 메일로 전송해야 한다고 가정해 보겠습니다. 먼저 대상 디렉터리를 압축 아카이브로 만들고, 이어서 mutt를 이용해 이메일 첨부파일로 전송합니다. 이를 처리하는 스크립트는 다음과 같습니다.

#!/bin/bash
tar -zcf /tmp/backup.tar.gz /home/calvin/files
echo | mutt -a /tmp/backup.tar.gz -s "daily backup of data" calvin@cnh.com

마지막 줄 맨 앞의 echo는 발송되는 메일 본문에 빈 줄 하나를 추가하는 역할을 합니다.

여기까지 잘 따라왔다면 리눅스 명령줄과 셸 스크립트에서 메일을 보내는 기본은 충분히 익힌 것입니다. 더 많은 옵션이 궁금하다면 mail과 mutt의 man 페이지를 참고하세요(터미널에서 "man mail", "man mutt" 명령을 입력하면 각 명령어의 전체 매뉴얼을 볼 수 있습니다). 이후에는 자동화된 리포트를 스스로에게 발송하는 등, mail 명령어로 가능한 다양한 활용법을 상상력을 발휘해 찾아보시기 바랍니다.