执行history -d 42后必须运行history -w,否则重启终端该命令会恢复;清空历史需先history -c,再删对应~/.zsh_history或~/.bash_history,并删除~/.zsh_sessions等元数据目录。

如果你在Mac终端里执行过带密码、API密钥、私有路径或账号信息的命令,这些内容会原样留在历史记录里,别人只要打开终端输history就能看到——哪怕你已退出账户或删了文件,这些痕迹仍在硬盘上躺着。
确认当前Shell类型并清空主历史文件
macOS Catalina(10.15)起默认用zsh,老系统可能还在用bash;用错命令会删错文件,白忙活。
第一步:打开终端,运行echo $SHELL,看输出是/bin/zsh还是/bin/bash。
第二步:执行history -c,清掉当前会话内存里的命令缓存——这步不做,新窗口一开,刚才的命令还会蹦出来。
第三步:根据上一步结果,只执行其中一条:
zsh用户运行rm ~/.zsh_history;
bash用户运行rm ~/.bash_history。【删错文件会导致后续history命令报错,且无法恢复】
第四步:关闭所有终端窗口(包括后台隐藏的),再新开一个终端,输入history | head -n 5,应只显示几条系统初始化命令,如cd ~或ls。
同步删除会话元数据目录
macOS会在~/.zsh_sessions或~/.bash_sessions里存每窗口的命令快照、启动时间、当前路径等——这些不删,重启终端后部分敏感命令可能自动“复活”。
运行rm -rf ~/.zsh_sessions ~/.bash_sessions。
如果提示Permission denied,别硬试:去“系统设置”→“隐私与安全性”→“完全磁盘访问权限”,把“终端”拖进去打钩,再重跑上面那条命令。
删完直接关终端重开,不用额外验证。
临时禁用历史记录(适合马上要输密钥的场景)
方法一:当前窗口立刻生效
在终端里输入unset HISTFILE,回车。之后所有命令都不会写入任何历史文件,包括刚输的密码。
方法二:让下个新窗口也跳过记录
运行echo 'export HISTFILE=/dev/null' >> ~/.zshrc(zsh)或echo 'export HISTFILE=/dev/null' >> ~/.bash_profile(bash),然后source ~/.zshrc或source ~/.bash_profile刷新。
注意:这个设置会让history命令几乎不显示内容,但不会影响你正在运行的命令本身。
精准删除某一条历史记录
当你只想抹掉第42条含密码的命令,又不想清空全部历史时用这个。
先运行history,找到目标命令前面的编号(比如显示42 curl -u admin:pass123 https://api.example.com)。
执行history -d 42,它会从内存和历史文件里同时删掉这一行。
最后补一句history -w,强制把修改写回磁盘——漏这步,重启终端后那条命令又会回来。

















