(macos命令和linux命令)如何在Linux或MacOS终端中使用Bash历史记录

(macos命令和linux命令)如何在Linux或MacOS终端中使用Bash历史记录

如何在Linux或MacOS终端中使用Bash历史记录

Bashshell是大多数Linux发行版所包含的标准终端环境,包含在MacOS中,可在Windows 10上安装。它会记住您输入的命令,并将它们存储在历史文件中。您可能知道一些bash历史的基本知识,但它比您可能意识到的要强大得多。

键盘快捷键

要滚动您的bash历史,您可以使用bash的许多有用的快捷键。按下这些快捷键,您以前使用过的命令将出现在提示符下。

  • 上箭或Ctrl+P::转到您历史上的前一个命令。多次按键以向后遍历所使用的命令。
  • 下箭或Ctrl+N::进入历史上的下一个命令。多次按键以遍历您所使用的命令。
  • ALT+R:如果在当前行中编辑了命令,则恢复对从历史记录中提取的命令的任何更改。

Bash还有一种特殊的“召回”模式,您可以使用它来搜索以前运行过的命令,而不是一个一个地滚动它们。

  • Ctrl+R::回忆最后一个与您提供的字符匹配的命令。按此快捷方式并开始键入以搜索bash历史记录中的命令。
  • Ctrl+O:运行您在Ctrl+R中找到的命令。
  • Ctrl+G::保留历史记录搜索模式而不运行命令。

查看您的Bash历史记录

您可以通过运行一个命令将整个bash历史记录打印到屏幕上:

history

您将看到bash历史记录中所有命令的列表,以及每个命令左边的数字。旁边有“1”的命令是bash历史上最古老的命令,而数字最高的命令是最近的。

你可以用输出做任何你喜欢做的事情。例如,您可以将其输送到grep命令搜索您的命令历史记录。

history | grep your_search

您也可以将其输送到tail 命令只查看少量最近运行的命令。例如,下面的命令将显示历史记录中的最后5个条目。

history | tail -5

从历史记录中运行命令

Bash可以快速地“展开”以前的命令,或者展开并修改它们。这一特性被称为“历史扩展”,并使用了一个感叹号,称为“邦”。只需在提示符下键入它们,然后按Enter键运行它们,就像运行任何其他命令一样。

若要从历史记录中按其编号运行特定的命令,请使用以下命令:

!#

例如,假设您希望运行bash历史记录中的第12条命令。当您运行history 命令。您可以键入以下命令。

!12

若要重新运行您运行的最后一个命令,请键入以下命令。这与一次按向上箭头查看前一个命令,然后按Enter具有相同的效果。

!!

您还可以引用一个命令,返回一定数量的行。例如,!-2会运行您运行的第二个命令。!!意味着和!-1.

这种扩展在任何地方都是可行的。您可以在之前或之后添加任何您喜欢的内容。!!或本节中的任何其他表达式。例如,您可以键入以下命令来重新运行您运行的最后一个命令sudo给予它根特权。如果忘记添加sudo 在运行命令之前。

sudo !!

或者,例如,您可以重新运行前面的命令,并将其输出输送到grep以搜索某些文本。

!! | grep text

若要搜索历史记录中的命令并运行该命令,请键入以下命令。这将运行与您指定的文本匹配的最后一个命令:

!text

所以,如果您最近运行了一个以ping,您可以运行以下命令来搜索它。这将向后搜索您的历史记录,找到以“pi“,并立即运行:

!pi

您可以附加一个:p对于上述任何扩展,bash将在不运行它的情况下将命令打印到终端。如果您想在运行之前确认正在选择正确的命令,这是非常有用的。

!12:p

!!:p

!text:p

重用历史记录中的参数

Bash还允许您运行一个新命令,但可以使用历史记录中以前命令中的参数。这可以帮助您快速重用长或复杂的参数,而不必重新键入它们。

command !$

例如,假设您运行了命令touch /home/chris/some_long_file_name_you_dont_want_to_type_again。现在要运行命令nano /home/chris/some_long_file_name_you_dont_want_to_type_again。与其从头开始输入整个程序,不如运行:

