bashshell是大多数Linux发行版附带的标准终端环境,macOS附带,可在windows10上安装。它会记住您键入的命令并将其存储在历史文件中。您可能知道bash历史的一些基本知识,但它比您可能意识到的强大得多。
相关:Bash的最佳键盘快捷键(又称Linux和macOS终端)
要滚动浏览bash历史,可以使用bash的许多有用的键盘快捷键中的一些。按这些快捷键,您以前使用过的命令将出现在提示处。
Bash还有一种特殊的“回忆”模式,可以用来搜索以前运行过的命令,而不是逐个滚动。
您可以通过运行一个命令将整个bash历史记录打印到屏幕上:
history您将看到bash历史中所有命令的列表,每个命令的左边都有一个数字。旁边带有“1”的命令是bash历史上最早的命令,而数字最大的命令是最近的命令。
相关:使用以下8个技巧成为Linux终端超级用户
你可以用输出做任何你喜欢的事情。例如,您可以通过管道将其发送到grepcommand来搜索您的命令历史记录。
history | grep your_search您还可以通过管道将其发送到tail命令,以便仅查看最近运行的少量命令。例如,下面的命令将显示历史记录中的最后5个条目。
history | tail -5Bash可以快速“扩展”以前的命令,或者扩展并修改它们。此功能称为“历史扩展”,并使用感叹号,称为“bang”。只需在提示符处键入它们,然后按Enter键运行它们,就像运行任何其他命令一样。
要从历史记录中按编号运行特定命令,请使用以下命令:
!#例如,假设您想运行bash历史记录中的第12个命令。当您运行history命令时,该命令的左边有一个“12”。您可以键入以下命令。
!12要重新运行上次运行的命令,请键入以下命令。这与按一次向上箭头查看上一个命令,然后按Enter键的效果相同。
!!您也可以将某个命令引用回一定数量的行。例如!-2将运行您运行的倒数第二个命令!!意思和…一样!-1 .
这个扩展在线路的任何地方都有效。你可以在之前或之后添加任何你喜欢的内容!!或本节中的任何其他表达式。例如,您可以键入以下命令来重新运行通过sudo运行的最后一个命令,并赋予它root权限。如果在运行命令之前忘记添加sudo,这将特别有用。
sudo !!或者,例如,您可以重新运行上一个命令并将其输出传输到grep以搜索某些文本。
!! | grep text要在历史记录中搜索命令并运行它,请键入以下命令。这将运行与指定文本匹配的最后一个命令:
!text因此,如果您最近运行了一个以ping开头的命令,您可以运行以下命令来搜索它。这将向后搜索历史记录,找到以“pi”开头的最新命令,并立即运行它:
!pi您可以将:p附加到上述任何扩展中,bash将在不运行命令的情况下将命令打印到终端。如果要在运行命令之前确认选择了正确的命令,这将非常有用。
!12:p !!:p !text:pBash还允许您运行新命令,但使用历史记录中以前命令的参数。这可以帮助您快速重用长参数或复杂参数,而无需重新键入它们。
command !$例如,假设您运行了touch/home/chris/some\u long\u file\u name\u命令,您不想再次键入\u。你现在想运行命令nano/home/chris/some\u long\u file\u name\u你不想再输入一次。您可以运行以下命令,而不是从头开始键入整个内容:
nano !$这个!$将使bash自动填充上一个命令的最后一个参数。
这只会填充最后一个参数。所以,如果你跑平谷歌网站-C4然后跑平!$,这只会扩展到“ping 4”。
要解决此问题,可以使用以下技巧展开行中的第一个参数,而不是最后一个参数:
command !^所以,如果你跑平谷歌网站-C4然后冉平!^,bash将其扩展为“ping”谷歌网站".
要填充上一个命令中使用的所有参数,而不是一个参数,可以使用以下命令:
command !*所以,如果你跑平了!*相反,bash会自动填充上一个命令中使用的所有参数。
您可以使用与从历史记录中运行命令以获取参数相同的技巧。请用下面的表格。
command !abc:#例如,我们在前面运行了sudo hostname命令。如果我们运行以下命令,bash将在历史记录中向后搜索,找到以我们键入的字母开头的最后一个命令,并填写我们指定的参数。所以,如果我们运行echo!su:2,bash将返回搜索以“su”开头的最后一个命令,并填写第二个参数,即“ubuntu”。
其他的小把戏也会如你所料发挥作用。例如,将数字替换为星号(通配符),会导致bash填充命令中的所有参数:
command !abc:*Bash还允许您重新运行前面的命令并指定应该更改的内容。这对于纠正命令中的拼写错误非常有用。例如,以下命令将重新运行上一个命令,将其中的文本“abc”替换为文本“xyz”。
^abc^xyz例如,如果你不小心跑了平gogle.com,然后可以运行^gog^goog,bash将运行命令ping谷歌网站相反。
默认情况下,bashshell将您在用户帐户的历史文件~/.bash\u history中运行的命令的历史记录存储在~/.bash\u history中。例如,如果您的用户名是bob,您将在/home/bob/.bash\u history中找到此文件。
因为您的历史记录存储在一个文件中,所以它在会话之间保持不变。您可以运行一些命令,注销,第二天返回,这些命令仍将在历史文件中,随时可以查看和使用。每个用户帐户都有自己的历史文件和单独的命令历史记录。
要清除bash历史记录,可以运行以下命令。这将删除用户帐户的.bash\u历史文件的内容:
history -cBash在默认情况下只记住有限数量的命令,以防止历史文件变得太大。bash记住的历史条目数由HISTSIZEvariable控制。默认值通常为500或1000个条目。您可以运行以下命令来查看系统上bash历史记录的大小。
echo $HISTSIZE要将历史记录设置为零,请运行以下命令。
HISTSIZE=0对于当前会话,bash不会存储任何历史记录条目,除非运行HISTSIZE=1000这样的命令将其设置回一定数量的条目。
如果将HISTCONTROLvariable设置为ignorespace,Bash允许您忽略以空格开头的历史记录条目。
HISTCONTROL=ignorespace在bashshell中运行命令之前,在命令前面键入空格,命令将正常运行,但如果启用此变量,则不会出现在历史记录中。这允许您保持您的历史有点干净,选择运行命令,而不让它们出现在您的历史中。
Bash还允许您忽略重复的命令,这些命令会使历史变得混乱。为此,请将HISTCONTROL设置为ignoredups。
HISTCONTROL=ignoredups要同时使用ignorespace和ignoredups功能,请将HISTCONTROL变量设置为ignoreboth。
HISTCONTROL=ignoreboth请注意,您设置的bash变量将仅在当前会话中保持。如果愿意的话,您需要将这些值添加到用户帐户的.bashrc文件中,以便在启动的每个bash会话中自动设置这些值。
bashshell是一个复杂的工具,有比这些更多的选项。请参考官方Bash手册中的Bash历史内置和历史扩展部分,了解更多详细信息和其他可以使用的高级技巧。
...bash是什么、不同的模式(交互式和非交互式)以及它是如何产生的基础知识开始,这个站点提供了一个全面的背景知识来帮助您理解命令行的机制。 ...
... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...
需要在Windows中运行Linux软件吗?当您需要访问终端时,是否卡在使用Microsoft操作系统?别再担心了。您可以选择几个选项来享受Linux环境,甚至可以在Windows中运行Linux软件。 ...
Bash不是唯一的Linux shell。很容易尝试其他的shell,比如非常流行的Zsh。找到一个您喜欢的shell后,使用chsh命令将其设置为默认shell。我们会教你怎么做。 为什么贝壳很重要 shell位于您和操作系统之间。它在终端窗口内提供环境...
Linux上有多种类型的环境变量。了解如何查看它们,为本地和远程登录创建它们,并使它们在重新启动后仍然有效。 环境变量的工作原理 启动终端窗口及其内部的shell时,会引用一组变量,以确保shell配置正确。这些变量还确...