15在Linux中掌握命令行历史记录的示例

经常使用Linux命令行时,充分利用历史记录可以显着提高性能。 实际上,一旦您掌握了我们在此处提供的15个示例,您就会发现使用命令行更加有趣。

1.使用HISTTIMEFORMAT显示时间戳

通常,当您从命令行输入历史记录时,它将输出命令#和命令。 出于审计目的,如下所示,将timepstamp与命令一起显示可能会很有用。

# export HISTTIMEFORMAT='%F %T '
# history | more
1  2017-03-19 11:14:15 service network restart
2  2017-03-19 11:14:15 exit
3  2017-03-19 11:14:15 id
4  2017-03-19 11:14:15 cat /etc/redhat-release

2.使用Control + R选择故事

我们坚信这可能是最常用的历史记录功能。 当您已经执行了很长的命令时,您只需使用关键字查看搜索历史记录,然后重新运行同一命令,而无需再次输入。 按Control + R并输入关键字… 在以下示例中,我们正在寻找 在先前的命令“猫/ etc / redhat-release在包含红色字样的故事中。

# [Press Ctrl+R from the command prompt,
which will display the reverse-i-search prompt]
(reverse-i-search)`red': cat /etc/redhat-release
[Note: Press enter when you see your command,
which will execute the command from the history]
# cat /etc/redhat-release
Fedora release 9 (Sulphur)

有时您想要在执行命令之前从历史记录中编辑命令。 例如,您可以搜索 httpd将显示 服务httpd停止 从命令历史记录中,选择该命令,然后 更改停止以开始 然后再次如下所示重新启动它。

# [Press Ctrl+R from the command prompt,
which will display the reverse-i-search prompt]
(reverse-i-search)`httpd': service httpd stop
[Note: Press either left arrow or right arrow key when you see your
command, which will display the command for you to edit, before executing it]
# service httpd start

3.使用4种不同的方法快速重复上一个命令

由于种种原因,您可能最终有一天会重复执行先前的命令。 以下是4种重复上一次运行命令的方法。

  1. 使用 向上箭头查看上一个命令,然后按Enter以运行它。
  2. 输入 !! 然后从命令行按Enter
  3. 输入 !-1 然后从命令行按Enter键。
  4. 请点击 Ctrl + P,它将显示上一个命令,按ENTER键执行它。

4.从历史记录中执行特殊命令

在以下示例中,如果要重复命令4,则可以执行以下操作: !4如下所示。

# history | more
1  service network restart
2  exit
3  id
4  cat /etc/redhat-release

# !4
cat /etc/redhat-release
Fedora release 23

5.运行以特定单词开头的上一个命令

一种 ! 后面跟着您要重新执行的命令的几个字母。 在下面的示例中,在执行从’ps aux | grep yp’。

# !ps
ps aux | grep yp
root     16127  0.0  0.1  36236  1264 ?        Sl   13:10   0:00 ypbind
root     17563  0.0  0.0   4454   740 pts/0    S+   19:19   0:00 grep yp

6.使用HISTSIZE控制历史记录中的总行数

将以下两行添加到.bash_profile中,然后再次登录bash shell以查看更改。 在此示例中,仅450条命令将保存在Bash历史记录中。

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

7.使用HISTFILE历史记录更改文件名

默认情况下,历史记录存储在文件中 〜/ .bash_history… 将以下行添加到您的.bash_profile文件中,然后重新输入Bash shell,以将命令保存在.commandline_destroyer历史记录文件中,而不是.bash_history文件中。 我们仍在为此寻找实际应用。 如果您想跟踪使用不同历史文件名从不同终端执行的命令,我们可以看到这一点。

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

如果您有充分的理由更改历史记录文件的名称,请与我们分享,因为我们很想知道您如何使用此功能。

8.使用HISTCONTROL消除历史记录中的连续重录

在以下示例中,pwd被打印了三遍,当您创建历史记录时,您可以看到它连续出现的所有3次。 要消除重复,请将HISTCONTROL设置为ignoreups,如下所示。

