Linux history 不记录未执行命令或自动过滤密码,需在输入阶段阻断:加空格(配HISTCONTROL)、禁用HISTFILE、用配置文件/交互式输密码;时间戳通过HISTTIMEFORMAT配置,仅对启用后命令生效。

Linux 中的 history 命令本身不会记录命令行中已输入但未执行的字符,也不会自动过滤密码类敏感内容——它只保存你按回车后成功执行(或仅输入未执行但被缓冲)的完整命令行。因此,“隐藏密码输入”不是 history 的功能,而是需要从**输入阶段阻断记录源头**;而“添加时间戳”则是可配置的增强型显示选项。
不让密码出现在历史记录里
关键不是事后删除,而是让含密码的命令根本进不了 history 缓冲区:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 在命令前加一个空格(需提前设置
HISTCONTROL=ignorespace或ignoreboth):ls -l(开头有空格)→ 不会被记录 - 临时禁用当前会话的历史记录:
set +o histexpand或直接unset HISTFILE,再执行带密码的命令(如mysql -u root -p) - 避免在命令行明文写密码:改用配置文件(如
~/.my.cnf)、环境变量或交互式输入(如ssh user@host自动弹出密码提示) - 执行完敏感操作后立即清空本次会话缓存:
history -c,再退出前删掉历史文件条目:history -d $(history | tail -n1 | awk '{print $1}')
为 history 添加时间戳显示
默认 history 只显示序号和命令,加时间戳需配置环境变量 HISTTIMEFORMAT:
- 临时生效(当前终端有效):
HISTTIMEFORMAT="%F %T " history - 永久生效:把这行写入 shell 配置文件:
echo 'HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "' >> ~/.bashrc && source ~/.bashrc - 格式说明:
%F是年-月-日,%T是时:分:秒;中间空格不能省,否则时间与命令会粘连 - 注意:时间戳只对开启该设置后执行的命令生效,之前的历史记录仍无时间信息
更稳妥的敏感操作习惯
光靠 history 设置无法真正“隐藏”行为痕迹,还需配合系统级控制:
- 登录即重置历史目标:
export HISTFILE=/dev/null; export HISTSIZE=0 - 避免使用
sudo su后执行带密码命令,改用sudo -i或直接sudo command - Vim、MySQL 客户端等子程序也有独立历史(如
~/.viminfo、~/.mysql_history),需单独清理或禁用 - 管理员可通过
last、auth.log、auditd等查登录与提权行为,history 只是其中一环

















