如何在macOS中清除终端的命令历史记录

macOS 中的“终端” App 会跟踪您最近使用过的命令,以便您日后重复使用它们。以下是清除终端命令历史记录的方法。

当您在 macOS 的“终端”应用中键入命令并按下 Return 键时,它会记住您键入的命令并储存它们,以防您以后想要再次重复使用相同的命令。

在“终端”中,您可以按下 Mac 键盘上的向上向下箭头键来循环显示所有最近的命令。当您按下箭头键时,终端会将命令行提示符上的任何内容替换为存储的命令历史记录中的每个命令。

您可以在“终端”中向前或向后循环浏览命令历史记录,然后在任何存储的命令处按下回车键以再次运行它。

出于安全原因,您可能希望移除终端的命令历史记录,或者您可能正在使用某些技术处理一项任务,然后使用使用一组不同命令的其他技术在终端中切换到其他任务。

Shell 变体和哑终端

早期的 UNIX 计算机创建于 1970 年,使用连接到大型计算机的哑终端,用户在这些计算机上拥有分时帐户。每个用户都将使用终端连接到大型计算机,该计算机实际执行在终端中输入的命令。

哑终端的早期制造商包括 Digital Equipment Corporation、UNISYS、Wang、WYSE、Lear Siegler 等。甚至更早 – 在 1960 年代,IBM 销售了大型独立纸质终端,例如 IBM 2741,其中包括自己的桌面式支架。

Carterfone公司是最早允许哑终端连接现场远程大型计算机并通过声学耦合电话调制解调器(一种将计算机信号转换为声音的设备)运行命令的公司之一。

在 1970 年代初期,李尔·西格勒 (Lear Siegler) 发布了一系列流行的哑终端,从 1 年的 ADM-1972 开始,到后来广受欢迎的 ADM-3A。

所有这些都是在 1970 年代后期的个人电脑革命之前。如今,人们在他们的 PC 上运行 UNIX 变体操作系统,并使用内置的终端或 shell 应用程序与同一台机器上的操作系统进行通信。

57535-117330-adm3a-xl

李尔·西格勒(Lear Siegler)于1986年被华尔街投资公司收购,其部门和技术被出售给其他几家公司。到这个时候,个人电脑的热潮正在顺利进行,哑终端的流行逐渐消失。

1980 年代初推出模块化电话线插孔后,包括 Apple、Atari 和 Commodore 在内的几家家用电脑制造商都出售了自己的电话调制解调器。

WYSE后来被DELL收购,DELL仍然销售“瘦客户端”计算机,这些计算机基本上是今天哑终端的继任者。一些非常早期的 UNIX 系统使用纸质终端而不是显示器。

57535-117333-apple-modem-xl
苹果早期的直连调制解调器,用于模块化的美国电话系统。

在 1980 年代的短暂时期内,AT+T 制造并销售组合式 PC,这些 PC 既可以用作个人计算机、哑终端,也可以集成电话和传真系统。

AT+T 在 1960 年代末和 1970 年代初积极参与了贝尔实验室的 UNIX 创建工作。

57535-117331-Screenshot-2-xl
大约1978年在大型机实验室的UNIX终端用户。由 Dave Winer 根据 Creative Commons 相同方式共享许可提供。

几十年来,UNIX 操作系统(macOS 基于该操作系统)中出现了多种 shell 程序变体。

Shell 仅指命令提示符程序,它允许 UNIX 用户输入要由操作系统运行的文本命令。shell 本质上是一个命令解释器和脚本引擎,用于运行类型化命令或文件中的多个命令。

macOS 终端只是一个位于 shell 程序之上的 macOS 应用程序。

几十年来,UNIX shell 有几种变体,包括 Bourne-again shell、GNU 项目中的 Bash shell、Korn shell (ksh)、C shell (csh)、ZShell (zsh)、Fish 等。

大多数 UNIX shell 都符合 IEEE POSIX 标准 ISO/IEC/IEEE 9945:2009 Shell 和工具

POSIX是Portable Operating System Interface的首字母缩写词,是IEEE标准和商标。POSIX 旨在为跨不同平台的操作系统和应用程序 API 提供单一的兼容标准。

POSIX上有很多好书。还有一个标准的 POSIX 多任务编程库,称为 pthreads

macOS 中的 Shell

几十年来,Apple 一直使用 Bash shell 作为 macOS 的标准 shell。当 Apple 发布 macOS Catalina 时,它将默认 shell 更改为 zsh。两个外壳相似,但有一些细微的差异。

苹果选择在macOS中从Bash切换到zsh的真正原因实际上是关于许可。Bash 现在处于 GPL v3 许可证下,这与 Apple 的一些开源政策不兼容。

在大多数情况下,你可以在 Bash 中做的任何事情,你也可以在 zsh 中做。因此,对于大多数用户来说,更改不是问题。

一个主要的区别是,zsh 中的某些 shell 脚本需要每个脚本文件顶部的 shebang 行才能正常运行。shebang 线通常为 either 或 。#!/bin/bash#!bin/bash/sh

您可以在 zsh.org 上了解有关 zsh shell 的更多信息。

57535-117332-arpa-xl
在ARPANET上运行的早期大型机 – 互联网的前身。请注意右侧的纸哑终端。

使用 history 命令

zsh 包含命令,它是 GNU 历史库的一部分。history

在 macOS 终端中,要使用该命令,只需在终端中键入并按下 Return 键即可。默认情况下,该命令会打印最近键入到终端中的 16 个命令。historyhistoryhistory

控制和清除 zsh 历史记录

