0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux操作系统基础命令:如何运用Bash history

如意 来源:良许Linux微信公众号 作者:良许 2020-09-02 11:05 次阅读

相信大家平时都有用 history 命令来查看命令历史记录,但是实际上 history 命令并非只有这个功能,history 还有很多有用的功能。尤其是 Bash 版本的 history 命令,它所提供的功能比所有其他的 Linux Shell history 命令所提供的都要多。

Bash 的历史悠久,是一个古老的 Shell ,并且它还有一个更古老的前身 the Bourne Shell (sh) 。因此,Bash 的 history 命令是所有的 Linux Shell history 命令中功能最丰富的。Bash 版本的 history命令不仅支持反向搜索、快速调用,还支持重写历史记录等等功能。

善用 Bash history 命令以上的这些功能都可以提高你的工作效率,因此,让良许为你一一讲解 Bash history 命令以及它常用的功能。

history 是内置的命令

history 命令与许多其他的命令不同。你可能习惯于命令都作为可执行文件放置在常见的系统级的位置,例如 /usr/bin,/usr/local/bin 或 〜/ bin。但是,内置的 history 命令并不在你的环境变量 PATH 保存的路径中的。

实际上,history 命令并没有保存在物理位置中:

$ which history

which: no history in [PATH]

history 其实是 Shell 本身的一个内置函数:

$ type history

history is a shell builtin

$ help history

history: history [-c] [-d offset] [n] or

history -anrw [filename] or

history -ps arg [arg.。。]

Display or manipulate the history list.

[。..]

由于 history 是 Shell 的内置函数,所以每种 Shell 的 history 函数都是独一无二的。因此,你在 Bash 中能使用的功能可能无法在 Tcsh,Fish 或 Dash 中使用,同样的,在 Tcsh,Fish 或 Dash 中能使用的功能也可能无法在 Bash 中使用。

查看你的 Bash 命令历史记录

history 命令最基本,最频繁的用法就是查看你的 Shell 会话的命令历史记录:

$ echo “hello”

hello

$ echo “world”

world

$ history

1 echo “hello”

2 echo “world”

3 history

事件提示符

事件提示符 (!) 是按事件搜索历史记录的。这里的事件,指的是每一条记录在历史记录里的命令。换句话说,它就是一行命令,并被数字索引标记着以供引用。

要重新运行历史记录中的一个命令,用 ! 直接加上 (无空格) 你想要运行的命令前面的索引数字即可。例如,假设历史记录中的第一条指令是 echo hello ,然后你想重新运行它:

$ !1

echo “hello”

hello

你还可以通过从历史记录中的当前位置开始提供负数的行来使用相对定位。例如,返回历史记录中倒数第3条命令:

$ echo “alvin”

alvin

$ echo “hello”

hello

$ echo “world”

world

$ !-3

echo “alvin”

alvin

如果你只想返回上一条命令,你可以使用简写 !! 来替代 !-1。这整整节省了一次按键的时间!!!

$ echo “alvin”

alvin

$ !!

echo “alvin”

alvin

字符串搜索

你也可以通过特定的字符串来搜索历史记录中的命令并运行它。

若是想要搜索以特定字符串开头的命令,就用 ! 直接加上 (无空格) 你想要搜索的字符串:

$ echo “alvin”

alvin

$ true

$ false

$ !echo

echo “alvin”

alvin

你还可以搜索在任意位置包含特定字符串的命令。要做到这点,你只需要用 ! 直接加上前后两端都被 ? 包围的特定字符串即可,像这样:

$ echo “alvin”

alvin

$ true

$ false

$ !?alvin?

echo “alvin”

alvin

如果你知道你想要搜索的字符串在命令的最后面,那就可以省略字符串后面的 ?,像这样:

$ echo alvin

alvin

$ !?alvin

echo alvin

alvin

值得注意的是,若是历史记录中包含目标字符串的命令不止一条,则它只会执行符合条件的命令中最后的一条:

$ echo “hello world”

hello world

$ echo “hello alvin”

hello alvin

$ !?hello?

echo “hello alvin”

hello alvin

字符串替换

你可以搜索一个特定的字符串并用新字符串替换它,从而更改命令:

$ echo “hello”

hello

$ echo “world”

world

$ ^hello^alvin

echo “alvin”

alvin

但是它只能替换第一次出现的目标字符串,若是命令中出现两次目标字符串,则只有第一次出现的会被替换,像这样:

$ echo “hello hello”

hello hello

$ ^hello^alvin

echo “alvin hello”

alvin hello

与字符串搜索一样,当历史记录中包含目标字符串的命令不止一条时,只替换并执行最后一条:

