在Linux上删除last n命令的历史记录
在Linux中,last命令是以前执行的命令的记录。命令历史保存在一个叫做.bash_history的文件中,它位于每个用户的主目录中。历史命令可以用来查看命令历史,历史命令还可以和其他命令一起使用,比如grep,来搜索历史中的特定命令。历史记录中的命令被分配了一个编号,可以通过在前缀上感叹号(!)来快速执行前一个命令。例如,输入”!123 “将执行历史记录中数字为123的命令。
也有几个选项可以改变命令历史的行为
- history命令可以和-c选项一起使用,以清除命令历史。
-
HISTFILE环境变量可以用来指定一个不同的文件来存储命令历史。
-
HISTSIZE和HISTFILESIZE环境变量可以用来分别指定存储在历史中的最大命令数和历史文件的最大尺寸。
-
HISTIGNORE变量可以用来忽略历史中的特定命令或命令模式。
-
set -o history可以为默认禁用的shell启用命令历史。
.bash_history中history和Commands的区别
历史命令是Bash(大多数Linux系统的默认shell)中的一个内置命令,它允许你查看在当前shell会话中已经执行的命令。当你运行history命令时,它将显示一个已经执行的命令列表,最近的命令在列表的顶部。每条命令都有一个编号,可以通过在前缀上感叹号(!)来快速执行前一条命令。例如,键入”!123 “将执行历史上数字为123的命令。
另一方面,.bash_history文件是一个纯文本文件,用于存储特定用户的命令历史。该文件位于用户的主目录中,每次在shell中执行命令时都会更新。.bash_history文件的内容可以用文本编辑器查看,命令可以通过复制和粘贴到shell中来执行。
从.bash_history中删除最后n行
你可以使用sed命令删除.bash_history文件中的最后n行,这是一个编辑文本文件的命令行工具。从.bash_history文件中删除最后n行的基本语法是 –
sed -i -e :a -e '$d;N;2,N;ba' -e 'P;D' ~/.bash_history
这个命令将删除文件的最后一行。
sed -i -e :a -e "1,${n}d" ~/.bash_history
这里,n是你想从.bash_history文件中删除的最后一行的数量。该命令将删除.bash_history文件中的最后n行。
请记住,这个命令将直接改变.bash_history文件,而且改变将立即生效。另外,这些改变是不可逆的,所以如果你对操作不确定,在进行任何修改之前,对文件进行备份是一个好的做法。
值得一提的是,这将只从历史文件中删除命令,而不是从当前会话历史中删除,所以你仍然可以使用 “历史 “命令来查看它们,但它们不会被保存在未来的会话中。
删除历史上的最后n行
要删除当前shell会话历史记录中的最后n行,可以使用带有-d选项的history命令,后面跟上你想删除的命令的行号。
history -d (((history | tail -n1 | awk '{print 1}')-3))(((history | tail -n1 | awk '{print1}')-1))
这条命令将删除当前历史中最后的3条命令,包括用于获得最后命令号的’history’命令和用于提取该命令的awk命令。
你也可以通过指定开始和结束的行号来删除一系列的命令。例如,要删除第10至15条命令,可以使用下面的命令–
history -d 10 15
请记住,这只会从当前会话历史中删除命令,不会影响.bash_history文件或任何其他会话历史。另外,这些改变是不可逆的,所以如果你对操作不确定,在做任何修改之前,对历史进行备份是一个好的做法。
Bash第5版以来的历史变化
2019年1月发布的Bash第5版中的历史功能,与之前的版本相比,引入了一些变化和改进。一些最显著的变化包括–
- 时间戳 – Bash 5现在在命令历史中包含了时间戳,这使得你可以看到每条命令的执行时间。这个功能可以通过将HISTTIMEFORMAT变量设置为一个指定时间戳格式的值来启用。
-
附加到历史文件 – 在以前的Bash版本中, 历史文件在每次执行新的命令时都会被覆盖掉.在Bash 5中,历史文件现在被附加到了,这意味着以前的历史文件不会丢失。
-
Histignore – 一个新的变量,HISTIGNORE,允许你忽略特定的命令或命令模式被添加到历史文件。
-
Largefile – Bash 5现在支持大的历史文件,允许历史文件的增长超过以前版本的32,768条命令限制。
-
增量搜索 – Bash 5包括历史记录的增量搜索功能,它允许你通过输入部分命令并按向上的箭头来搜索命令。
HISTSIZE和HISTFILESIZE现在可以有一个无限的值,意味着对存储在历史中的命令数量和历史文件的最大尺寸分别没有限制。
总的来说,这些新功能使管理和搜索命令历史变得更加容易,并且使处理长的历史文件更加方便,这在你必须处理持续时间长的会话时特别有帮助。
结论
Linux中的历史功能是一个强大的工具,它允许你轻松地查看和执行以前的命令,以及在需要时从历史中删除特定的命令。.bash_history文件存储了一个特定用户在多个shell会话中的命令历史,它可以用sed等命令行工具进行编辑。通过history命令可以查看当前shell会话中已经执行的命令,并从当前会话历史中删除特定的命令。