Bạn có tin nhắn thư mới trong Linux / UNIX là gì?


426

Đôi khi, khi tôi đăng nhập vào một hộp và 'su' để root, tôi nhận được một tin nhắn nhỏ dễ thương nói rằng tôi có thư (cảm ơn THIÊN CHÚA không phải là AOL).

  • Thư này ở đâu?
  • Nó chứa cái gì?
  • Ai / cái gì đã gửi nó?
  • Nó quan trọng như thế nào?

Đây có phải là "thư" thực sự theo cùng nghĩa với email không? Hay đó chỉ là hệ thống của tôi nói với tôi điều gì đó?

EDIT: Liên quan đến câu hỏi này , tôi có thể tự gửi thư bằng chương trình sendmail như vậy email@localhostkhông?


Tôi có một tin nhắn trong đó có nội dung "Văn bản này là một phần của định dạng nội bộ của thư mục thư của bạn, ..." vì vậy tất nhiên bất cứ khi nào tôi đăng nhập tôi đều được thông báo rằng tôi có thư.
GEdgar

1
@GEdgar: Điều này thường có nghĩa là bạn nên ngừng sử dụng hộp thư mbox và di chuyển sang Maildir :)
grawity


1
Cách chuyển tiếp thư: unix.stackexchange.com/questions/26666/áp
Melebius

1
Trong trường hợp bất cứ ai đang tìm kiếm, đây là powerhshell one-liner để chia nó thành các tệp duy nhất có thể đọc được bằng triển vọng:$i=0;(gc .\mail\root -raw) -split '[^, ]From '|%{$i++;sc mail$i.eml -value ("From " + $_)}
JDuarteDJ

Câu trả lời:


354

Thư này ở đâu?

Nó có thể nằm trong tệp spool: /var/mail/$USERhoặc /var/spool/mail/$USERlà các vị trí phổ biến nhất trên Linux và BSD.

(Các vị trí khác là có thể - kiểm tra nếu $MAILđược đặt - nhưng theo mặc định, hệ thống chỉ thông báo cho bạn về /var(/spool)/mail.)

Thông thường tệp spool có định dạng mbox rất đơn giản , vì vậy bạn có thể mở nó trong trình soạn thảo văn bản hoặc máy nhắn tin.

Đối với một cách thuận tiện hơn một chút, hầu hết các bản phân phối đi kèm với một chương trình được gọi là mail(hoặc Mail, mailx). Bạn có thể thử mutthoặc alpine; bạn thậm chí có thể cấu hình nó để được gửi đến một hộp thư bên ngoài. (Xem "đây có phải là thư thật không?" Bên dưới.)

Nó chứa cái gì, và ai / cái gì đã gửi nó?

Thông thường các thông báo chứa đầu ra của các công việc định kỳ hoặc báo cáo bảo mật hệ thống bằng logwatch hoặc rác tương tự. Đọc nó và tìm hiểu.

Nó quan trọng như thế nào?

Phụ thuộc rất nhiều vào nội dung của từng tin nhắn.

Ít nhất bạn nên quét các tiêu đề chủ đề - thường mọi người bỏ qua thư trong nhiều tháng không bao giờ nhận ra rằng công việc định kỳ hàng ngày của họ thất bại.

Đây có phải là "thư" thực sự theo cùng nghĩa với email không? Hay đó chỉ là hệ thống của tôi nói với tôi điều gì đó?

Có cho cả hai - nó được tạo bởi hệ thống của bạn cho bạn biết điều gì đó, nhưng đó cũng là email thực tế và có thể được xử lý như vậy.

Bạn có thể (và nên) định cấu hình phần mềm thư của mình - "MTA" aka /usr/sbin/sendmail- để chuyển tiếp thư đến địa chỉ thư cá nhân của bạn. Các hướng dẫn chính xác khác nhau tùy thuộc vào MTA nào (nếu có) mà bạn đã cài đặt, cho dù đây là máy tính cá nhân hay máy chủ, cho dù bạn có tên miền riêng hay sử dụng @ gmail.com , v.v.

Lưu ý rằng /usr/sbin/sendmailngày nay là một API được chia sẻ và không nhất thiết có nghĩa là MTA Sendmail gốc. Trên thực tế, bạn không nên sử dụng Sendmail, nhưng một cái gì đó hiện đại hơn như OpenSMTPD, Postfix hoặc Exim4. Tất cả chúng đều cung cấp cùng một /usr/sbin/sendmailcông cụ, nhưng chúng dễ cấu hình hơn, an toàn hơn và mạnh mẽ hơn.


