history
的数据库中删除某行?#1 楼
您需要注销并重新登录或运行history -a
,以便将当前历史记录提交到磁盘。然后只需编辑文件
~/.bash_history
。#2 楼
您可以通过以下两个步骤使用命令行从历史记录文件中删除:键入
history -d <line_number>
会从内存中的历史记录中删除指定的行。内存历史记录到history -w
文件。这两个步骤一起从内存历史记录和.bash_history文件中永久删除该行。
评论
如何从历史记录中删除最后一个历史记录-w?
– Midhun KM
2015年3月5日,9:01
@KrIsHnA手动编辑〜/ .bash_history
–亚历山大·米肖夫(Alexander Myshov)
15年5月23日在6:51
或者在它前面添加一个空格以防止添加它,如@tao的答案
–马克
15年8月18日在8:28
要查找
– AvL
17年9月18日在15:23
如何删除多行(特定)(按ID)?
– Pathros
18年6月19日在17:38
#3 楼
为了避免首先将命令添加到历史记录中,请确保环境变量HISTCONTROL
在其冒号分隔的值中包含值ignorespace
,例如(例如,添加到.bashrc
): $ export HISTCONTROL=ignorespace
这将防止将任何带有前导空格的命令添加到历史记录中。然后,您可以通过运行
$ history -c -w
^-- additional space character
彻底清除历史记录
#4 楼
首先,如果您要发出的命令是敏感的,不安全的,或者您只是不需要它使您的历史记录变得混乱,那么最好/最快地只是阻止它首先输入历史记录。确保$HISTCONTROL
包含ignorespace
: br /> 如果您不小心在历史记录中添加了不需要的命令,而您的bash会话仍处于打开状态,则该命令尚未触及磁盘。要删除历史记录中的前一个命令,请发出:
(bash)$ echo $HISTCONTROL
ignoredups:ignorespace
注意前导空格;此命令需要
ignorespace
,否则将自行删除!如果要删除最后几个命令,请找到最后一个和第一个历史记录编号: />
,在这种情况下为602和599。然后发出:
如果您不希望当前会话中的任何历史记录进入磁盘,请使用以下命令退出:敏感的历史记录项将写入磁盘以提高安全性,因为从理论上讲,从非易失性介质中删除的数据仍然可以恢复。
如果要删除的命令来自在上一个会话中,它们将在退出时被附加到
ignorespace
上。使用上述命令操作历史记录仍将仅在退出时将剩余的新项目附加到$HISTFILE
。要以当前会话的整个历史记录视图覆盖$HISTFILE
,请立即发出:使用$HISTFILE
命令的历史记录,然后发出history -d
,是使用文本编辑器编辑history -w
。评论
“使用上面的命令来操作历史记录,仍然只会在退出时将其余的新项追加到$ HISTFILE中。”实际上,这并非完全正确。似乎只追加了从原始历史记录长度中“伸出”的其余新项目。例如。如果我删除了5个原始项目并添加了15个新项目,那么仅会附加最后10个新项目,而我希望所有15个新项目都会被添加。我认为这是一个错误,因为我看不到这是多么理想的功能。
–詹姆斯·海格(James Haigh)
2013年6月19日15:59
我猜bash记录了原始长度。在会话关闭时,它可能会附加数量大于此值的项目。如果每次删除数量小于或等于此值的项目时此值都会减小,则它将按预期工作。 ;-)
–詹姆斯·海格(James Haigh)
2013年6月19日16:06
#5 楼
几种技术:防止敏感信息存储在历史记录文件中
如果您在命令行上输入了一些密码,然后意识到所有命令都已记录下来,可能之一:
不保存历史记录而直接退出当前会话:
kill -9 $$
这将删除所有当前历史记录。
在打开的bash会话中键入↑(向上箭头),直到显示敏感信息,然后使用Ctrl + W等行编辑键删除敏感信息,然后使用↓(向下箭头)直到提示新的空行,然后再键入Enter。它,但不是全部历史记录:
一个简单的
sed
命令就可以完成这项工作:创建另一个包含搜索模式的历史记录行(敏感信息),您正在尝试删除。因此您可以:sed -e '/SeNsItIvE InFo/d' -i .bash_history
这将在终端输入的情况下运行
head -n1
。您的终端似乎已挂起(提示);
只需键入要从文件中删除的信息即可。
这是一个让您输入命令(一部分)而无需在命令行中实际键入信息的技巧,
,因此它不适合包含在历史记录中。 :如果您的敏感信息模式包含斜杠,则必须用反斜杠将其转义,或者更改
sed
命令以使用此语法,以指定一个不出现在模式:
sed -e "/$(head -n1)/d" -i .bash_history
另一种方法是仅删除敏感信息,但保留包含该信息的命令。为此,您可以简单地将敏感信息替换为您选择的替代文本:
sed -e "\|$(head -n1)|d" -i .bash_history
从特定树中的任何文件中删除敏感信息。 >最后,确保不会保留在另一个被遗忘的文件中:
sed -e "s/$(head -n1)/Santa Claus/g" -i .bash_history.
将列出所有相关文件。 br />
将替换以
.bash_history
为根的目录树中所有文件中所有敏感信息的出现。名称中包含换行符的文件。评论
结合相关答案中的技巧,应该有可能删除SeNsItIvE InFo和使用sed -e'/ SeNsItIvE InFo / d'-i .bash_history之类的sed命令在同一行进行删除。历史-d $(((HISTCMD-1))
– S0AndS0
19年11月2日在4:25
#6 楼
通过按↑(向上箭头)找到要删除的行,直到它出现,然后按Ctrl + U。那应该删除该行。如果使用
history
命令,则可以看到该行已被星号替换。评论
实际上,我认为您必须将光标向上移至该行,按Ctrl + U,然后向上或向下光标至另一行(可能在列表底部为空白)。另外,严格来说,该行还没有被星号代替。而是,该命令已被删除,并且历史记录号后面带有*。
– G-Man说“恢复莫妮卡”
2015年4月1日于16:47
借助Ctrl + R(反向增量历史记录搜索),此功能将变得更加强大,例如[结束],Ctrl + U
–sehe
2015年6月15日12:13
#7 楼
如果需要同时删除多行,我通常使用以下命令:history | grep <string> | cut -d ' ' -f 3 | awk '{print "history -d " }'
如果需要删除最后一条命令,可以使用:
history -d $((HISTCMD-2))
评论
这看起来像是可行的,但是历史| grep
–布鲁克·亨斯利(Brock Hensley)
13年4月19日在0:09
删除第一行后,这将删除错误的历史记录行!
–米克
2013年12月20日下午14:51
但幸运的是,它仅输出错误的删除命令。下面将显示正确的删除命令: grep XYZ | grep -v grep | TAC | awk'{print“ history -d”,$ 1}'
– mivk
2013年12月20日15:17
#8 楼
如果您需要从历史记录中删除一系列行,则以下bash函数可以为您节省一些时间:要立即使用该功能,您需要运行的shell($HOME/.bashrc
)再次读取该文件。然后删除例如历史记录中的命令200-210:function histdel() {
[ $# -eq 1 ] && history -d "" && history -w
if [ $# -eq 2 -a "" -le "" ]; then
for n in `seq "" ""`; do
history -d "$n"
done
history -w
fi
}
(注意:如果您从bash历史记录中删除一系列命令,则此问题是搜索结果中排名最高的一个。尽管以上内容不只是问题的要问,但对某些读者可能有用。
评论
for语句的替代形式:$ {seq“ $ 2”“ $ 1”)中的n在某些方面在样式上是首选,如果seq不起作用,则尝试(((n =“ $ 2”; n> =“ $ 1 “; n--))。
–斯科特
13年13月13日在18:11
#9 楼
history | sed -i 59d
59是行号。没有比这更甜的东西了:)
#10 楼
只需尝试一下,$ history
,这将显示历史记录的ID和命令,例如
。
。
211 ls
212 javac Welcome.java
213 java welcome
。
。
使用,
$ history -d 211
这里211是历史记录的ID。现在使用
$ history
。
。
。
211 javac Welcome.java
212 java welcome
。
。
#11 楼
我知道问和回答这个问题已经有很长时间了,但是我将向您展示清除历史文件并同时注销的方法。我运行:
history -w && nano "${HISTFILE}" && history -c && exit
它的作用很简单: >
history -w
:请允许我编辑"${HISTFILE}"
。您可以使用sed脚本或任何您想清理的nano "${HISTFILE}"
。 > "${HISTFILE}"
:注销并附加缓存的历史记录...,但是为空;)执行该命令后,将使用干净的历史记录文件注销。登录以查看您的历史记录;)
希望对您有所帮助。
#12 楼
您还可以直接编辑历史记录文件,例如,如果您在bash shell中,请编辑nano .bash_history
?
评论
如果设置了HISTFILE环境变量,则历史记录文件不是〜/ .bash_history,而是$ {HISTFILE}。
– Karolos
13年4月3日在22:34
退出外壳程序时,会将条目写入历史文件。因此,输入要删除的命令后,您需要注销并重新登录,或使用'history -d xxxx'将其从当前Shell会话中删除。
–有害
2014年1月24日,0:19
但是如何删除历史文件的记录呢?
– chiliNUT
14年7月23日在19:54
@chiliNUT:只需使用空格启动命令(例如vim〜/ .bash_history);以空格开头的命令通常不会被记录(请参阅$ HISTCONTROL)。
– Cyrus
14年7月23日在20:34
我认为发行中的情况并非如此,但总的来说这是有道理的
– chiliNUT
2014年7月23日在22:29