history
命令显示所有结果,但我们可以使用进行过滤以获取特定命令history | grep searchingCommand
。这真的很有帮助。
但是问题在于它还显示了那些输入错误或输入失败的命令。然后找到正确的人真是一件痛苦的事。我检查了以下链接:终端中的选择性命令历史记录?但这不是我的解决方案。
那么,有什么方法可以从历史记录中删除那些在输入的时间或更晚的时间不正确的命令?
history
命令显示所有结果,但我们可以使用进行过滤以获取特定命令history | grep searchingCommand
。这真的很有帮助。
但是问题在于它还显示了那些输入错误或输入失败的命令。然后找到正确的人真是一件痛苦的事。我检查了以下链接:终端中的选择性命令历史记录?但这不是我的解决方案。
那么,有什么方法可以从历史记录中删除那些在输入的时间或更晚的时间不正确的命令?
Answers:
我想添加另一种修改(或删除)历史记录条目的方法,这是我在使用bash时偶然发现的:
为了演示这一点,首先在bash中执行以下三个命令:
$ echo 1
1
$ echo 2
2
$ echo 3
3
现在,您可以使用箭头键或Ctrl+ p和Ctrl+ 再次选择这些命令n。
假设您要修改前两个命令。浏览历史记录直到echo 1
出现,然后将其更改为echo 1 - changed
,但是不要按ENTER键。如果您现在继续浏览历史记录,则此行将保持其修改状态,您可以移开或移回它。现在移至该行echo 2
并将其更改为echo 2 - changed
,再次不要按Enter。为了保存对这些行的更改,请选择历史记录中除这两个以外的任何命令,然后按Ctrl+ c。
当然,除了修改历史记录条目外,您也可以将其删除,这将导致该条目的空白行。要删除当前在提示符下显示的行,请按Ctrl+ e(跳到行末),然后按Ctrl+ u(从行首到光标删除文本)。
另请参阅https://unix.stackexchange.com/questions/195668/what-can-cause-an-item-to-be-deleted-from-my-bash-history/195726#195726,以获取更详细的说明技术背景。
最简单的方法:
注意事项:
这仅更改当前会话命令。如果要更改较旧的命令并保存更改,则需要在关闭终端之前运行以下命令:
history -w
ctrl+r
搜索要删除/修改的命令。2.end
移动命令并删除/修改命令。3.ctrl+n
要到下一行,然后 4ctrl+c
采用:
history -d OFFSET
删除偏移量的历史记录条目,OFFSET
甚至在将其添加到bash历史记录文件之前。要找到正确的权限OFFSET
,您只需要运行history
命令。它是从行首开始的数字,其中包含要删除的历史记录条目。
并保存对历史记录的修改,请使用:
history -w
请参阅本指南中的更多详细信息。
history -w
起见,您必须做后言以保存更改。另外,OFFSET表示要history
显示的数字。如果您要删除的行是873,请使用history -d 873
。
history -w
之后history -d
保存更改。
编辑文件~/.bash_history
并使用错别字删除一次
例如,插入以下命令:
gedit ~/.bash_history
编辑所需的内容,然后保存文件并重新启动终端。根命令是:
sudo -i
inser your password
gedit ~/.bash_history
如果要删除所有history -c
应该的技巧
句法
history history [n] history -c history -d offset history [-anrw] [filename] history -ps arg
键
-c清除历史记录列表。可以将其与其他选项组合以完全替换历史记录列表。
-d偏移量删除位置偏移处的历史记录条目。显示历史时,应指定偏移量。
-a将新的历史记录行(自当前Bash会话开始以来输入的历史记录行)添加到历史记录文件。
-n将尚未从历史文件中读取的历史行追加到当前历史列表中。这些是自当前Bash会话开始以来附加到历史文件的行。
-r读取当前历史记录文件,并将其内容附加到历史记录列表。
-w将当前历史记录写到历史记录文件中。
-p在args上执行历史记录替换,并在标准输出上显示结果,而不将结果存储在历史记录列表中。
-s args作为单个条目添加到历史记录列表的末尾。
来源:
.bash_history
?
history -c
不起作用当我关闭终端并再次打开时,历史记录不会被删除。-1你的答案
-c Clear the history list. This may be combined with the other options to replace the history list completely.
消息来源
history -w
在history -c
写更改后使用。
如果要立即从同一终端将其删除,则必须将以下内容添加到〜/ .bashrc文件中。
PROMPT_COMMAND='history -a'
并重新启动您的终端。
您可以将其添加到.bashrc文件中的任何位置。我与其他历史记录相关的内容添加如下。
通常在bash会话期间,执行的命令直到会话终止后才写入.bash_history中,PROMPT_COMMAND='history -a'
然后再输入命令,然后输入.bash_history。
现在,只要您在命令中犯了错误或错误并想要将其删除,就可以执行以下命令
sed -i '$d' ~/.bash_history
和tada它将被删除。
为了使其更简单,您可以将其别名为更简单的名称,并使用它,例如
alias rh ='sed -i '\''$d'\'' ~/.bash_history'
因此,执行rh
将从历史记录中删除最后执行的命令。
以上是临时别名,仅在会话中有效,要使其永久或持久添加
alias rh = 'sed -i '\''$d'\'' ~/.bash_history'
到.bashrc
注意
两侧不应该有任何空间 =
如果您不想使用别名,也可以执行以下操作
命名一个通用名称rh
并将其放置在/bin
目录中:
打开说一个文件rh
并粘贴以下代码,然后保存并关闭:
sed -i '$d' ~/.bash_history
使rh
可执行文件并将其放置在/bin
目录中:
chmod + x rh 须藤cp rh / bin
现在使用rh
命令从历史记录中删除最近的命令。
PROMPT_COMMAND='history -a'
的.bashrc
文件?究竟会做什么?我尝试了sed -i '$d' ~/.bash_history
它,无需编辑即可正常工作.bashrc
!但是别名问题不起作用..如果您只是阐述我的问题并使别名起作用,我将接受您的回答.. :)
.bash_history
文件中删除该条目..:P不会有任何问题..我做了自己的命令并将其放入/bin
目录。由于您的命令: sed -i "$d" ~/.bash_history
它工作正常。我接受您的回答.. :)
删除多行(例如,从1974年到1990年,使用history
命令检查):
for i in `seq 1974 1990` ; do history -d 1974 ; done
请注意,要删除的行号始终相同,因为您要不断删除该行并转到下一个。
如果您在bash中使用“ set -o vi”选项(对使用Escape键进行搜索非常有用),则可以像在“ vi”中一样搜索行并使用“ dd”删除该行。
j
或k
之后dd
才能使其实际上从历史记录中清除命令。如果我键入另一个命令,或者只是按Enter
,bash似乎假定它只是一个新命令,并且应该在历史记录中保留旧命令。有趣的是,注意正确完成后会清除命令,但不会删除-结果是空白的历史记录条目。但这足以删除我被迫在命令行中键入的密码,并且比其他答案容易得多,因此非常感谢您发布此密码!
我遇到过这样的情况,我的bash历史记录中有来自Yubikey的多余条目-大概50个左右,匹配“ ccccc .....”。理想情况下,我想要一种删除与模式匹配的条目的方法,假设您的历史记录忽略了空白,我想您可以使用sed或类似的方法。
无论如何,我很懒惰,最终使用vim,在每次比赛中都搜索“ cccc”并使用“ dd”。不到一分钟。