掌握 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并从命令行按回车键。
- 按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】
- 点赞
- 收藏
- 关注作者
评论(0)