nano !$

这个!$将使bash自动填写前面命令中的最后一个参数。

这只填补了最后一个参数。所以,如果你跑ping google.com -c 4然后跑ping !$,这只会扩展到“ping 4“.

要解决这种情况,可以使用下面的技巧来展开行上的第一个参数,而不是最后一个参数:

command !^

所以,如果你跑了ping google.com -c 4然后跑ping !^,bash会将其扩展到“ping google.com".

要填写前面命令中使用的所有参数,而不仅仅是一个参数,您可以使用以下方法:

command !*

所以,如果你跑了ping !*相反,bash将自动填写在前面命令中使用的所有参数。

您可以使用与运行历史记录中的命令相同的技巧,从这些命令中获取参数。只需使用以下形式。

command !abc:#

例如,我们运行命令sudo hostname ubuntu早些时候。如果我们运行以下命令,bash将在历史记录中反向搜索,以找到以我们键入的字母开头的最后一个命令,并填写我们指定的参数。所以,如果我们跑echo !su:2,bash将搜索回找以“”开头的最后一个命令。su并填写其第二个论点,即ubuntu“.

其他技巧如你所料。例如,用一个名为通配符的星号替换数字,将导致bash填充命令中的所有参数:

command !abc:*

重新运行之前的命令并修改它

Bash还允许您重新运行前面的命令,并指定应该更改的内容。这对于纠正命令中的错误很有用。例如,下面的命令将重新运行前面的命令,替换文本“abc“在里面加上课文”xyz“.

^abc^xyz

例如,如果你不小心跑了ping gogle.com,你就可以跑了^gog^googBash将运行以下命令ping google.com相反。

您的历史记录存储在哪里,以及如何清除它

Bashshell默认情况下将您在用户帐户的历史文件中运行的命令的历史记录存储在~/.bash_History中。例如,如果您的用户名是bob,您将在/home/bob/.bash_History中找到这个文件。

因为您的历史记录存储在文件中,所以它在会话之间持续存在。您可以运行一些命令,签署,第二天回来,这些命令将仍然在您的历史文件准备查看和使用。每个用户帐户都有自己的历史记录文件,并有单独的命令历史记录。

要清除bash历史记录,可以运行以下命令。这将擦除用户帐户的.bash_History文件的内容:

history -c

默认情况下,Bash只记住有限数量的命令,从而防止历史文件变得太大。历史记录条目bash Memory的数量由HISTSIZE变量。缺省值通常是500或1000个条目。您可以运行以下命令来查看系统上bash历史记录的大小。

echo $HISTSIZE

若要将历史记录设置为零,请运行以下命令。

HISTSIZE=0

对于当前会话,bash将不会存储任何历史记录项,除非运行以下命令HISTSIZE=1000将其设置为一定数量的条目。

如何忽略空格和重复项

Bash允许您忽略以空格开头的历史记录项,如果您将HISTCONTROL变到ignorespace.

HISTCONTROL=ignorespace

在bashshell中运行命令之前键入空格,命令将正常运行,但如果启用了此变量,则不会出现在历史记录中。这使您可以保持您的历史记录更干净,选择运行命令,而不让它们出现在您的历史记录中。

Bash还允许您忽略重复的命令,这些命令可能会扰乱您的历史记录。要做到这一点,请设置HISTCONTROL ignoredups.

HISTCONTROL=ignoredups

要同时使用ignorespace ignoredups 特性,设置HISTCONTROL变到ignoreboth.

HISTCONTROL=ignoreboth

请注意,您设置的bash变量仅在当前会话中保持不变。您需要将这些添加到用户帐户的.bashrc文件中,以便在启动的每个bash会话中自动设置这些值(如果您愿意的话)。

Bashshell是一个复杂的工具,有更多的选项。参考官方bash手册中的BashHistory内置程序和历史扩展部分,您可以使用更详细的信息和其他高级技巧。

以上是 (macos命令和linux命令)如何在Linux或MacOS终端中使用Bash历史记录 的全部内容, 来源链接: utcz.com/wiki/670001.html

回到顶部