当前位置: 首页 > news >正文

linux mail命令及其历史

一、【问题描述】

最近隔壁组有人把crontab删了,crontab这个命令有点反人类,它的参数特别容易误操作:

crontab -   是删除计划表

crontab -e 是编辑,总之就是特别容易输入错误。

好在可以通过mail命令找回,但是mail是一个远古命令,他的操作也很反人类

二、【命令展示】

在 Linux 中使用 mail 命令时,可以通过以下操作来导航和操作邮件内容:

  1. 上下移动:使用 jk 键来向下和向上移动。
  2. 左右移动:可以使用 hl 键来向左和向右移动。
  3. 查看邮件:输入邮件编号并按 Enter 键来查看特定邮件。例如,输入 1 并按 Enter 键查看第一封邮件。
  4. 删除邮件:输入 d 加邮件编号,然后按 Enter 键删除特定邮件。例如,输入 d 1 删除第一封邮件。
  5. 退出邮件客户端:输入 q 并按 Enter 键退出 mail 命令

三、【总结】

笔者去查了一下,这个mail命令究竟有多远古, 原文是这么写的

The most ancient command is mail, 
which was included in Unix 1st Edition in 1971 according to the manuals. 
At this time, Unix had no remote communication facility at all,
so mail would simply write to other users' files on a single machine.

GPT是这么回复的

所以总的来说,mail的操作习惯不同是因为其本身就是一个远古命令,如果希望用好使一点的,可以用mutt来平替 

四、【参考】

这篇文章是笔者查资料看到的,有兴趣可以看看

mail, Mail, mailx, nail—history notes (sourceforge.net)

1. 机翻

mail, Mail, mailx, nail—history notes:

邮件命令在Unix系统中的名称长期以来一直存在混淆。以下是一些澄清:

最古老的命令是mail,根据手册,它是在1971年的Unix第一版中包含的。那时,Unix根本没有远程通信设施,所以邮件只是简单地写入到单台机器上其他用户的文件中。

随后的Unix版本中,mail进行了一些更新;它可以调用uux,后来是sendmail,用于发送远程消息,并至少具有一些交互式命令用于在邮箱中导航。像这样的邮件命令是通过System V接口定义(SVID)和Single Unix规范(直到1998年版)标准化的。

随着后续版本的System V,mail仍然获得了一些更多的功能,例如打印头部摘要的功能。这样的邮件命令的开源版本作为Heirloom Toolchest软件包的一部分是可用的;查看其手册页以获取其功能概述。然而,所有派生自原始mail的命令仍然有些原始;因为它们既不调用分页器查看超过CRT屏幕的消息,也没有提供设置主题行的方法,所以它们不太适合用于互联网邮件。尽管如此,它们仍然适用于发送短消息。

然而,从中应该学到的是,使用mail命令的-s选项在shell脚本中设置主题行是不可移植的,不会在某些Unix实现上起作用。

在1978年,Kurt Shoens为Unix编写了另一个邮件用户代理:Berkeley Mail。它不是原始邮件命令的派生版本。当它被包含在2BSD发布版中时(这仍然只是Unix第6或第7版系统的附加组件),它的用户界面已经完整(所以如果在Heirloom mailx中设置了bsdcompat选项,它实际上看起来和感觉都一样)。安装后,Berkeley Mail被发现为/usr/ucb/Mail,但Unix mail仍然可以在/bin/mail中找到。

混淆真正开始于3BSD发布版(一个完整的系统,而不是一个附加组件),因为它还提供了一个/usr/ucb/mail命令,它只是一个指向Mail的链接。因此,根据PATH设置,输入mail可能会调用Unix mail或Berkeley Mail。这在所有Berkeley发布版本中一直保持不变,直到4.3BSD-Tahoe及其派生版本;最终,Unix mail被完全删除,但名称在所有位置上仍然保持为指向Mail的链接。

对于System V Release 3,创建了Berkeley Mail的一个派生版本:mailx。它基本上与Mail兼容,但有一些附加功能,并且用户界面略有改变(如果未设置bsd...兼容变量,Heirloom mailx使用类似的界面)。

这个System V mailx命令随后也在1992年被标准化为POSIX.2,包括许多扩展。

Linux发行版使情况变得更加混乱。它们只能使用原始的Berkeley Mail(直到2005年的OpenSolaris发布,System V mailx是封闭源代码)。然而,由于Mail和mailx对于大多数应用程序来说足够相似,对于许多应用程序来说,也似乎适合于具有简单的mailx命令,该命令只是Mail,因此不足以达到正式的POSIX.2一致性。大多数发行版也使mail调用Mail,因为Unix mail也是封闭源代码,直到2002年1月。

