如何在linux上使用history命令

Linux的shell保存了您运行的命令的历史记录,您可以搜索它来重复您过去运行的命令。一旦您了解了Linux history命令以及如何使用它,它就可以显著地提高您的生产效率。...

Linux的shell保存了您运行的命令的历史记录,您可以搜索它来重复您过去运行的命令。一旦您了解了Linux history命令以及如何使用它,它就可以显著地提高您的生产效率。

操纵历史

正如乔治桑塔亚纳(georgestantayana)的一句名言:“那些记不住过去的人注定要重蹈覆辙。”不幸的是,在Linux上,如果你记不住过去,你就不能重蹈覆辙,即使你想重蹈覆辙。

这时Linux的history命令就派上用场了。它允许你回顾和重复你以前的命令。这不仅仅是为了鼓励懒惰或节省时间,还有一个效率(和准确性)因素在起作用。命令越长、越复杂,就越难记住和键入而不出错。有两种类型的错误:一种是阻止命令工作,另一种是允许命令工作,但使其执行意外操作。

history命令消除了这些问题。像大多数Linux命令一样,它的内容比你想象的要多。但是,如果您学习如何使用history命令,它可以每天改进您对Linux命令行的使用。这是对你时间的一次很好的投资。使用history命令有比反复按向上箭头更好的方法。

历史记录命令

在最简单的形式中,只需键入其名称即可使用history命令:

history

如何在linux上使用history命令

然后,以前使用的命令列表被写入终端窗口。

如何在linux上使用history命令

命令被编号,最近使用的命令(编号最高的命令)位于列表的末尾。

要查看一定数量的命令,可以在命令行上将一个数字传递给历史记录。例如,要查看最近使用的10个命令,请键入以下命令:

history 10

如何在linux上使用history命令

如果通过tail命令对历史进行管道处理,则可以获得相同的结果。为此,请键入以下内容:

history | tail -n 10

如何在linux上使用history命令

相关:如何在Linux上使用管道

重复命令

如果要重用“历史记录”列表中的命令,请键入感叹号(!),以及中间没有空格的命令的编号。

例如,要重复37号命令,请键入以下命令:

!37

如何在linux上使用history命令

要重复上一个命令,请再次键入两个感叹号,不带空格:

!!

如何在linux上使用history命令

当您发出命令而忘记使用sudo时,这会很有用。键入sudo,一个空格,双感叹号,然后按回车键。

对于下面的示例,我们键入了一个需要sudo的命令。我们不需要重新输入整行代码,只需输入sudo,就可以省去大量的按键操作!!,如下图:

mv ./my_script.sh /usr/local/bin/ sudo !!

如何在linux上使用history命令

因此,您可以从列表中键入相应的数字来重复一个命令,或使用双感叹号来重复上一个命令。但是,如果你想重复第五或第八个命令呢?

可以使用一个感叹号、一个连字符(-)和前面任何命令的编号(同样,不带空格)来重复该命令。

要重复上一个命令,请键入以下命令:

!-13

如何在linux上使用history命令

按字符串搜索命令

要重复以特定字符串开头的最后一个命令,可以键入感叹号,然后键入不带空格的字符串,然后按Enter键。

例如,要重复以sudo开头的最后一个命令,请键入以下命令:

!sudo

如何在linux上使用history命令

不过,这里面有危险因素。如果以sudo开头的最后一个命令不是您认为的命令,那么您将启动错误的命令。

不过,要提供安全网,可以使用:p(print)修饰符,如下所示:

!sudo:p

如何在linux上使用history命令

这指示history将命令打印到终端窗口,而不是执行它。这允许您在使用命令之前查看它。如果是所需的命令,请按向上箭头,然后按Enter键使用它。

如果要查找包含特定字符串的命令,可以使用感叹号和问号。

例如,要查找并执行包含单词“aliases”的第一个匹配命令,可以键入以下命令:

!?aliases

