Краткий ответ может быть таким: :Это философия Unix "Делай одно дело и делай это хорошо ".
Сначала поймите разницу между MTA и MUA:
Когда пользователь отправляет почту в своем MUA, MUA подключается к MTA своего интернет-провайдера. MTA проверяет учетные данные пользователей и принимает почту для доставки. Сообщается, что сообщение отправлено пользователю. MTA провайдера теперь проверяет, как доставить почту, и, возможно, находит следующую станцию, на которую следует отправить почту. Таким образом, почта может сделать несколько переходов, прежде чем будет найден хост, являющийся конечным пунктом назначения почты. Этот MTA будет знать, как поместить его в почтовый ящик целевого пользователя (, как правило, локально на сервере ). Теперь получатель может открыть свой MUA и подключиться к MDA своего интернет-провайдера. MDA просматривает локальную файловую систему и сообщает, что появилось новое сообщение и его содержимое.
Итак, простой ответ: :Cron — это программа, и поэтому он будет использовать программный интерфейс MTA вместо MUA. (как cron вообще должен взаимодействовать с этими программами?)
Для отправки почты с помощью MTA :Подключитесь к портам 25, 578 или любому другому и используйте протокол SMTP (S ). Это именно то, что ваш MUA делает для вас под капотом. Вы можете/должны использовать те же параметры учетных данных/хоста/порта, которые вы использовали бы в настройках вашего MUA.
MUA может осуществлять сетевую связь с MTA. Таким образом, на каждой машине не требуется локальный MTA (, вам не нужен локальный постфикс для запуска Thunderbird, верно? ).
Однако когда мы говорим о службах на машине, которая должна быть способна отправлять почту куда угодно, на самом деле есть два варианта:
Здесь в игру вступает упомянутая выше философия unix :Вместо реализации связи (и авторизации и т. д. )для всех программ она реализована один раз (MTA ), и эта программа предоставляет интерфейс по умолчанию, который принимает почту от локальных служб (либо через сокет unix, канал к командному или сетевому порту ). По этой причине большинство служб предполагают, что локальный агент передачи сообщений работает. Этот MTA может быть очень минимальным, который просто перенаправляет почту более крупному для сортировки и т. д.
Фактическим -стандартом здесь была недавняя программа sendmail (, также являющаяся MTA ).Из-за огромных проблем с ним он был заменен другими MTA, такими как postfix, которые по-прежнему предоставляют старый интерфейс sendmail (по той причине, что существует оболочка sendmail в пакете postfix ).
Редактировать 1:@ Тим, почему ты думаешь, что отправка и получение должны быть симметричными? MTA отвечают за взаимодействие между -серверами. Этот в каком-то смысле симметричен, но вы видите только одну его сторону (при отправке писем другим ). Прием осуществляется серверами вашего провайдера. Сама по себе передача почты очень быстрая (вопрос мс ).
Таким образом, вам не нужно что-то вроде MDA на отправляющей стороне. Вы можете просто попробовать и отправить почту. Думайте об этом как о почтовой службе. Вы просто оставляете посылку в почтовом отделении, они позаботятся обо всех дальнейших пересылках.
MUA просто отправляет почту. Как только он будет принят первым MTA, MUA предполагает, что он отправлен . Опять почтовый аналог :Как только вы кладете посылку на почту для отправки, вы предполагаете, что она будет доставлена. Если что-то пойдет не так в пути, вам вернут посылку. Именно это происходит, когда почта вызывает проблемы в пути. MTA отправит вам информацию о возврате (, так называемую отказную передачу ), если сообщение не может быть доставлено на следующую станцию.
Теперь снова принимающая сторона. Сначала я снова использую почтовый аналог. Если бы вы всегда были на связи, а также всегда находились в одном и том же месте, почтальон мог бы напрямую прийти к вам, чтобы доставить вашу почту. Это означало бы, что MTA доставляет почту непосредственно вам.
К сожалению, у вас не -статический IP-адрес (вы не всегда находитесь в одном и том же месте )и вы точно не всегда там (не всегда дома ). Как результат,MTA может попытаться доставить почту, но поскольку вы недоступны, почта будет возвращена (, см. выше ).
Чтобы избежать этого, у вас есть свой почтовый ящик. Это верно как для электронной почты, так и для обычной почты. Сотрудник почты/MTA кладет почту в ящик на своих условиях (времени ). Всякий раз, когда сообщение нужно доставить, он может это сделать. В случае MTA это означает не что иное, как сохранение файла в специальной папке.
Почтовый ящик представляет собой элемент синхронизации между вами и почтальоном. Вы можете подойти к почтовому ящику в любое время , сочтете его подходящим, и найдите свой пост. Поскольку MTA сохранил почту на сервере, прямого доступа у вас нет. Здесь в игру вступает MDA. MDA разрешает доступ к почтовому ящику от вашего имени и в соответствии с вашим временем.
Если ваш язык en_US.UTF-8
и LC_ALL=C ls
дает вам нужный порядок, тогда
LC_COLLATE=C ls
должен дать вам нужный порядок и показать β
как β
.
Установка LANG
для любой локали UTF -8 должна отображать β
как β
. Вы используете en_US.UTF-8
, поэтому нет необходимости менять LANG
.
В одном из комментариев рекомендуется «установить LANG
на греческий, а LC_COLLATE
на C
». Ваша попытка была LC_COLLATE="C" LANG="el_EL.UTF-8" ls
, и она не сработала, потому что:
el_GR.UTF-8
, а не el_EL.UTF-8
; el_EL.UTF-8
существует, возможно, вы (ваша ОС )никогда не создавала для нее файлы локализации из шаблонов. Вероятно, вы также не создали файлы для el_GR.UTF-8
. Чтобы их получить, вам нужно отредактировать /etc/locale.gen
и раскомментировать el_GR.UTF-8
, затем запустить sudo locale-gen
. И тогда LC_COLLATE=C LANG=el_GR.UTF-8 ls
будет работать. Но опять же, вам не нужно этого делать, вашего en_US.UTF-8
достаточно, чтобы показать β
как β
. Все, что вам нужно, это LC_COLLATE=C
, чтобы изменить порядок сортировки.
На моей машине:
$ env LC_COLLATE=C ls
_y a b c x z β
Я думаю, что в своем комментарии вы указали неверную локаль,вот так (Мне нужно было -N
воспроизвести ваш вывод):
$ env LC_COLLATE=C LANG="sdjf" ls
_y a b c x z ''$'\316\262'
$ env LC_COLLATE=C LANG="sdjf" ls -N
_y a b c x z ??
Если у вас нарушена только локаль, вы можете использовать флаги --show-control-chars -N
вот так:
$ env LC_COLLATE=C LANG="sdjf" ls --show-control-chars -N
_y a b c x z β
$ env LANG=C ls -N --show-control-chars
_y a b c x z β
Я использую Ubuntu 20.04.2, если это имеет значение