3
Câu trả lời tốt. Nếu bạn đã thêm các liên kết với thông tin về cách định cấu hình OpenSMTPD, Postfix hoặc Exim4 để chuyển tiếp thư đến địa chỉ email thông thường của bạn, điều đó thậm chí còn tốt hơn.
imolit

1
Đây là một câu hỏi liên quan cho thấy cách thiết lập mutt : askubfox.com/a/499335/75735
KalenGi 8/11/2016

Câu trả lời chính xác. Nhưng làm thế nào để tôi sử dụng mailđể đọc email? Các trang không nói.
jpaugh

1
Tôi đã xem thư của mình bằng lệnh cat / var / mail / $ USER và xóa nó bằng lệnh rm -rf / var / mail / $ USER.
Sinan Eldem

@grawity tôi nên xóa các tập tin /var/mail/khi tôi đọc chúng hoặc chỉ xóa văn bản bên trong chúng? cảm ơn bạn!
yaylitzis

206

Cách dễ nhất đối với tôi là chạy các phần sau trong một thiết bị đầu cuối:

cat /var/spool/mail/root

5
Câu trả lời thực tế tốt nhất cho đến nay mà thực sự bổ sung kiến ​​thức. Bây giờ tôi có thể đọc thư. Tôi tự hỏi tại sao đó là câu trả lời dưới cùng nhất.
CDR

37
Tôi nhận ra đây là một câu hỏi / câu trả lời khá cũ, nhưng XKCD này có liên quan đến cuộc thảo luận. (gợi ý: văn bản di chuột)
Blackhawk

11
Hoặc chỉ less $MAILkhi bạn muốn điều hướng.
Walf

7
Hoặc less +G $MAILđể bắt đầu ở cuối.
Charlie Gorichanaz

4
@Blackhawk Và bây giờ thậm chí nhiều hơn XKCD này .
tráng miệng

56

Đối với bất kỳ ai tự hỏi làm thế nào để đọc từng tin nhắn này, bạn chỉ có thể sử dụng 'thư'

$ mail

Sau đó nhập số tin nhắn từ danh sách mà bạn muốn đọc.

Để xem tin nhắn tiếp theo, bạn có thể nhập 'next', một lệnh hữu ích khác là 'xóa' ..

Để xem thêm về cách mailchương trình hoạt động, xem đầu ra của man mail.


3
//, Điều này không thực sự hoạt động, trên CEntOS 6. Trong trường hợp đó, người ta phải sử dụng $ mailx.
Nathan Basan

6
Trên Ubuntu 16.04, trước tiên tôi cần cài đặt mailutilsbằng cách chạyapt install mailutils
Edwin Yip

Trên các phiên bản Amazon EC2, bạn có thể cài đặt nó bằng cách sử dụngsudo yum install mail
JonDoe297

1
Hoạt động với tôi trên macOS
juanmirocks 7/2/18

39

Chỉ cần cung cấp một số giải thích rõ ràng, từ lâu các hộp UNIX đã chạy một trình tiện ích gửi thư "được định cấu hình cục bộ" không định tuyến thư qua Internet, nhưng chỉ sao chép thư đến các thư mục spool của người dùng khác (như @John T đề cập). Đó là email thực sự tuân thủ SMTP, nó chỉ không được định tuyến qua Internet bởi vì nó không cần phải như vậy.

Vì vậy, nếu bạn kích hoạt ứng dụng email (như alpinehoặc mutt), bạn có thể gửi thư cho người dùng khác trên hệ thống bằng cách gửi địa chỉ user@hostnamehoặc trong nhiều trường hợp, chỉ cần chỉ định người dùng. Bạn cũng có thể có một tiện ích dòng lệnh được gọi là mailxcó thể được sử dụng để gửi email nhanh bằng shell của bạn.

Bây giờ, nếu bạn muốn gửi tin nhắn cho người dùng trên các hệ thống khác với hệ thống bạn đã đăng nhập, đó là nơi niềm vui thực sự bắt đầu. Bạn sẽ cần định cấu hình trình nền thư của mình để nhận và gửi email bên ngoài cho đại lý chuyển, định cấu hình đại lý chuyển và thực hiện toàn bộ nội dung mà tôi chưa hiểu bản thân mình.


24

Thư này ở đâu?

Rất có khả năng được lưu trữ trên máy của bạn, trong thư mục hộp thư cho người dùng root của bạn (nơi THAT phụ thuộc vào loại máy chủ thư bạn đã cài đặt). Bạn có thể có thể truy cập nó khá nhanh thông qua núi cao .

Nó chứa cái gì?

Có lẽ chỉ là một số loại báo cáo hệ thống công cụ. "Vì vậy, đã cố gắng đăng nhập 10 lần với mật khẩu không chính xác" .. "Tôi ước ai đó sẽ chạy cập nhật cho tôi", "trình điều khiển tương tự như vậy bị lỗi liên tục", "Bot NSA đã tăng hiệu suất lên 1%" .. Vân vân..