如何在linux上使用history命令

这将找到任何包含字符串“aliases”的命令,而不管它出现在字符串中的什么位置。

交互式搜索

交互式搜索允许您跳过匹配命令的列表并重复所需的命令。

只需按Ctrl+r开始搜索。

如何在linux上使用history命令

键入搜索线索时,将出现第一个匹配的命令。您键入的字母出现在背勾(`)和撇号(')之间。匹配的命令会随着您键入每个字母而更新。

如何在linux上使用history命令

每次按Ctrl+r时,您都会向后搜索下一个匹配的命令,该命令将显示在“终端”窗口中。

如何在linux上使用history命令

按Enter键时,将执行显示的命令。

如何在linux上使用history命令

要在执行命令之前对其进行编辑,请按向左或向右箭头键。

如何在linux上使用history命令

命令将显示在命令行中,您可以对其进行编辑。

如何在linux上使用history命令

您可以使用其他Linux工具来搜索历史记录列表。例如,要将历史记录的输出导入grep并搜索包含字符串“aliases”的命令,可以使用以下命令:

history | grep aliases

如何在linux上使用history命令

修改最后一个命令

如果您需要修复一个输入错误,然后重复该命令,您可以使用**符号(^)来修改它。这是一个很好的技巧,当你拼写错误的命令或想重新运行一个不同的命令行选项或参数。

要使用它,请键入(不带空格)**符号、要替换的文本、另一个**符号、要替换的文本和另一个**符号,然后按Enter键。

***

sudo systemctl start shhd

您可以通过键入以下内容轻松更正此问题:

^shhd^sshd^

如何在linux上使用history命令

***

从历史记录列表中删除命令

也可以使用-d(delete)选项从历史记录列表中删除命令。没有理由将拼写错误的命令保留在历史记录列表中。

您可以使用grep找到它,通过-d选项将其编号传递给历史记录以删除它,然后再次搜索以确保它已消失:

history | grep shhd history -d 83 history | grep shhd

如何在linux上使用history命令

您还可以将一系列命令传递给-d选项。要删除从22到32(含)的所有列表条目,请键入以下命令:

history -d 22 32

要仅删除最后五个命令,可以键入负数,如下所示:

history -d -5

手动更新历史文件

当您登录或打开终端会话时,历史记录列表将从历史记录文件中读取。在Bash中,默认的历史文件是.Bash\u history。

在当前终端窗口会话中所做的任何更改仅在关闭终端窗口或注销时写入历史文件。

假设要打开另一个终端窗口以访问完整的历史记录列表,包括在第一个终端窗口中键入的命令。-a(all)选项允许您在打开第二个终端窗口之前在第一个终端窗口中执行此操作。

要使用它,请键入以下内容:

history -a

如何在linux上使用history命令

命令以静默方式写入历史文件。

如果要将对历史记录列表的所有更改写入历史记录文件(例如,如果删除了一些旧命令),可以使用-w(write)选项,如下所示:

history -w

如何在linux上使用history命令

清除历史记录列表

要从历史记录列表中清除所有命令,可以使用-c(清除)选项,如下所示:

history -c

如何在linux上使用history命令

如果还要强制对历史文件进行这些更改,请使用-w选项,如下所示:

history -w

安全和历史文件

如果您使用的任何应用程序要求您在命令行中键入敏感信息(如密码),请记住这也将保存在历史文件中。如果不想保存某些信息,可以使用以下命令结构立即将其从历史记录列表中删除:

special-app my-secret-password;history -d $(history 1) history 5

如何在linux上使用history命令

此结构包括两个用分号(;)分隔的命令。我们来分解一下:

  • 特殊应用程序:我们正在使用的程序的名称。
  • 我的秘密密码:我们需要在命令行上为应用程序提供的秘密密码。一号命令到此结束。
  • history-d:在命令2中,我们调用history的-d(delete)选项。我们要删除的是命令的下一部分。
  • $(历史记录1):这使用命令替换。$()中包含的命令部分在子shell中执行。执行的结果在原始命令中作为文本发布。history 1命令返回上一个命令。因此,您可以将第二个命令看作历史-d“这里的最后一个命令”

您可以使用history 5命令来确保包含密码的命令已从历史记录列表中删除。

不过,还有一个更简单的方法。因为Bash会忽略默认情况下以空格开头的行,所以只需在行的开头包含空格,如下所示:

special-app another-password history 5

如何在linux上使用history命令

带有密码的命令未添加到历史记录列表中。此技巧有效的原因包含在.bashrc文件中。

.bashrc文件

每次登录或打开终端窗口时,都会执行.bashrc文件。它还包含一些控制history命令行为的值。让我们用gedit编辑这个文件。

键入以下内容:

gedit .bashrc

在文件顶部附近,可以看到两个条目:

  • HISTSIZE:历史记录列表可以包含的最大条目数。
  • HISTFILESIZE:历史文件可以包含的行数限制。

如何在linux上使用history命令

这两种价值观以以下方式相互作用:

  • 登录或启动终端窗口会话时,将从.bash\u历史文件填充历史列表。
  • 关闭终端窗口时,在HISTSIZE中设置的最大命令数将保存到.bash\u历史文件中。
  • 如果启用了histappend shell选项,则命令将附加到.bash\u历史记录中。如果未设置histappend,则会覆盖.bash\u历史。
  • 将历史记录列表中的命令保存到.bash\u history后,历史记录文件将被截断,以包含不超过HISTFILESIZE的行。

同样在文件顶部附近,您会看到一个HISTCONTROL值的条目。

如何在linux上使用history命令

可以将此值设置为执行以下任一操作:

  • 点火空间:线从没有添加到历史记录列表的空格开始。
  • 我gnoredups:重复命令未添加到历史文件。
  • 我gnoreboth:启用两者上面提到的。

也可以列出不希望添加到历史记录列表中的特定命令。用冒号(:)将它们分开,并用引号(“…”)括起来。

您可以按照此结构向.bashrc文件中添加一行,并替换要忽略的命令:

export HISTIGNORE="ls:history"

如何在linux上使用history命令

使用时间戳

如果要向历史记录列表添加时间戳,可以使用HISTIMEFORMAT设置。为此,只需在.bashrc文件中添加一行,如下所示:

export HISTTIMEFORMAT="%c "

请注意,右引号前有一个空格。这可以防止时间戳与命令列表中的命令对接。

如何在linux上使用history命令

现在,当您运行history命令时,您将看到日期和时间戳。请注意,在添加时间戳之前,历史记录列表中的任何命令都将使用接收时间戳的第一个命令的日期和时间进行时间戳。在下面的示例中,这是命令118。

如何在linux上使用history命令

那是一个冗长的时间戳。但是,您可以使用%c以外的标记来细化它。您可以使用的其他令牌包括:

  • %d:白天
  • %m:月
  • %y:年
  • %H:小时
  • %M:分钟
  • %S:秒
  • %F:完整日期(年月日格式)
  • %T:时间(小时:分钟:秒(格式)
  • %c:完整的日期和时间戳(日-日-月-年,以及小时:分钟:秒(格式)

让我们尝试并使用几个不同的标记:

export HISTTIMEFORMAT="%d n%m %T "

如何在linux上使用history命令

输出使用日、月和时间。

如何在linux上使用history命令

如果我们去掉日和月,它只会显示时间。

对HISTIMEFORMAT所做的任何更改都将应用于整个历史记录列表。这是可能的,因为每个命令的时间存储为Unix epoch的秒数。HISTTIMEFORMATdirective仅指定用于将该秒数呈现为可读样式的格式,例如:

export HISTTIMEFORMAT="%T "

如何在linux上使用history命令

我们的产量现在更容易控制了。

如何在linux上使用history命令

也可以使用history命令进行审核。有时,查看过去使用过的命令可以帮助您确定可能导致问题的原因。

就像在生活中一样,在Linux上,您可以使用history命令来重温美好时光,并从中吸取教训。

相关:您应该知道的37条重要的Linux命令

  • 发表于 2021-04-02 18:17
  • 阅读 ( 200 )
  • 分类:互联网

你可能感兴趣的文章

使用以下技巧和技巧成为linux命令行高手

对于Linux用户来说,命令行本质上是一个非常强大的工具。虽然更为用户友好的Linux操作系统(OS)提供了大量功能,而不需要进入终端,但它是操作系统的一个必要元素。与流行的观点相反,命令行甚至可以简化某些操作。 ...

  • 发布于 2021-03-12 10:19
  • 阅读 ( 272 )

40多个最常用的linux终端命令

Linux命令行有两件事是正确的:第一,在任何给定的时间都可以使用成千上万个可能的命令;第二,最终只能使用其中的一小部分。尽管提供了力量,我们大多数人只是重复同样的命令一遍又一遍。 ...

  • 发布于 2021-03-15 21:40
  • 阅读 ( 252 )

如何在linux上安装和使用powershell

... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...

  • 发布于 2021-03-16 02:34
  • 阅读 ( 303 )

如何在windows10上获得linux bash shell

想要在Windows PC上快速方便地访问Linux吗?最好的选择是使用Windows子系统for Linux。 ...

  • 发布于 2021-03-21 11:48
  • 阅读 ( 281 )

如何在linux中添加用户

想在Linux系统上添加用户但不知道如何添加?在Linux上使用命令行界面管理用户无疑是一项复杂的工作。而对于初学者来说,即使添加新用户也是一场噩梦。 ...

  • 发布于 2021-03-26 23:29
  • 阅读 ( 331 )

如何使用shopt定制bashshell

如果您使用shopt微调bashshell的行为,您可以控制超过50个设置。我们将向您展示如何按照您喜欢的方式定制您的Linux系统。 shopt内置 shopt内置是bashshell所有版本的一部分,因此不需要安装任何东西。多年来,shopt提供的选项数量...

  • 发布于 2021-04-01 12:30
  • 阅读 ( 171 )

如何使用linux的man命令:隐藏的秘密和基础知识

你需要知道的关于Linux的一切都在它的手册页中。例如,您可以搜索一个命令来完成一个任务,即使您不知道它叫什么。但是你怎么能找到手册页呢?这里有一些技巧。 linux的内置手册 有一个古老的(来自Unix黄金时代)Linux笑...

  • 发布于 2021-04-02 10:46
  • 阅读 ( 193 )

linux下如何使用which命令

Linux which命令标识在向shell发出命令时启动的可执行二进制文件。如果您的计算机上有同一程序的不同版本,您可以使用哪个来确定shell将使用哪个版本。 二进制文件和路径 当您试图从终端窗口运行程序或命令时,shell(通常是...

  • 发布于 2021-04-02 20:07
  • 阅读 ( 166 )

如何在linux上创建别名和shell函数

使用别名和bashshell函数创建自己的Linux命令。驯服重复性的任务,截断冗长的进程,并用您经常使用且难以记住的选项配置标准命令。 别名和shell脚本是Linux和类Unix操作系统中的强大技术,允许您将命令行体验磨练为您想要的。...

  • 发布于 2021-04-03 03:45
  • 阅读 ( 204 )

37个重要的linux命令

你是Linux新手还是有点生疏?以下是您需要知道的所有命令。可以将此作为Linux终端的重要参考。这也适用于macOS命令行。 终端的基本工具包 Linux包含了大量的命令,但是我们选择了37个最重要的命令在这里展示。学习这些命令...

  • 发布于 2021-04-03 15:04
  • 阅读 ( 181 )
益贝儿
益贝儿

0 篇文章

相关推荐