如何从 Linux/Unix Bash shell 的历史记录中删除单个命令
我在 Ubuntu bash 终端应用程序上工作,并在云平台的 RHEL 服务器上远程工作。我输入了错误且危险的命令,我不想再记住它了。如何摆脱历史文件中的危险命令?如何从 bash 历史文件中删除单个命令?
您可以使用history 命令清除所有历史记录或选定的命令行。在本教程中,您将学习如何从 Linux、MacOS 和类 Unix 系统中的 bash 历史记录中清除特定命令。
默认情况下,历史记录存储在~/.bash_history文件中。但是,名为 $HISTFILE 的 bash 变量定义了保存命令历史记录的文件的名称。如果未设置,则退出 shell 时不会保存命令历史记录。使用 printf 命令/echo 命令显示当前设置:
您可以使用history 命令清除所有历史记录或选定的命令行。在本教程中,您将学习如何从 Linux、MacOS 和类 Unix 系统中的 bash 历史记录中清除特定命令。
教程要求 | |
---|---|
要求 | 猛击 |
Root 权限 | 不 |
难度等级 | 简单的 |
类别 | Linux shell 脚本 |
先决条件 | Linux 或 Unix 终端 |
操作系统兼容性 | BSD • Linux • macOS • Unix |
预计阅读时间 | 3 分钟 |
如何查看带行号的历史记录?
只需输入历史命令:
$ history
图 01:Linux、OS X 和 Unix 上带有行号的 Bash 历史命令
echo "$HISTFILE" printf "Bash history file - %s\n" $HISTFILE
如何从 Linux 历史记录中删除单个命令编号 1013
## Delete the bash history entry at offset OFFSET ## history -d offset history -d number history -d 1013
验证一下:
$ history
删除 OFFSET 位置处的 bash 历史记录条目。负偏移量从历史记录列表的末尾往回计数。
从历史记录中删除一行
假设您想从 Bash 历史记录中删除名为“nmcli connection down br0”的命令,那么请结合使用grep 命令和 history 命令,如下所示:
history | grep 'nmcli connection down br0' line=$(history | grep 'nmcli connection down br0' | awk '{ print $1 }') history -d $line
如果您有多个“nmcli connection down br0”并且想要删除所有这些行,该怎么办?别担心。尝试如下bash for 循环:
for i in $(history | grep 'nmcli connection down br0' | grep -v grep | awk '{ print $1 }') do history -d "$i" done
我如何删除所有历史记录?
想要删除所有 bash 历史记录?尝试以下语法:
$ history -c
将上述命令添加到您的 ~/.bash_logout 文件中,以便在您注销时进行清理:
$ cat /dev/null > ~/.bash_history && history -c
传递-c给 history 命令以通过删除所有条目 ${HISTFILE} 来清除历史记录列表。
提示:像专业人士一样控制 bash 历史记录
首先,您可以通过在 ~/.bashrc 文件中附加以下配置选项来增加 bash 历史记录的大小:
## Set the maximum number of lines contained in the history file ## HISTFILESIZE=5000000 ## Set the number of commands to remember in the command history ## HISTSIZE=10000 ## Append it ## shopt -s histappend ###### # Controlling how commands are saved on the history file ## # ignoreboth means: ## # a) Command which begin with a space character are not saved in the history list ## # b) Command matching the previous history entry to not be saved (avoid duplicate commands) ## ###### HISTCONTROL=ignoreboth
保存并关闭文件。
在哪里可以找到有关历史命令的更多信息?
通过键入以下 man 命令来阅读 bash 手册页:
$ man bash
另一个选择是键入以下帮助命令:
$ help history
这是我在Bash 版本5.0.17 上看到的内容:
history: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...] Display or manipulate the history list. Display the history list with line numbers, prefixing each modified entry with a '*'. An argument of N lists only the last N entries. Options: -c clear the history list by deleting all of the entries -d offset delete the history entry at offset OFFSET. -a append history lines from this session to the history file -n read all history lines not already read from the history file -r read the history file and append the contents to the history list -w write the current history to the history file and append them to the history list -p perform history expansion on each ARG and display the result without storing it in the history list -s append the ARGs to the history list as a single entry If FILENAME is given, it is used as the history file. Otherwise, if $HISTFILE has a value, that is used, else ~/.bash_history. If the $HISTTIMEFORMAT variable is set and not null, its value is used as a format string for strftime(3) to print the time stamp associated with each displayed history entry. No time stamps are printed otherwise. Exit Status: Returns success unless an invalid option is given or an error occurs.
结论
在本快速教程中,您学习了如何从在 Linux、macOS、*BSD 或类 Unix 系统上运行的 bash 历史记录中删除单个命令。我建议阅读 bash 手册页以获取更多信息。
本篇文章是Bash HISTORY 教程系列中的第 2 篇(共5 篇)。继续阅读本系列的其他文章:
- 如何在 Linux 中禁用 bash shell 历史记录
- 如何从 Linux/Unix Bash shell 的历史记录中删除单个命令
- 在 Ubuntu Linux 中清除 Shell 历史记录
- 清除 Linux / UNIX BASH Shell 命令行缓存 / 历史记录
- Bash History:显示每个命令的日期和时间