Ai / cái gì đã gửi nó?

Dịch vụ trên máy chủ của bạn, rất có thể.

Nó quan trọng như thế nào?

Phụ thuộc vào tầm quan trọng của máy chủ của bạn.


Tôi nghĩ đề xuất của John rằng nó được lưu trữ trong / var / spool / mail / root dựa trên giả định (tốt) rằng bạn đang chạy sendmail. Tôi nghĩ rằng các máy chủ thư khác sử dụng các vị trí khác nhau để lưu trữ thư.
James T Snell

Có cách nào để người dùng sử dụng hệ thống con thư không?
n0pe

Phượng hoàng trắng: Tôi sẽ xem khi thư của tôi là khi tôi nhận được tin nhắn một lần nữa :) Có cách nào để tôi kích hoạt nó hay đó là quá cục bộ của một câu hỏi?
n0pe

Nếu bạn muốn khám phá việc chạy máy chủ thư của riêng bạn (mà mọi người sử dụng theo nghĩa email thông thường), trước tiên bạn cần biết bản phân phối nào bạn đang chạy? Không có thông tin đó, tất cả những gì tôi sẽ nói, là tôi khuyên bạn nên đọc trên sendmail (vì có lẽ bạn đã chạy sendmail rồi) ..
James T Snell

Hầu hết trong số họ đang chạy AIX nhưng tôi muốn khám phá điều này trên máy trạm của tôi ở nhà chạy OpenSuSe
n0pe

14

Thư này thường được đặt /var/spool/mail/rootkhi daemon sendmail mặc định (thông thường) được cấu hình. Nó chứa một thông điệp email RAW có thể được đọc bởi mailtiện ích. Ai đã gửi nó có thể được tìm thấy bằng cách chạy mailtiện ích và phân trang thông qua các tin nhắn hoặc đọc các tiêu đề RAW.

Tầm quan trọng của tin nhắn thường phụ thuộc vào yếu tố trước đó, ai đã gửi nó :)

Nhiều tiện ích hệ thống sẽ sử dụng hệ thống con thư làm phương tiện báo cáo và ghi nhật ký. Các tiện ích theo dõi nhật ký và các dịch vụ khác có thể gửi e-mail đến người dùng root cục bộ như một lời nhắc nhở về một sự kiện cụ thể, chẳng hạn như không gian đĩa thấp hoặc lỗi phần cứng. Trình nền của người gửi thư cũng sẽ thông báo cho bạn nếu không gửi được e-mail đi.


Có cách nào để xem hệ thống con thư của tôi được thiết lập không?
n0pe

@Max sendmail.mctệp kiểm soát cấu hình của daemon sendmail trên hầu hết các cài đặt mặc định. Nó thường nằm dưới /etc/mail.
John T

@Max Tôi thực sự khuyên bạn nên đọc qua một hướng dẫn như linuxhomenetworking.com/wiki/index.php/ tựa để giúp bạn định cấu hình trình nền thư như mong muốn.
John T

Trên Ubuntu 16.4., Tôi có /etc/mail.rccái không liên quan đếnsendmail
Timo

12

less +G /var/spool/mail/root

hiển thị các thư mới nhất, ở cuối nếu tập tin.

Trực tiếp hiển thị tệp thư là một ý tưởng tốt, nhưng sử dụng catcó thể dễ dàng đi sai. Bạn không muốn tất cả thư cuộn qua, nếu có nhiều tin nhắn hoặc tin nhắn rất dài trong tệp. Tôi chỉ thấy một cái có 150MB, hai triệu dòng.

Nếu bạn không root:

sudo less +G /var/spool/mail/root

Các +Gtùy chọn được sử dụng để hiển thị thông báo mới nhất đầu tiên; Nó không phải ở trên cùng của tập tin, nhưng ở cuối.

Đây là một tùy chọn less, làm cho nó hiển thị trang cuối cùng của tệp sau khi bắt đầu. Điều đó hiển thị thông báo cuối cùng (mới nhất), nếu nó phù hợp với một trang hoặc kết thúc của thông báo đó.

Tên tệp có thể /var/spool/mail/mailthay vì/var/spool/mail/root


//, sự cố tuyệt vời. Câu trả lời này sẽ đặc biệt hữu ích cho những người không dễ dàng biết phải làm gì với tệp.
Nathan Basan

4
Trong trường hợp bất kỳ ai khác đang tự hỏi, +G"gây ra ít hơn để hiển thị ban đầu mỗi tệp bắt đầu ở cuối thay vì bắt đầu." ( linux.die.net/man/1/less )
Sam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.