代码 最全面的 `history` 命令指南

2024-11-18 21:32:45 +0800 CST views 623

最全面的 history 命令指南

history 命令在 Linux 和 Unix 系统中扮演着重要角色,它记录了用户在终端中执行的所有命令,并提供了多种方式来管理和利用这些历史记录。本文将从基础到高级全面介绍 history 命令,包括相关的 Shell 设置和选项,如 set +o history

一、history 命令的基本用法

1. 显示命令历史

最常见的用法是直接输入 history,显示当前会话中的所有命令记录:

$ history

2. 显示指定数量的历史记录

你可以通过传递一个数字参数来限制显示的历史记录条数:

$ history 10

3. 清空历史记录

使用 -c 选项可以清空当前会话的所有历史记录:

$ history -c

4. 删除特定的历史记录

使用 -d 选项可以删除指定编号的历史记录:

$ history -d 5

5. 保存历史记录

使用 -w 选项可以手动将当前会话中的历史记录保存到历史文件中:

$ history -w

二、history 命令的高级用法和选项

1. -a:追加当前会话的历史记录到历史文件

将当前会话中的新命令追加到历史文件中,而不影响现有历史记录:

$ history -a

2. -n:从历史文件中读取新增的记录

读取历史文件中新增的命令,并将它们添加到当前会话的历史列表中:

$ history -n

3. -r:从历史文件中读取记录到当前会话

将历史文件中的命令读取到当前会话中,适用于多个会话共享历史记录的情况:

$ history -r

4. -w:将当前会话的命令写入历史文件

立即将当前会话的命令写入历史文件,不必等到会话结束:

$ history -w

5. -p:显示历史记录命令但不保存到历史记录中

-p 选项可以显示并执行一组命令,但这些命令不会被保存到历史记录中:

$ history -p 'ls -la'

6. -s:将命令追加到历史列表中

使用 -s 选项可以将特定命令手动添加到历史记录中,而不会执行该命令:

$ history -s "echo Hello World"

7. -o:将历史记录写入指定文件

使用 -o 选项可以将历史记录写入指定的文件,而不是默认的历史文件。这会覆盖目标文件中的内容:

$ history -o /path/to/filename

8. 使用 ! 执行历史记录中的命令

  • !!:重复执行上一条命令。

    $ !!
    
  • !n:执行编号为 n 的历史命令。

    $ !5
    
  • !string:执行最近一次以 string 开头的命令。

    $ !ls
    
  • !?string?:执行最近一次包含 string 的命令。

    $ !?cat?
    
  • !^:使用上一条命令的第一个参数。

    $ echo !^
    
  • !$:使用上一条命令的最后一个参数。

    $ echo !$
    

9. HISTTIMEFORMAT:显示命令执行时间

通过设置 HISTTIMEFORMAT 变量,可以在历史记录中显示每条命令的执行时间:

export HISTTIMEFORMAT="%F %T "

重新加载 .bashrc 文件后,将在 history 输出中看到时间戳:

$ source ~/.bashrc

10. HISTCONTROL:管理历史记录的行为

HISTCONTROL 变量允许你控制哪些命令被记录在历史中:

  • ignoredups:忽略重复的命令。
  • ignorespace:忽略以空格开头的命令。
  • ignoreboth:同时忽略重复命令和以空格开头的命令。

设置示例:

export HISTCONTROL=ignoreboth

11. HISTIGNORE:忽略特定命令

通过设置 HISTIGNORE 变量,可以指定不保存到历史记录中的命令。你可以指定多个命令,使用 : 分隔:

export HISTIGNORE="ls:pwd:exit"

12. HISTSIZEHISTFILESIZE:控制历史记录的大小

  • HISTSIZE:控制内存中保留的历史记录条数。
  • HISTFILESIZE:控制历史文件中保留的历史记录条数。

设置示例:

export HISTSIZE=1000
export HISTFILESIZE=2000

