linux历史数据导出命令,Linux Bash history从入门到进阶

像所有shell一样,Linux命令行终端保留用户过去执行的命令的历史记录(bash history)。此历史记录是永久性的,即使重新启动系统也会保留在内存中。这些存储的命令可以自由重复使用。

使用bash历史记录(history)的命令是“history”。此命令是内置 bash命令,用于提取有关Linux用户在所有先前会话中已执行的命令的历史记录信息。在本教程中,我们将通过学习history命令的正确用法来使您充分利用shell历史。 Linux默认将特定用户的命令历史记录存储在〜/.bash_history文件中。

查看整个历史

用户可以使用以下简单命令,查看shell命令的整个历史记录:

$ history

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

100d0bd2767142da0706437bfb3b3313.png

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

如果自从使用bash以来一直在运行许多命令,您会发现这里将显示成百上千个这样的命令。要访问一些相关命令,您可以过滤历史记录功能显示的结果。

过滤历史记录输出

如果要基于先前命令中可能使用的特定关键字过滤历史记录输出,则可以按以下方式使用history命令:

$ history | grep [keyword]

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

$history | grep ping

d6384d0f8d15077f56f30ec3c61c95e2.png

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

查看许多最近的命令

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

N个最近的命令

或者

N个最旧的命令

N最近的命令

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

$ history | tail -n

例:

在此示例中,我想用关键字“ ping”查看我运行的最后3条命令:

$ history | grep ping |tail -3

be844d4a77a0c828908f4763d69151a1.png

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

N个最旧的命令

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

$ history | head -n

例:

在此示例中,我想查看我运行的最旧的3条命令,关键字为“ ping”:

$ history | grep ping |head -3

04c40d92eeb9940f4a489ce48a08681a.png

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

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

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

$ export HISTTIMEFORMAT='%F, %T'

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

29c991662190ccb67e5901d814340567.png

请注意,此格式更改是临时的,关闭会话后将恢复为以前的标准。

从历史导航命令

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

滚动浏览命令

您可以使用键盘命令浏览历史记录命令

向上箭头/Ctrl + P

显示以前使用的命令。您可以多次点击这些控件以返回到历史记录中的特定命令。

向下箭头/Ctrl + N

显示您使用的下一个命令。您可以多次点击这些控件以前进到历史记录中的特定命令。

ALT + R

如果在当前行上编辑从历史记录中拉出的命令,则可以使用此控件将其还原为原始命令。

调出命令

您可以使用以下组合键从历史记录中调用、运行或选择不运行特定命令:

CTRL + R

通过指定搜索字符串从历史记录中调用命令。

CTRL + O

运行通过Ctrl + R调用的命令

CTRL + G

退出历史记录,而无需运行通过Ctrl + R调用的命令

例:

在此示例中,我按了CTRL + R,然后提供了搜索字符串“ ar”。历史记录显示命令“ arch”。

e219a6ed141e3236dd97b811e3556a4a.png

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

ec4085f93f13ee72f93d330543a19d7e.png

history进阶

bash历史记录的真正魅力在于使用各种命令并自定义history命令本身以充分利用历史记录功能:

从历史记录运行命令

如前所述,history命令通过将数字与每个命令相关联来显示命令。通过使用以下命令,您可以根据其历史记录从历史记录中运行某个命令:

$ !#

例:

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

$ !95

b88740985b3b11f61959b6531688604d.png

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

您可以使用以下命重新执行上一个命令:

$ !!

例:

在这里,您可以看到我运行了“ arch”命令。通过运行上述命令,我可以使用重新执行'arch'命令来查看我的CPU体系结构,如下所示:

baa2381ea147f612bf090a3acc987f1c.png

为了从历史记录中搜索命令,然后运行它,请使用以下命令:

$ ![keyword]

例:

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

$ !dconf

77f962faa31b66fa6f91637baedfb93d.png

您可以在下图中显示,它的确是我运行的最后一个dconf命令。

98fbb43283930daa356c7ddfffef2cfb.png

使用先前命令中的参数

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

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

$ [Command] !$

变量!$中存储了前一个命令的最后一个参数。

例:

在此示例中,我将创建一个长名称的文件。

Nano [longnameOfaFile]

然后,通过避免再次按以下方式键入长名称,我将其复制到另一个位置:

Cp !$ [destinationfolder]

38312844dda59c62c88ac666bdabfb67.png

您可以看到我可以使用变量!$复制文件而无需重新输入文件名!

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

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

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

$ [command] !^

例:

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

$ ping !^

50baa0e54731765b37f20d63055d1828.png

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

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

$ !*

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

您还可以使用历史记录中的命令的某个参数。为此,请使用以下命令:

$ [command] ![keyword]:#

例:

$ echo !cp:2

该命令将采用以下参数:

命令:echo

关键字:cp  [搜索的历史命令的关键词,取最后一个匹配的命令]

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

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

b462a57df4610091d2f638a9ad030554.png

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

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

$ command ![keyword]:*

例:

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

$ echo ![cp]:*

26b918470074a49d1fab111670deb87a.png

修改和运行以前的命令

如果您键入了错误的命令,或者想通过更改其中的一些文本来对命令再次执行;以下是这样做的方法:

$ ^[previoustext]^[newtext]

例:

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

$ ^gep^grep

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

1b3de8612b64a1faee46820c5e053095.png

清楚history记录

为了清除bash的历史记录,请使用以下命令:

$ history -c

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

在本教程中,我们了解到,虽然打印整个历史记录内容可能没有用,但通过我们学到的命令优化输出还是非常有用的。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值