以前版本的 zsh 和其他 shell 提供了一个与命令一起使用的标志。该标志可用于清除 macOS 中的终端历史记录,但从 macOS Catalina 开始,该命令不再支持该标志。-chistory-c-chistory

如果您使用的是 zsh,要清除终端历史记录,请改用标志,它可以完成相同的操作。在终端中键入并按 Return 键-phistory -p

所有 shell 历史记录都会立即清除 – 没有警告。

在macOS中清除zsh历史记录的另一种方法是编辑隐藏的历史记录文件本身。

macOS 用户文件夹中的两个隐藏文件定义了 zsh 的行为方式,以及 zsh 历史记录的保存方式。这些文件分别是 .zshrc 和 .zsh_history。

在 macOS 中,文件系统中的隐藏文件和文件夹的文件名以句点 (“.”) 开头。我们之前在AppleInsider上详细介绍了如何在Finder中显示或隐藏隐藏文件。

若要开始在 Finder 中显示不可见文件,如果尚未显示,则需要在 Finder 的桌面上显示启动磁盘,方法是从 Finder 菜单栏的菜单项打开“Finder->设置”窗口中的“硬盘”。

57535-117336-finder1-xl
在Finder的“设置”窗口的“常规”选项卡中打开“硬盘”。

.zshrc 是一个配置文件或配置文件,用于定义 shell 环境变量、其他 shell 文件或 UNIX 命令程序的路径,以及将 shell 和环境变量导出到系统和其他程序。

当您在 Mac 上以用户身份登录时,系统会读取并加载 .zshrc。

.zsh_history 是一个纯文本文件,用于存储您之前在 macOS 的终端应用程序中使用的所有命令。每次在“终端”中键入命令并按下 Return 键时,该命令都会存储在 .zsh_history 中。

要清除和还原 zsh 历史记录,请先退出“终端”,然后打开.zsh_history文件,删除其内容,存储它,然后注销并重新登录 macOS 或重新启动 Mac。

如果“终端”未运行,您还可以删除.zsh_history文件本身,然后注销并重新登录或重新启动。下次运行文件时,终端将自动重新创建文件,并在命令提示符下输入命令。

使用 GNU 历史库编程

事实证明,GNU历史库(GNUHL)非常强大,并以C编程语言提供了自己的编程API。zsh 在 history 命令中所做的大部分工作都是通过调用 GNUHL 来完成的。

GNUHL 可以读取 zsh 历史记录及其存储的命令,并以编程方式将命令作为输入传递给其他新命令。

网上有许多GNU历史库编程教程。

GNUHL 的主要历史数据类型是 C 或 type 的结构struct_hist_entry

 

typedef struct _hist_entry
{
    char *line;
    char *data;
} HIST_ENTRY;

C 中的声明基于预定义的类型定义了一个新的类型名称 – 在本例中定义为与 相同。typedefHIST_ENTRYstruct _hist_entry

typedef在 C 中,您不必为每个声明的变量使用声明,从而缩短代码中的变量声明。相反,在这种情况下,您可以只使用 ,这将缩短代码。structHIST_ENTRY

type 中的每个字段都是 或 character 类型。C 中的类型用于表示文本的一个字符(将其视为字母、数字或符号的容器)。_hist_entrycharchar

变量只是一个 C 指针 – 一个包含指向某物的内存地址的变量。内存中的 C 字符串通常由指向变量数组的指针表示。char *char

C 结构允许程序员轻松地将多个变量捆绑到一个更大的分组变量中,以便以后更容易访问。C 结构中的每个成员变量都称为一个字段

因此,当您在 macOS 的终端应用程序中输入一行时,shell 会为每个命令创建一个新命令,将其存储在内存中,并将其字段写出到 .zsh_history 文件中。_hist_entry*data

下次打开“终端”时,它会重新读取历史记录文件,并使用内存中的条目数组重建历史记录列表。_hist_entry

在 C 编程中,可以使用语法定义变量数组,也可以使用指向内存中数组的指针或句柄来定义变量数组。C 中的句柄是指向内存中另一个指针的指针,由双星号表示。[]**

早期的 Mac 编程广泛使用句柄,我们不会详细介绍句柄存在的原因 – 但足以说明它允许操作系统在内存中移动变量,而无需程序员跟踪移动。

在 GNUHL 中,历史列表的句柄可以定义为指向历史条目数组开头的单个句柄。在 C 语言中:

HIST_ENTRY **the_history_list;

GNUHL 还保留了一个单一的状态结构,该结构定义了历史库在任何给定时刻的当前状态,由数据类型定义:_hist_state

typedef struct _hist_state

我们不会在这里详细介绍结构。有关更多信息,请查看 GNU 历史库编程文档。_hist_state

可以说,该结构包含历史条目数组的句柄、历史条目数组的偏移量(以字节为单位)、存储条目的数量、条目的可能插槽数以及一些标志。_hist_state

一旦有了指向结构的指针或句柄,就可以遍历历史记录条目数组并检查每个条目。_hist_state

还有一个广泛的 C API,用于操作历史记录列表,包括添加、删除和替换条目、获取状态、获取有关历史记录列表的信息、导航列表和搜索。

还有用于操作历史记录文件本身的 API。使用普通的 C 编程,读取、搜索和修改历史记录相当容易。GNUHL 编程文档提供了几个 C 语言示例。

UNIX 和终端的历史令人着迷 – macOS 终端是在 Mac 上使用 UNIX 命令的强大方式。 使用“终端”的历史记录,您可以快速重复使用复杂的“终端”命令,而不必每次都重新键入它们。

未经允许不得转载:表盘吧 » 如何在macOS中清除终端的命令历史记录