查看在终端中运行的命令的历史记录


75

有没有办法保存我所有键入的终端命令,并像在日志中的历史记录一样查看它?

Answers:


92

这是自动完成的。Bash将命令存储在中~/.bash_history。如果要查看历史记录,请使用以下任一方法打印此文件的输出

cat ~/.bash_history
less ~/.bash_history
...any other pager or output command...

或者,您可以使用bash的内置命令:

history

要清除历史记录,请删除文件并清除临时历史记录:

rm ~/.bash_history && history -c

历史记录大小默认为500个命令。但是,您可以通过在您的行中添加以下行来增加它~./bashrc

HISTSIZE=<number of entries, -1 for unlimited>

这不会立即生效,而只会对新启动的会话生效。要应用此资源,请提供.bashrc文件的资源:

. ~/.bashrc

HISTSIZE=...在您当前的会话中运行。


1
默认情况下,它仅保留最新的500条命令。您可以更改要保留的号码,但只需意外地使用默认设置启动一次,所有旧的历史记录都将消失。
卡巴斯德(Kasperd)

这不是为我工作在Ubuntu 16
南摹VU

31

您可以history在终端上键入以查看所有先前执行的命令。


您可以将输出截断为某些行(其中5是行数):

history 5

如果您只想查看包含字符串的命令(即mv),则可以执行以下操作:

history | grep mv

您可以通过键入!后跟条目号来调用命令。

假设我有这样的历史:

1 ls -la
2 mkdir foo
3 mv bar.txt foo
  • 要运行mkdir foo,可以键入!2
  • 要运行最后一个命令,可以使用!-1!!
  • 要运行倒数第二个,您可以使用 !-2

如果您运行的命令由于需要root特权而失败touch /etc/foo,那么您可以使用sudo !!该命令以root用户身份运行。


  • 如果键入,!man您将执行最后一个以man
  • 如果键入!?man?,它将执行包含的最后一个命令man(不必在行开头)

如果命令中有错别字,可以用这种方法解决。假设我输入cat .bash_hi,要替换为.bash_hi.bash_history我只需要输入即可^hi^history^


资料来源: https : //www.digitalocean.com/community/tutorials/how-to-use-bash-history-commands-and-expansions-on-a-linux-vps


2
您也可以在输入时按Ctrl-R在主机名中执行搜索。
Mhmd

history在Ubuntu 16上为我工作。谢谢,应该被接受!
Nam G VU

9

只需输入:

history > print.txt

将在您当前的工作目录中创建一个名为print.txt的新文件。


3
在1000
Antoine

3

我经常也只需要这些最近的命令。要发布到我的开发说明或此类的stackexchange网站上,这已被证明非常有用,可以删除无关的行号:

history | cut -c 8- | tail

或者,如果您希望将其用作别名,则删除行号并立即缩进(就像代码引号减价所需要的那样)

alias lastones="history | tail | sed -e 's/^ [0-9]\{1,5\}  /    /gi'"

1
muru

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.