充分利用 Linux Bash 历史命令

Linux 命令行 – 终端 – 存储用户过去执行的命令的历史记录。 即使我们重新启动系统,此历史记录也是持久的并保留在内存中。 我们可以检索和重用这些存储的命令,以充分利用 bash 贝壳。

Linux bash 有一个非常强大的命令叫做“history”。 此命令是内置的 bash 命令用于提取有关 Linux 用户在所有先前会话中执行过的命令的历史信息。 在本教程中,我们将通过学习正确使用 history 命令使您能够充分利用 shell 历史记录。 默认情况下,Linux 将特定用户的命令历史存储在 ~/.bash_history 文件中。

我们将使用 Linux 终端应用程序来执行本教程中提到的命令。

查看整个 Bash 历史记录

用户可以使用以下简单命令从专为该用户保存的历史文件中查看他/她的 shell 命令的整个历史记录:

$ history

历史记录将以以下默认格式打印在屏幕上:

在上图中,您可以看到所有命令的列表,并为每个命令分配了一个编号。 编号为 1 的命令对应于您运行的第一个命令,最后编号的命令代表您执行的最新命令。

如果您在使用后运行了很多命令 bash,您会观察到这里会显示成百上千个这样的命令。 要访问一些相关命令,您可以过滤历史功能显示的结果。 您还可以自定义历史命令以显示特定数量的命令。

过滤 Bash 历史输出

如果要根据之前命令中可能使用过的特定关键字过滤历史输出,可以按如下方式使用 history 命令:

$ history | grep 

例子: 在这 example, 我只想查看我曾经在 shell 中运行过的 ping 命令。 因此,我将使用以下命令:

$ 历史 | grep ping

您可以看到我的输出现在仅显示包括我的搜索关键字“ping”在内的命令

查看最近执行的shell命令的数量

您还可以查看特定数量的命令,例如 example:

  • N 最近的命令数

或者

  • N 最早的命令数

N 最近的 Bash 命令数

您可以通过以下命令查看特定数量的最近运行的命令:

$ history | tail -n

例子:

在这 example,我想查看我运行的最后 3 个命令,使用关键字 ‘ping’ :

$ history | grep ping |tail -3

显示最近命令的数量

输出仅显示 3 个最近的 ping 命令而不是整个历史记录

N 最早的 Bash 命令的数量

您可以通过以下命令查看特定数量的最旧运行命令:

$ history | head -n

例子:

在这 example,我想查看我运行的最旧的 3 个命令,关键字是 ‘ping’ :

$ history | grep ping |head -3

显示最旧的命令

输出仅显示 3 个最旧的 ping 命令而不是整个历史记录

列出所有带有日期和时间戳的 Bash 命令

如果您想查看您的命令历史以及日期和时间戳,请使用以下导出命令:

$ export HISTTIMEFORMAT='%F, %T '

现在,当您希望查看历史记录时,只需运行 history 命令即可查看以下格式的输出:

列出所有带有日期和时间戳的命令

请注意,这种格式更改是暂时的,当您使用它时,它将恢复到以前的标准 close 会议。

从历史中导航命令

当您在命令行上时,您可以浏览以前运行的命令,还可以通过提供关键字来调用一些最近使用的命令。

滚动命令

您可以使用以下键盘控件来浏览历史命令

向上箭头/Ctrl+P使用这些控件,您可以显示之前使用的命令。 您可以多次点击这些控件以返回到历史记录中的特定命令。
向下箭头/Ctrl+N使用这些控件,您可以显示您使用的下一个命令。 您可以多次点击这些控件以前进到历史记录中的特定命令。
Alt + R如果在当前行编辑从历史记录中提取的命令,则可以使用此控件将其恢复为原始命令。

调用命令

您可以使用以下控件调用、运行或选择不运行历史记录中的特定命令:

Ctrl+R使用此控件,您可以通过指定搜索字符串从历史记录中调用命令。
Ctrl+O使用这个控件,你可以运行你通过 Ctrl+R 调用的命令
Ctrl+G使用此控件,您可以退出历史记录,而无需运行您通过 Ctrl+R 调用的命令

例子:

在这 example, 我按 ctrl+R 然后提供了搜索字符串 ‘ar’。 历史显示命令’arch’。

