有没有办法保存我输入的所有终端命令并像日志中的历史记录一样查看它?
答案1
这是自动完成的。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
变量来增加此大小:
HISTSIZE=<number of entries, -1 for unlimited>
这不会立即生效,而只会对新启动的会话生效。要应用此功能,请重新获取文件.bashrc
:
. ~/.bashrc
HISTSIZE=...
或者在当前会话中运行。
答案2
您可以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^
。
答案3
只需输入:
history > print.txt
您当前工作目录中将创建一个名为 print.txt 的新文件。
答案4
我经常也只想要那些最近的命令。要发布到我的开发笔记或类似的 stackexchange 网站...这已被证明非常有用,可以删除不相关的行号:
history | cut -c 8- | tail
或者,如果您喜欢它作为别名,可以删除行号并立即缩进(就像代码引用 markdown 所需要的那样)
alias lastones="history | tail | sed -e 's/^ [0-9]\{1,5\} / /gi'"