13. HISTFILE:指定历史记录文件

通过设置 HISTFILE 变量,你可以指定保存历史记录的文件路径:

export HISTFILE=~/.my_custom_history

14. HISTCMD:获取当前命令的历史编号

HISTCMD 变量保存了当前命令在历史记录中的编号,你可以使用它来跟踪当前命令的历史编号:

echo "当前命令编号是:$HISTCMD"

15. shopt -s histappend:追加历史记录

默认情况下,每次会话结束时,历史记录文件会被覆盖。使用 shopt -s histappend 可以将新命令追加到历史文件中,而不是覆盖它:

shopt -s histappend

16. shopt -s cmdhist:多行命令存储为一条历史记录

启用 cmdhist 后,输入的多行命令将作为一条命令存储在历史记录中:

shopt -s cmdhist

17. shopt -s lithist:多行命令在历史记录中显示时保留原格式

启用 lithist 后,多行命令在历史记录中显示时将保留其原始格式:

shopt -s lithist

18. !$!* 引用参数

  • !$:引用上一条命令的最后一个参数。

    $ echo !$
    
  • !*:引用上一条命令的所有参数。

    $ cp /path/to/file /backup/
    $ mv !* /another_location/
    

19. ^old^new:替换历史命令中的文本

history 允许你对上一条命令进行快速的文本替换:

$ ^Hello^Hi

20. Ctrl + r:反向搜索历史记录

Ctrl + r 可以启动反向搜索,通过输入关键词搜索历史记录:

(reverse-i-search)`ls': ls -la

三、Shell 设置与历史记录的高级管理

1. set +o historyset -o history

使用 set +o history 可以暂时禁用命令历史记录功能。这意味着在禁用期间,任何输入的命令都不会被保存到历史记录中。要重新启用历史记录,可以使用 set -o history

# 禁用历史记录
$ set +o history

# 启用历史记录
$ set -o history

2. PROMPT_COMMAND 和自动保存历史记录

PROMPT_COMMAND 是一个环境变量,它包含的命令会在每次显示提示符之前执行。你可以利用它来自动保存历史记录:

export PROMPT_COMMAND='history -a; history -n'

这个设置会在每次命令执行后立即保存历史记录,并从文件中读取新记录,以确保多个终端会话之间的历史记录同步。

3. history -d -$HISTCMD

这个组合命令允许你删除当前执行的命令,确保它不会被保存到历史记录中。

复制全文 生成海报 Linux Unix 命令行 Shell 技术

推荐文章

mysql关于在使用中的解决方法
2024-11-18 10:18:16 +0800 CST
全新 Nginx 在线管理平台
2024-11-19 04:18:33 +0800 CST
一个简单的打字机效果的实现
2024-11-19 04:47:27 +0800 CST
js常用通用函数
2024-11-17 05:57:52 +0800 CST
nginx反向代理
2024-11-18 20:44:14 +0800 CST
Rust 高性能 XML 读写库
2024-11-19 07:50:32 +0800 CST
php腾讯云发送短信
2024-11-18 13:50:11 +0800 CST
MySQL用命令行复制表的方法
2024-11-17 05:03:46 +0800 CST
go发送邮件代码
2024-11-18 18:30:31 +0800 CST
使用Rust进行跨平台GUI开发
2024-11-18 20:51:20 +0800 CST
Vue3中如何实现国际化(i18n)?
2024-11-19 06:35:21 +0800 CST
Nginx rewrite 的用法
2024-11-18 22:59:02 +0800 CST
一文详解回调地狱
2024-11-19 05:05:31 +0800 CST
JavaScript 异步编程入门
2024-11-19 07:07:43 +0800 CST
JavaScript设计模式:观察者模式
2024-11-19 05:37:50 +0800 CST
使用Vue 3实现无刷新数据加载
2024-11-18 17:48:20 +0800 CST
程序员茄子在线接单