问题描述
有没有办法保存所有类型的终端命令,并在日志中查看历史记录?
最佳解决思路
这是自动完成的。 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=...
。
次佳解决思路
您可以在终端上键入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_history
代替.bash_hi
我只需要键入^hi^history^
。
第三种解决思路
只需输入:
history > print.txt
将在您当前工作的目录中创建一个名为print.txt的新文件。
第四种思路
我经常只想要那些最近的命令。要发布到我的开发说明,或者像这些堆栈交换站点…这已被证明非常有用,删除不相关的行号:
history | cut -c 8- | tail
或者,如果您喜欢它作为别名,删除行号,并立即缩进(正如代码引号降价所需)
alias lastones="history | tail | sed -e 's/^ [0-9]\{1,5\} / /gi'"