2025-05-12
服务器相关
00
请注意,本文编写于 72 天前,最后修改于 72 天前,其中某些信息可能已经过时。

目录

一、导出历史命令记录
1 直接导出到文件
2 指定历史记录数量
3 查看并导出所有历史记录(包括时间戳)
4 从~/.bash_history文件导出
5 导出其他用户的历史记录
6 使用script命令记录会话
注意事项
二、清除历史命令记录
1 清除当前会话的历史记录
1.1 清除内存中的历史记录(临时生效)
1.2 清除并立即生效(推荐)
2 彻底删除历史记录文件
2.1 删除.bash_history文件
2.2 防止记录新命令(临时禁用历史记录)
3 选择性删除某条历史记录
3.1 使用history -d删除指定行
3.2 删除包含敏感关键词的命令
4 永久禁用历史记录(不推荐)
5 其他安全措施
5.1 退出前自动清除历史记录
5.2 避免记录敏感命令

一、导出历史命令记录

1 直接导出到文件

bash
history > history_commands.txt

这将把当前用户的命令历史记录导出到history_commands.txt文件中,导出的文件默认保存在当前工作目录(即运行该命令时所在的目录)。

2 指定历史记录数量

bash
# 导出最近的 50 条命令 history 50 > history_last_50_commands.txt

3 查看并导出所有历史记录(包括时间戳)

默认情况下,history不显示命令执行的时间,但你可以修改HISTTIMEFORMAT变量来显示时间:

bash
HISTTIMEFORMAT="%F %T " # 设置时间格式(年-月-日 时:分:秒) history > history_with_timestamp.txt

或者直接运行:

bash
history | awk '{$1=""; print strftime("%Y-%m-%d %H:%M:%S"), $0}' > history_with_timestamp.txt

4 从~/.bash_history文件导出

Bash 的历史命令默认保存在 ~/.bash_history 文件中,可以直接复制:

bash
cp ~/.bash_history history_backup.txt

或者:

bash
cat ~/.bash_history > history_backup.txt

5 导出其他用户的历史记录

如果是 root 用户,可以查看其他用户的历史记录:

bash
sudo cat /home/username/.bash_history > other_user_history.txt

(替换username为目标用户名)

6 使用script命令记录会话

如果你想实时记录所有终端输入的命令(包括输出),可以使用script

bash
script -a terminal_session.log

之后所有操作都会被记录到terminal_session.log中,按Ctrl+D退出记录。

注意事项

  1. 默认情况下,history只显示当前会话的命令,而~/.bash_history存储的是之前会话的历史记录。
  2. 如果历史记录被清除(如history -c),可能无法恢复,除非提前备份。
  3. zsh中,历史记录默认存储在~/.zsh_history,导出方式类似:

二、清除历史命令记录

1 清除当前会话的历史记录

1.1 清除内存中的历史记录(临时生效)

bash
history -c

仅清除当前终端会话的历史记录,重新登录后会恢复(因为.bash_history文件未删除)。

1.2 清除并立即生效(推荐)

bash
history -c && history -w
  • history -c:清除内存中的历史记录。
  • history -w:将空历史记录写入~/.bash_history文件,使其永久生效。

2 彻底删除历史记录文件

2.1 删除.bash_history文件

bash
rm ~/.bash_history

或清空文件内容:

bash
> ~/.bash_history

这会彻底删除所有历史命令记录,新记录会在新会话中重新生成。

2.2 防止记录新命令(临时禁用历史记录)

bash
unset HISTFILE

bash
export HISTFILE=/dev/null

如此当前会话的命令不会被保存到历史记录。

3 选择性删除某条历史记录

3.1 使用history -d删除指定行

bash
# 查看历史记录 history # 找到要删除的命令行号(如 10),执行指令删除指定行 history -d 10

仅删除单条记录,不影响其他历史命令。

3.2 删除包含敏感关键词的命令

bash
# 查找包含关键词的命令 history | grep "keyword" # 删除指定行 history -d <行号>

或批量删除:

bash
for i in $(history | grep "keyword" | awk '{print $1}'); do history -d $i; done

4 永久禁用历史记录(不推荐)

如果想完全禁用 Bash 历史记录,可以修改~/.bashrc

bash
echo "unset HISTFILE" >> ~/.bashrc source ~/.bashrc

或设置 HISTSIZE=0:

bash
echo "HISTSIZE=0" >> ~/.bashrc source ~/.bashrc

这样新命令都不会被记录。

5 其他安全措施

5.1 退出前自动清除历史记录

~/.bash_logout中添加:

bash
history -c history -w

如此每次退出终端时都会自动清除历史记录。

5.2 避免记录敏感命令

在命令前加空格(需HISTCONTROL=ignorespace已设置):

bash
echo "这条命令不会被记录"

或临时禁用记录:

bash
set +o history <执行敏感命令> set -o history

本文作者:哈希喵

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!