掌握 Linux 命令行历史的 15 个示例

举报
Tiamo_T 发表于 2021/11/24 21:58:34 2021/11/24
【摘要】 当您经常使用 Linux 命令行时,有效地使用历史记录可以大大提高生产力。事实上,一旦您掌握了我在此处提供的 15 个示例,您就会发现使用命令行更加愉快和有趣。

当您经常使用 Linux 命令行时,有效地使用历史记录可以大大提高生产力。事实上,一旦您掌握了我在这里提供的 15 个示例,您就会发现使用命令行更加愉快和有趣。

1. 使用 HISTTIMEFORMAT 显示时间戳

通常,当您从命令行键入历史记录时,它会显示命令# 和命令。出于审计目的,将时间戳与命令一起显示可能会有所帮助,如下所示。

# export HISTTIMEFORMAT='%F %T '
# history | more
1  2018-08-05 19:02:39 service network restart
2  2018-08-05 19:02:39 exit
3  2018-08-05 19:02:39 id
4  2018-08-05 19:02:39 cat /etc/redhat-release

2. 使用 Control+R 搜索历史记录

我坚信,这可能是你历史上最常用的特征。当您已经执行了一个很长的命令时,您可以简单地使用关键字搜索历史记录并重新执行相同的命令,而无需完全键入它。按 Control+R 并键入关键字。在下面的示例中,我搜索red,它在包含单词 red 的历史记录中显示了上一个命令“ cat /etc/redhat-release ”。

# [在命令提示符下按Ctrl+R,
这将显示 reverse-i-search 提示] 
(reverse-i-search)` red ': cat /etc/redhat-release
 [注意:当你看到你的命令时按回车键,
这将从历史记录中执行命令]
# cat /etc/redhat-release
Fedora 9 (Sulphur)

有时您想在执行之前编辑历史命令。例如,您可以搜索httpd,它将从命令历史记录中显示service httpd stop,选择此命令并将stop 更改为 start并再次重新执行,如下所示。

#[在命令提示符下按Ctrl+R,这将显示反向我搜索提示] 
(reverse-i-search)`httpd': service httpd stop
[注:按或左箭头或右箭头键当你看到你的命令,它将在执行之前显示您要编辑的命令] 
# service httpd start

3. 使用 4 种不同的方法快速重复上一个命令

有时您可能会因为各种原因重复前面的命令。以下是重复上次执行命令的 4 种不同方式。

  1. 使用向上箭头查看上一条命令并按回车键执行。
  2. 输入!!然后从命令行按回车
  3. 键入!-1并从命令行按回车键。
  4. Control+P会显示上一条命令,按回车执行

4. 执行历史记录中的特定命令

在以下示例中,如果要重复命令 #4,可以执行!4,如下所示。

# history | more
1  service network restart
2  exit
3  id
4  cat /etc/redhat-release

# !4
cat /etc/redhat-release
Fedora release 9 (Sulphur)

5. 执行以特定单词开头的上一个命令

类型 !后跟要重新执行的命令的开头几个字母。在下面的例子中,输入 !ps 并回车,执行前面以 ps 开头的命令,即 'ps aux | grep yp'。


# !ps
ps aux | grep yp
root     16947  0.0  0.1  36516  1264 ?        Sl   13:10   0:00 ypbind
root     17503  0.0  0.0   4124   740 pts/0    S+   19:19   0:00 grep yp

6.使用HISTSIZE控制历史总行数

将以下两行附加到 .bash_profile 并再次重新登录到 bash shell 以查看更改。在此示例中,bash 历史记录中将仅存储 450 个命令。

# vi ~/.bash_profile
HISTSIZE=450
HISTFILESIZE=450

7. 使用 HISTFILE 更改历史文件名

默认情况下,历史记录存储在~/.bash_history文件中。将以下行添加到 .bash_profile 并重新登录到 bash shell,将历史命令存储在 .commandline_warrior 文件而不是 .bash_history 文件中。我还没有弄清楚这个的实际用途。当您想要使用不同的历史文件名跟踪从不同终端执行的命令时,我可以看到这一点。

# vi ~/.bash_profile 
HISTFILE=/root/.commandline_warrior

如果您有充分的理由更改历史文件的名称,请与我分享,因为我很想知道您是如何使用此功能的。

8.使用HISTCONTROL从历史中消除连续重复条目

在下面的示例中,输入了 3 次 pwd,当您执行历史记录时,您可以看到它连续出现的所有 3 次。要消除重复项,请将 HISTCONTROL 设置为 ignoreups,如下所示。

