前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux 下的 History 命令

Linux 下的 History 命令

作者头像
雪梦科技
发布2020-05-11 17:01:15
2.8K0
发布2020-05-11 17:01:15
举报
文章被收录于专栏:ITCoderITCoder

如果你需要花很多时间在命令行上,查看之前运行过的历史命令会是一个有用的特性。它能够让你日复一日的工作变得更容易,更高效。

在这篇文章中,我们将会谈论history命令。它将会允许你查看之前执行过的一系列命令列表,搜索列表,并且操作历史文件。

使用 history 命令 和 历史扩展

history是一个内建的 shell 命令。它的行为可能因为 shell 的不同而不同。我将将会介绍 Bash 中的内建history命令。

最简单的形式,当我们不带任何选项的输入history命令,它将会展示整个历史,同时显示行号。

代码语言:javascript
复制
history
代码语言:javascript
复制
...
467  git push
468  tail -f var/logs/error
469  nano +22,5 functions.sh
470  source project-env/bin/activate
471  history

当我们输入!n命令时,意思是执行历史命令列表中第 n 行的命令。并且!-n命令是执行倒数第几行的意思。在下面的例子中,我们执行467行的命令:

代码语言:javascript
复制
!467

另一个执行命令的方式是使用!word表达式。word匹配最近命令列表中以“word”开头的命令。

通常,history显示很多行输出,一个屏幕显示不下。为了一次显示一页输出,我们将结果传给翻页程序例如more或者less命令:

代码语言:javascript
复制
history | less

显示最后n行,把数字作为参数传递给命令。例如,只要查看历史列表中的最后 5 行,我们输入:

代码语言:javascript
复制
history -5

使用 updown 按键来浏览列表中的条目。当你想要找的命令展示出来时,你可以输入Enter执行这个命令。

输入!!可以执行前一个命令:

代码语言:javascript
复制
!!

当你忘记了之前使用sudo执行的命令时,这个特别有用。你不需要重新输入之前的命令:

代码语言:javascript
复制
sudo !!

-1!!一样,都是执行历史列表中的最后一个命令。!-2执行倒数第二个命令,以此类推。

^word1^word2^允许你重新执行最后执行的命令(将“word1”替换成“word2”)。如果你不小心输入sduo command,而不是sudo command,你可以重新使用正确的单词再运行一遍这个命令:

代码语言:javascript
复制
^sduo^sudo^

使用grep命令可以过滤输出结果。例如,查看所有命令中包含"nano"的,你可以这样运行:

代码语言:javascript
复制
history | grep nano
代码语言:javascript
复制
302  sudo nano /etc/resolv.conf
356  nano setup.py
413  sudo nano /etc/hosts
469  nano +22,5 functions.sh

现在,你想重新运行nano setup.py命令,只需要简单输入:

代码语言:javascript
复制
!356

还有一种搜索历史命令的方法就是输入Ctrl-R。提示如下,你可以开始搜索之前的命令了。

代码语言:javascript
复制
(reverse-i-search)`':

shell 将会显示匹配的行。移动到下一个匹配建议,请继续输入Ctrl-R

检查 Bash 手册,获取更多信息。

保留历史列表

默认情况下,当启动一个新会话时,Bash 会从.bash_history文件中读取历史命令列表。当前会话中执行的命令列表会被保存在内存中,并且当会话关闭时,保存到文件。

如果你打开了好几个 Shell 会话,仅仅最后一个关闭的会话历史会被保存。

-a 选项允许你保存当前会话历史到.bash_history文件。

代码语言:javascript
复制
history -a

-w选项将会把完整的历史列表全部写入历史文件.

代码语言:javascript
复制
history -w

清除历史

history 命令允许你清除完整的历史列表或者移除其中的一部分。

为了清除历史列表,使用-c选项

代码语言:javascript
复制
history -c

为了从历史列表中删除指定行或者指定几行,使用-d选项。

例如:为了移除 365 和 375 (包括那些行),你将输入:

代码语言:javascript
复制
history -d 365 375

如果你仅仅提供一个数字给-d选项,这个命令将会移除这一行。

当使用了一个负数时,倒数第几个命令将会被删除。

上面的命令清除了保存在内存中的历史列表,但是没有从磁盘上.bash_history文件中移除。为了在文件中移除,你需要写入历史命令列表到文件中:

代码语言:javascript
复制
history -c
history -w

修改历史行为

Bash 历史的行为可以通过几个不同的环境变量进行定义。当你要修改历史行为,在~/.bashrc或者其他任何用户登录需要加载的配置文件中.

默认情况下,Bash 只保留 500 行历史命令列表。这个HISTSIZE变量允许你修改这个值。为了将这个值修改为 10000,你可以将下面的代码添加到.bashrc文件中:

代码语言:javascript
复制
HISTSIZE=10000

HISTCONTROL接受一个冒号分隔的值来定义命令如何被保存的在历史列表中的:

  • ignorespace 以空白开头的命令不保存在历史列表中
  • ignoredups 重复的命令不保存在历史列表中
  • ignoreboth 这是一个简写,包含ignorespaceignoredups
代码语言:javascript
复制
HISTSIZE=ignoreboth

HISTTIMEFORMAT 被设置时,Bash 会在每一行预先保存命令执行时间。

例如,如果你设置:

代码语言:javascript
复制
HISTTIMEFORMAT="%F %T: "

历史命令列表将会显示成下面的格式:

代码语言:javascript
复制
413  2019-10-27 21:13:07: sudo nano /etc/hosts

结论

history命令显示之前执行的命令列表。例如,你可以使用history去查看一个你以前用过,但又记不住的长命令。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年11月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用 history 命令 和 历史扩展
  • 保留历史列表
  • 清除历史
  • 修改历史行为
  • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档