为了完全混淆,一些商业Unix供应商随着时间的推移放弃了对原始mail的支持,并使其调用mailx。

Heirloom mailx源自Berkeley Mail。自版本10以来,Heirloom mailx还具有System V和POSIX mailx添加的独立实现。

Heirloom mailx以前是以nail的名称开发的,并于2006年3月整合到Heirloom项目中。

如果被称为Mail,则应创建一个简短的shell脚本,在调用mailx之前设置bsdcompat变量。但mail是一个完全不同的命令,如果需要使用开源版本,则应从Heirloom Toolchest获取。可移植的脚本应该在不带任何选项的情况下调用mail,或者应该使用标准化的mailx接口。在任何情况下,它们应将MAILRC变量设置为/dev/null以绕过用户的配置。由于这个变量存在于mailx中,但不存在于Mail中,因此在脚本中使用Mail不太可靠,应该避免。(实际上,这意味着在许多BSD衍生版本和Linux发行版上,没有可靠的方法从脚本发送邮件。但这是一个人必须面对的事实。)

相关文章:

linux mail命令及其历史

一、【问题描述】 最近隔壁组有人把crontab删了,crontab这个命令有点反人类,它的参数特别容易误操作: crontab - 是删除计划表 crontab -e 是编辑,总之就是特别容易输入错误。 好在可以通过mail命令找回,但是mai…...

数据驱动(Data-Driven)和以数据为中心(Data-Centric)的区别

一、什么是数据驱动? 数据驱动(Data-Driven)是在管理科学领域经常提到的名词。数据驱动决策(Data-Driven Decision Making,简称DDD)是一种方法论,即在决策过程中主要依赖于数据分析和解释&…...

aosp14的分屏接口ISplitScreen接口获取方式更新-学员疑问答疑

背景: 有学员朋友在学习马哥的分屏pip自由窗口专题时候,做相关分屏做小桌面项目时候,因为原来课程版本是基于android 13进行的讲解的,但是现在公司已经开始逐渐进行相关的android 14的适配了,但是android 14这块相比a…...

定积分求解过程是否变限问题 以及当换元时注意事项

目录 定积分求解过程是否变限问题 文字理解: 实例理解: 易错点和易混点: 1:定积分中的换元指什么? 2: 不定积分中第一类换元法和第二类换元法的本质和区别 3: df(x) ----> df(x)这…...

保研机试算法训练个人记录笔记(七)

输入格式: 在第1 行给出不超过10^5 的正整数N, 即参赛}人数。随后N 行,每行给出一位参赛者的 信息和成绩,包括其所代表的学校的编号(从1 开始连续编号)及其比赛成绩(百分制)&#xf…...

【MySQL精通之路】SQL优化(1)-查询优化(23)-避免全表扫描

当MySQL使用全表扫描来解析查询时,EXPLAIN的输出在type列中显示ALL。 这种情况通常发生在以下情况下: 该表非常小,因此执行全表扫描比查找关键字更快。这对于少于10行且行长较短的表来说很常见。 对于索引列,ON或WHERE子句中没有…...

【Linux】写时拷贝技术COW (copy-on-write)