历史命令示例

当我按 ctrl+O 运行命令“arch”时,它显示了我系统的 CPU 架构:

拱门命令

利用 Bash 历史记录

真正的魔力 bash 历史是通过使用各种命令并自定义历史命令本身来充分利用历史功能:

从历史运行命令

  • 正如我们之前看到的,history 命令通过为每个命令关联一个数字来显示命令。 通过使用以下命令,您可以根据其编号运行历史记录中的某个命令:
$ !#

例子:

在这里,我正在运行历史记录中的命令编号 95:

$ !95

从历史运行命令

输出显示“lscpu”的结果,它在我的命令中列为命令编号 95 bash 历史。 此命令显示我的 CPU 和操作系统规格。

  • 您可以使用以下命令重新运行之前的命令:
$ !!

例子:

在这里您可以看到我运行了命令“arch”。 通过运行上述命令,我可以重新运行’arch’命令来查看我的CPU架构,如下所示:

充分利用 Linux Bash 历史命令 1

  • 要从历史记录中搜索命令然后运行它,请使用以下命令:
$ !

例子:

我将使用以下命令重新运行最后一个带有关键字“dconf”的命令:

$ !dconf

充分利用 Linux Bash 历史命令 2

您可以在下图中重新确认这是我运行的最后一个 dconf 命令。

充分利用 Linux Bash 历史命令 3

使用来自先前命令的参数

Linux bash 使您能够使用来自上一个命令的参数来运行新命令。 当您想避免重新输入冗长或复杂的参数时,它特别有用。 为此,您可以使用以下命令:

使用上一个命令的最后一个参数

$ [Command] !$

变量 !$ 具有存储在其中的上一个命令的最后一个参数。

例子:

在这 example,我将创建一个长名称的文件。

Nano [longnameOfaFile]

然后我将通过避免再次键入长名称将其复制到另一个位置,如下所示:

Cp !$ [destinationfolder]

使用上一个命令的最后一个参数

您可以看到我能够通过使用变量 !$ 复制文件而无需重新键入文件名

使用上一个命令的第一个参数

有时,只有前一个命令的第一个参数对当前命令有帮助。

在这种情况下,您可以使用以下命令:

$ [command] !^

例子:

在下面的 example,我通过指定主机名和计数作为参数来运行 ping 命令。 现在我想在我的新命令中使用主机名(第一个参数)而不是 2(最后一个参数)。 为此,我将使用以下命令:

$ ping !^

使用上一个命令的第一个参数

使用上一个命令中的所有参数

您还可以通过使用以下命令来使用上一个命令中的所有参数:

$ !*

使用历史命令中的一个参数

您还可以通过重用它们的参数来使用历史记录中的命令。 为此,请使用以下命令:

$ [command] !:#

例子:

$ echo !cp:2

此命令将采用以下参数:

命令:回声

关键词:cp

#:2(命令的第二个参数)

以下输出显示了我运行的最后一个 cp 命令的第二个参数:

使用历史命令中的一个参数

使用历史命令中的所有参数

以下命令将存储搜索历史命令中的所有参数,并在当前命令中使用它们:

$ command !:*

例子:

在下面的命令中,我将使用 echo 命令打印最后一个 cp 命令的所有参数,如下所示:

$ echo ![cp]:*

使用历史命令中的所有参数

修改和运行以前的命令

如果您输入错误的命令或者您想通过更改其中的某些文本来重新运行命令; 以下是这样做的方法:

$ ^[previoustext]^[newtext]

例子:

我将命令“grep”错误输入为“gep”,现在我想通过更正文本来运行命令:

$ ^gep^grep

现在您可以看到我更正后的命令将正常运行,如下所示:

修改和运行以前的命令

清除历史记录

为了抹去你的历史 bash,使用以下命令:

$ history -c

此命令清除您的历史记录并从 ~/.bash_history 文件中删除所有内容。

在本教程中,我们了解到虽然打印出整个历史内容并不是很有用,但使用我们学到的命令优化输出才是真正的游戏规则改变者。 通过本文的练习,您将能够准确显示您想要的命令,重新执行和重新使用这些命令,还可以使用以前执行的命令的参数来优化新命令。

充分利用 Linux Bash 历史命令

相关阅读:

Posted in: Linux