# pwd
# pwd
# pwd
# history | tail -4
44  pwd
45  pwd
46  pwd [Note that there are three pwd commands in history, after
executing pwd 3 times as shown above]
47  history | tail -4

# export HISTCONTROL=ignoredups
# pwd
# pwd
# pwd
# history | tail -3
56  export HISTCONTROL=ignoredups
57  pwd [Note that there is only one pwd command in the history, even after
executing pwd 3 times as shown above]
58  history | tail -4

9.使用HISTCONTROL删除整个历史记录中的重复项

上面显示的被忽略的up仅在重复命令是顺序命令时才将其删除。 要消除整个历史记录中的重复项,请将HISTCONTROL设置为“擦除”,如下所示。

# export HISTCONTROL=erasedups
# pwd
# service httpd stop
# history | tail -3
38  pwd
39  service httpd stop
40  history | tail -3

# ls -ltr
# service httpd stop
# history | tail -6
35  export HISTCONTROL=erasedups
36  pwd
37  history | tail -3
38  ls -ltr
39  service httpd stop
[Note that the previous service httpd stop after pwd got erased]
40  history | tail -6

10.无法使用HISTCONTROL调用特定命令

执行命令时,可以通过将HISTCONTROL设置为ignorespace并在命令之前输入一个空格来指定被忽略命令的历史记录,如下所示。 我看到许多新手系统管理员对此表示担心,因为他们可能从历史记录中隐藏了该命令。 最好了解ignorespace的工作原理。 但是,作为最佳实践,它们不会故意隐藏历史中的任何内容。

# export HISTCONTROL=ignorespace
# ls -ltr
# pwd
#  service httpd stop [Note that there is a space at the beginning of service,
to ignore this command from history]
# history | tail -3
67  ls -ltr
68  pwd
69  history | tail -3

11.使用-c选项清除所有以前的历史记录

有一天您可以清除所有以前的历史记录,但要保留历史记录。

# history -c

12.从命令历史中替换单词

在历史记录中搜索时,可以运行不同的命令,但可以使用与所要查找的命令相同的参数。

在下面的例子中 !!:$ vi命令旁边的参数将前一个命令的参数传递到当前命令。

# ls andreyex-ks.cfg
andreyex-ks.cfg
# vi !!:$
vi andreyex-ks.cfg

在下面的例子中 !^ 在vi命令旁边,我们将前一个命令(即cp命令)的第一个参数传递给当前命令(即vi命令)。

# cp andreyex-ks.cfg andreyex-ks.cfg.bak
andreyex-ks.cfg
# vi  !^
vi andreyex-ks.cfg

13.将特定参数替换为特定命令。

在下面的示例中, cp:2 在历史记录中搜索以cp开头并使用第二个参数cp的先前命令,并将其替换为ls命令的-l,如下所示。

# cp ~/longname.txt /really/a/very/long/path/long-filename.txt
# ls -l !cp:2
ls -l /really/a/very/long/path/long-filename.txt

在下面的示例中, cp:$ 在历史记录中查找以cp开头并采用最后一个参数(在这种情况下,也是第二个参数,如上所示)的cp,并在Ls -l命令中替换它,如下所示。

# ls -l !cp:$
ls -l /really/a/very/long/path/long-filename.txt

14.使用HISTSIZE禁用历史记录使用

如果您想一次关闭所有历史记录,并且不想让Bash Shell记住您键入的命令,则将HISTSIZE设置为0,如下所示。

# export HISTSIZE=0
# history
# [Note that history did not display anything]

15.使用HISTIGNORE忽略历史记录中的特定命令

有时,您无法使用诸如pwd和ls之类的基本命令来使历史混乱。 使用HISTIGNORE列出要从历史记录中忽略的所有命令。 请注意,将ls添加到HISTIGNORE仅忽略ls,而不忽略LS -l。 因此,您必须提供您希望从历史记录中忽略的确切命令。

# export HISTIGNORE="pwd:ls:ls -ltr:"
# pwd
# ls
# ls -ltr
# service httpd stop

# history | tail -3
79  export HISTIGNORE="pwd:ls:ls -ltr:"
80  service httpd stop
81  history
[Note that history did not record pwd, ls and ls -ltr]

Sidebar