文章目录 Linux写时拷贝技术(copy-on-write)进程的概念进程的定义进程和程序的区别PCB的内部构成 程序是如何被加载变成进程的?写时复制(Copy-On-Write, COW)写时复制机制的原理写时拷贝的场景 fork与COWvfork与fork Linux写时拷贝技术(copy-…...

用python使用主成分分析数据

import pandas as pd #导入处理二维表格的库 import numpy as np #导入数值计算的库 from sklearn.preprocessing import StandardScaler #导入数据标准化模块 import matplotlib.pyplot as plt #导入画图的包 from sklearn.decomposition import PCA #导入主成…...

用WPS将多张图片生成一个pdf文档,注意参数设置

目录 1 新建一个docx格式的文档 2 向文档中插入图片 3 设置页边距 4 设置图片大小 5 导出为pdf格式 需要把十几张图片合并为一个pdf文件,本以为很简单,迅速从网上找到两个号称免费的在线工具,结果浪费了好几分钟时间,发现需要…...

virtual box ubuntu20 全屏展示

virtual box 虚拟机 ubuntu20 系统 全屏展示 ubuntu20.04 视图-自动调整窗口大小 视图-自动调整显示尺寸 系统黑屏解决 ##设备-安装增强功能 ##进入终端 ##终端打不开,解决方案-传送门ubuntu Open in Terminal打不开终端解决方案-CSDN博客 ##点击cd盘按钮进入文…...

react中的数据驱动视图,useState()的使用

前端开发如今有一个很重要的思想就是数据驱动视图,数据发生变化使ui发生变化,比如一个变量count,为0显示三个按钮,为1显示一个按钮,为2显示两个按钮。这就是一个简单的数据驱动视图。 import { useState } from reactf…...

金融数据库,实时行情,股票财务数据在线查询

jvQuant在线SQL 文档(current)接入 测试 查询 #股票代码股票简称最新价(元)2024-05-21股东总户数(户)截至2024-05-21上市板块是否ST股票区间涨跌幅(%)2024-05-15-2024-05-21市盈率(TTM)(倍)2024-05-21营业收入(元)截至2024-03-31总市值(元)2024-05-21量比2024-05-21利润率(%…...

开源模型应用落地-LangSmith试炼-入门初体验-数据集评估(三)

一、前言 LangSmith是一个用于构建生产级 LLM 应用程序的平台,它提供了调试、测试、评估和监控基于任何 LLM 框架构建的链和智能代理的功能,并能与LangChain无缝集成。通过使用LangSmith帮助开发者深入了解模型在不同场景下的表现,让开发者能…...

设计模式 15 Decorator Pattern 装饰器模式

设计模式 15 Decorator Pattern 装饰器模式 1.定义 Decorator Pattern 装饰器模式是一种结构型设计模式,它允许在运行时给对象添加新的行为或职责,而无需修改对象的源代码。这种模式通过创建一个包装对象,也称为装饰器,来包裹原…...

cuda11.8安装torch2.0.1

pip install torch2.0.1 torchvision0.15.2 torchaudio2.0.2 --index-url https://download.pytorch.org/whl/cu118...

新手困 ViewModel与Activting的databinding2个对象 区别

在Android开发中,ViewModel与Activity的Binding并不是同一个概念,它们分别指的是不同的功能和用途。 ViewModel: ViewModel是一个为UI界面提供数据的类,它负责管理Activity或Fragment的数据。ViewModel类持有数据的引用,即使配置…...

Cocos Creator 声音播放与管理详解

Cocos Creator 是一款非常流行的游戏开发引擎,它提供了丰富的功能和工具,让开发者可以轻松构建出高质量的游戏。在游戏开发中,声音是一个非常重要的元素,可以为游戏增添氛围和趣味性。在本文中,我们将详细介绍Cocos Cr…...

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月26日,星期日

每天一分钟,知晓天下事! 2024年5月26日 星期日 农历四月十九 1、 医保局:支持将符合条件的村卫生室纳入医保定点,方便农村居民就医。 2、 网传养老金储备严重不足?央视辟谣:这笔钱二十多年来从未动用过&a…...

IDEA快速生成类注释和方法注释的方法

1.生成类、接口、枚举、注解等文件的注释,不仅仅是class 2.生成方法注释的 可在方法上方空行输入/** 按enter键快速生成。生成的样式如下: PS:生成的返回值带一堆英文文字说明,感觉没必要 如果想生成比较全面的方法注释,如作者&…...

[集群聊天服务器]----(七)业务模块之一对一聊天、添加好友函数、好友类以及离线消息类

接着[集群聊天服务器]----(六)业务模块之用户注册、登录、退出以及客户端异常退出函数中对于业务模块的用户注册、登录、退出以及客户端异常退出函数的剖析,现在我们对点对点聊天以及添加好友的实现进行剖析。 点对点聊天 当客户端输入msgidONE_CHAT_MSG时&#x…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

Redis——Cluster配置

目录 分片 一、分片的本质与核心价值 二、分片实现方案对比 三、分片算法详解 1. ‌范围分片&#xff08;顺序分片&#xff09;‌ 2. ‌哈希分片‌ 3. ‌虚拟槽分片&#xff08;Redis Cluster 方案&#xff09;‌ 四、Redis Cluster 分片实践要点 五、经典问题解析 C…...

前端异步编程全场景解读

前端异步编程是现代Web开发的核心&#xff0c;它解决了浏览器单线程执行带来的UI阻塞问题。以下从多个维度进行深度解析&#xff1a; 一、异步编程的核心概念 JavaScript的执行环境是单线程的&#xff0c;这意味着在同一时间只能执行一个任务。为了不阻塞主线程&#xff0c;J…...

Docker 镜像上传到 AWS ECR:从构建到推送的全流程

一、在 EC2 实例中安装 Docker&#xff08;适用于 Amazon Linux 2&#xff09; 步骤 1&#xff1a;连接到 EC2 实例 ssh -i your-key.pem ec2-useryour-ec2-public-ip步骤 2&#xff1a;安装 Docker sudo yum update -y sudo amazon-linux-extras enable docker sudo yum in…...