# pwd
# pwd
# pwd
# history | tail -4
44  pwd
45  pwd
46  pwd 【注意历史上有3条pwd命令,后面如上图执行pwd 3次]
47  history | tail -4

# export HISTCONTROL=ignoredups
# pwd
# pwd
# pwd
# history | tail -3
56  export HISTCONTROL=ignoredups
57  pwd[注意历史上只有一个pwd命令,即使在如上图执行pwd 3次] 
58  history | tail -4

9. 使用 HISTCONTROL 擦除整个历史记录中的重复项

上面显示的 ignoreups 仅当它们是连续命令时才会删除重复项。要消除整个历史记录中的重复项,请将 HISTCONTROL 设置为 erasedups,如下所示。

# export HISTCONTROL=erasedups
# pwd
# service httpd stop
# history | tail -3
38  pwd
39  service httpd stop
40  history | tail -3

# ls -ltr
# service httpd stop
# history | tail -6
35  export HISTCONTROL=erasedups
36  pwd
37  history | tail -3
38  ls -ltr
39  service httpd stop
[注意pwd 被删除后之前的服务httpd 停止] 
40  history | tail -6

10. 使用 HISTCONTROL 强制历史记录不记住特定命令

当您执行命令时,您可以通过将 HISTCONTROL 设置为 ignorespace 并在命令前面键入一个空格来指示历史忽略该命令,如下所示。我可以看到很多初级系统管理员对此感到兴奋,因为他们可以从历史记录中隐藏命令。了解 ignorespace 的工作原理很好。但是,作为最佳实践,不要有目的地向历史隐瞒任何事情。

# export HISTCONTROL=ignorespace
# ls -ltr
# pwd
#  service httpd stop 【注意service开头有一个空格,从历史中忽略此命令] 
# history | tail -3
67  ls -ltr
68  pwd
69  history | tail -3

11. 使用选项 -c 清除所有以前的历史记录

有时您可能想清除所有以前的历史记录,但又想让历史记录向前推进。

# history -c

12. 历史命令中的替换词

在搜索历史记录时,您可能希望执行不同的命令,但使用与刚刚搜索的命令相同的参数。

在下面的示例中,vi 命令旁边的!!:$获取从前一个命令到当前命令的参数。

# ls anaconda-ks.cfg
anaconda-ks.cfg
# vi !!:$ 
vi anaconda-ks.cfg

在下面的示例中,vi 命令旁边的!^获取从前一个命令(即 cp 命令)到当前命令(即 vi 命令)的第一个参数。

# cp anaconda-ks.cfg anaconda-ks.cfg.bak
anaconda-ks.cfg
# vi !^ 
vi anaconda-ks.cfg

13. 用特定的参数替换特定的命令。

在下面的示例中,!cp:2搜索历史记录中以 cp 开头的上一个命令,并采用 cp 的第二个参数并将其替换为 ls -l 命令,如下所示。

# cp ~/longname.txt /really/a/very/long/path/long-filename.txt 
# ls -l !cp:2 
ls -l /really/a/very/long/path/long-filename.txt

在下面的示例中,!cp:$搜索历史记录中以 cp 开头的上一个命令,并采用 cp 的最后一个参数(在本例中,也是如上所示的第二个参数)并将其替换为 ls -l命令如下图。

# ls -l !cp:$ 
ls -l /really/a/very/long/path/long-filename.txt

14. 使用 HISTSIZE 禁用历史的使用

如果您想同时禁用历史记录并且不希望 bash shell 记住您输入的命令,请将 HISTSIZE 设置为 0,如下所示。

# export HISTSIZE=0 
# history 
# [注意history没有显示任何东西]

15. 使用 HISTIGNORE 忽略历史记录中的特定命令

有时,您可能不想用基本命令(例如 pwd 和 ls)弄乱您的历史记录。使用 HISTIGNORE 指定要从历史记录中忽略的所有命令。请注意,将 ls 添加到 HISTIGNORE 只会忽略 ls 而不是 ls -l。因此,您必须提供您希望从历史记录中忽略的确切命令。

# export HISTIGNORE="pwd:ls:ls -ltr:"
# pwd
# ls
# ls -ltr
# service httpd stop

# history | tail -3
79  export HISTIGNORE="pwd:ls:ls -ltr:"
80  service httpd stop
81  history
【注意历史没有记录pwd、ls和ls -ltr】
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。