$ echo “hello world”

hello world

$ echo “hello”

hello

$ ^hello^alvin

echo “alvin”

alvin

充分利用 history 命令

实际上,Bash 的 history 命令的功能远不止本文所提到的,但这是你习惯使用 history 命令的一个很好的开始,而不仅仅是利用 history 来查看历史记录。要经常使用 history 命令,看看你只利用 history 命令而不输入具体的指令能完成多少事情,你会被惊艳到的。
责编AJX

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11219

    浏览量

    208872
  • 操作系统
    +关注

    关注

    37

    文章

    6727

    浏览量

    123181
  • Shell
    +关注

    关注

    1

    文章

    363

    浏览量

    23287
收藏 人收藏

    评论

    相关推荐

    linux操作系统命令不能运行

    不小心 改了/etc/profile里面的环境变量,导致重启后linux操作系统停在命令行模式,ls、vi命令运行不了,怎么把环境变量再改回去啊?重启了也start x了,问题一直没有
    发表于 04-19 00:39

    有关Linux history历史命令的例子详解

    当你在玩Linux的时候,如果你经常使用命令行来控制你的Linux系统,那么有效地使用命令历史机制将会使效率获得极大提升。事实上,一旦你掌握
    发表于 07-11 07:37

    Linuxbash的主要介绍

    shell是一个程序,可以称之为壳程序,用于用户与操作系统进行交互。用来区别与核,相当于是一个命令解析器,Shell有很多中,这里列出其中几种 - Bourne SHell(sh) - Bourne
    发表于 07-11 06:53

    Linux操作系统安装与使用

    嵌入式网络编程+嵌入式Linux系统一、Linux操作系统安装与使用(命令)二、Linux开发工
    发表于 11-05 08:25

    Linux操作系统安装与使用

    嵌入式网络编程+嵌入式Linux系统Linux操作系统安装与使用(命令Linux开发工具(gc
    发表于 12-22 07:47

    Linux操作系统

    linux的教学内容1 、Linux概述 2 、Linux操作系统安装3、 Linux的内核 4 、Li
    发表于 04-10 16:54 0次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b>

    Linux操作系统原理及应用

    Linux操作系统原理及应用 1.1  操作系统的地位 1.2  操作系统的功能 1.3  操作系统的发
    发表于 04-28 14:53 0次下载

    linuxHistory命令代码的详细资料合集免费下载

    本文档的主要内容详细介绍的是linuxHistory命令代码的详细资料合集免费下载。
    发表于 11-19 08:00 2次下载

    Linux操作系统的目录结构

    经常在Windows环境下工作的同学在初次使用Linux操作系统的时候可能有种不知所措的感觉。 Linux操作系统理念是一切皆文件。因此当我们登入L
    的头像 发表于 02-24 10:01 3516次阅读

    Linux操作环境:将Python和shell命令Bash结合在一起

    对于Linux用户而言,命令操作我们已经非常熟悉了。与其他流行的操作系统不同,在Linux社区中,使用
    的头像 发表于 09-16 15:17 2369次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>操作</b>环境:将Python和shell<b class='flag-5'>命令</b>的<b class='flag-5'>Bash</b>结合在一起

    开发人员必看的 Linux 操作系统常用命令合集

    对于开发来说,Linux是开源稳定的,有庞大的社区支持,生态环境好,而且可被定制,支持多用户的网络操作系统,优点多多。因此,基本上开发人员都会选择Linux操作系统。今天给大家整理了
    的头像 发表于 10-08 13:57 1877次阅读
    开发人员必看的 <b class='flag-5'>Linux</b> <b class='flag-5'>操作系统</b>常用<b class='flag-5'>命令</b>合集

    LINUX操作系统的安装与Linux常用文件命令

    LINUX操作系统的安装与Linux常用文件命令说明。
    发表于 06-02 17:45 3次下载

    Linux操作系统的CP命令源代码汇总

    Linux操作系统的CP命令源代码汇总
    发表于 08-04 16:08 4次下载

    Bash 中比较 $() 与 ${}

    Linux 这样的基于 GNU 的操作系统依赖于一个名为 Bash命令语言解释器或 Shell 来完成它们的大部分计算任务和目标。
    的头像 发表于 09-09 09:24 657次阅读

    Linux history命令的使用技巧

    使用 Linux 命令行工作,需要了解且使用 history 的一些常用的特性,不管是 Linux 初学者,还是系统专家。
    的头像 发表于 02-03 16:30 2749次阅读
    <b class='flag-5'>Linux</b> <b class='flag-5'>history</b><b class='flag-5'>命令</b>的使用技巧