Linux命令学习(三)

前言

接上文,本文接着来学习Linux中常用的命令,本文所学习的命令包含:history命令。

1. history命令

history命令用于显示历史记录和执行过的命令,它会将终端上执行过的所有命令存储到 .bash_history 文件中,来帮助我们查找用户之前执行过的命令。不过由于是保存到内存中的,历史命令仅能存储1000条历史命令,该数量是由环境变量HISTSIZE进行控制的。

history(选项)(参数)

选项:
-c:清空当前历史命令;
-a:将历史命令缓冲区中命令写入历史命令文件中;
-r:将历史命令文件中的命令读入当前历史命令缓冲区;
-w:将当前历史命令缓冲区命令写入历史命令文件中。

参数:
n:打印最近的n条历史命令。

另外,还可以通过!n来执行第n条命令,通过!xxx来执行最后一条 xxx 开头的命令。接下来我们来看一些实例。

1.1 快速重复执行上一条命令

一般情况下,有 4 种方法可以重复执行上一条命令:

  • 使用上方向键,并回车执行;
  • 按 !! 并回车执行;
  • 输入 !-1 并回车执行;
  • 按 Ctrl+p 并回车执行;
[email protected]:/test/logs$ !!
[email protected]:/test/logs$ ls
1.2 使用 HISTTIMEFORMAT 显示时间戳

默认情况下,执行history命令后,只会显示已执行命令的序号和命令本身,如果想查看命令历史的时间戳,可以通过执行:

[email protected]:/test/logs$ export HISTTIMEFORMAT='%F %T '

有关展示时间戳这块,这篇文章已经描述的特别清晰了:让 history 命令显示日期和时间 - linux.cn,大家直接去这看就可以了,这里就不多说了。

1.3 使用history列出最近使用的10条历史命令
[email protected]:/test/logs$ history 10
 6414  ls
 6415  cd /test/logs/
 6416  ls
 6417  history --help
 6418  history -help
 6419  man history
 6420  history
 6421  man history
 6422  ls -lh
 6423  history 10
1.4 从历史命令中执行一个指定的命令

可以通过!n来实现:

[email protected]:/test/logs$ !6429
[email protected]:/test/logs$ ls
test1.logs  test   test2.log   test

同样可以通过!xxx来执行以 xxx 开头的命令:

[email protected]:/test/logs$ !his
[email protected]:/test/logs$ history
1.5 命令替换

我们可以使用!!:$或者!$为当前的命令获得上一条命令的参数:

[email protected]:/testlogs$ ls common.log
common.log
[email protected]:/testlogs$ vi !!:$
[email protected]:/testlogs$ vi common.log
[email protected]:/testlogs$ ls common.log
common.log
[email protected]:/testlogs$ vi !$
[email protected]:/testlogs$ vi common.log

另外,还可以使用!^ 从上一条命令获得第一项参数:

[email protected]:/testlogs$ ls common.log
common.log
[email protected]:/testlogs$ vi !^
[email protected]:/testlogs$ vi common.log

并且,我们还可以使用!xxx:n的形式来从历史命令中搜索以 xxx 开头的命令,并获取它的某一项参数。我们使用 !cp:2 来获取以cp开头的命令,并获取它的第二项参数:

[email protected]:/test/logs$ cp common.log common.log.bak
[email protected]:/test/logs$ ls -l !cp:2
[email protected]:/test/logs$ ls -l common.log.bak
-rw-r--r-- 1 deploy deploy 11850 Jun 16 11:04 common.log.bak
[email protected]:/test/logs$ rm -rf common.log.bak

[email protected]:/test/logs$ cp common.log common.log.bak
[email protected]:/test/logs$ ls -l !cp:$
[email protected]:/test/logs$ ls -l common.log.bak
-rw-r--r-- 1 deploy deploy 11850 Jun 16 11:05 common.log.bak

其中,!cp:$表示获取以cp开头的命令的最后一个参数。

1.6 使用 ctrl + r 进行搜索

该快捷键可以让我们对命令历史进行搜索,对于想要重复执行某个命令的时候非常有用。当找到命令后,通常再按回车键就可以执行该命令。如果想对找到的命令进行调整后再执行,则可以按一下左或右方向键:

[email protected]:~$ history 5
 6455  ls
 6456  history 5
 6457  history | tail -5
 6458  export HISTCONTROL=ignoredups
 6459  history
[email protected]:~$
(reverse-i-search)`':
(reverse-i-search)`history ': history | tail -5
[email protected]:~$ history | tail -5
 6456  history 5
 6457  history | tail -5
 6458  export HISTCONTROL=ignoredups
 6459  history
 6460  history | tail -5

通过输入 ctrl + r,将会进入搜索模式:(reverse-i-search)':`,然后我们进行相应的搜索即可,搜索完成回车即可执行。

1.7 history相关设置

首先,我们可以去/etc/profile中去搜索 HISSIZE ,来看下history保存的数量。

1)使用 HISTSIZE 控制历史命令记录的总行数
如果我们要修改history控制的总行数,可以将下面两行内容追加到 .bash_profile 文件并重新登录 bash shell,命令历史的记录数将变成 450 条:

# vi ~/.bash_profile
HISTSIZE=450
HISTFILESIZE=450

2)使用 HISTFILE 更改历史文件名称
默认情况下,命令历史存储在 ~/.bash_history 文件中。我们可以添加下列内容到 .bash_profile 文件并重新登录 bash shell,这时候将使用 .commandline_warrior 来存储命令历史:

# vi ~/.bash_profile
HISTFILE=/root/.commandline_warrior

3)使用 HISTCONTROL 从命令历史中删除连续重复的记录
我们可以将 HISTCONTROL 设置为 ignoredups

[email protected]:/test/logs$ export HISTCONTROL=ignoredups

4)使用 HISTCONTROL 清除整个命令历史中的重复条目
上例中的 ignoredups 只能剔除连续的重复条目。要清除整个命令历史中的重复条目,可以将 HISTCONTROL 设置成 erasedups

[email protected]:/test/logs$ export HISTCONTROL=erasedups

5)使用 HISTCONTROL 强制 history 不记住特定的命令
HISTCONTROL 设置为 ignorespace,并在不想被记住的命令前面输入一个空格:

[email protected]:/test/logs$ export HISTCONTROL=ignorespace
[email protected]:/test/logs$  service httpd stop [Note that there is a space at the beginning of service, to ignore this command from history]

6)使用 HISTSIZE 禁用 history
如果想禁用 history,可以将 HISTSIZE 设置为 0:

[email protected]:/test/logs$  export HISTSIZE=0

7)使用 HISTIGNORE 忽略历史中的特定命令
比如我们可以选择忽略 pwd、ls、ls -ltr 等命令:

[email protected]:/test/logs$ export HISTIGNORE="pwd:ls:ls -ltr:"

这里参考链接为:History(历史)命令用法 15 例 - linux.cn ,如果想了解更多,可以去该文章处查看。

你可能感兴趣的:(Linux命令学习(三))