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

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

最全面的 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 技术

推荐文章

Nginx 实操指南:从入门到精通
2024-11-19 04:16:19 +0800 CST
Golang中国地址生成扩展包
2024-11-19 06:01:16 +0800 CST
如何使用go-redis库与Redis数据库
2024-11-17 04:52:02 +0800 CST
js函数常见的写法以及调用方法
2024-11-19 08:55:17 +0800 CST
Elasticsearch 聚合和分析
2024-11-19 06:44:08 +0800 CST
PHP服务器直传阿里云OSS
2024-11-18 19:04:44 +0800 CST
16.6k+ 开源精准 IP 地址库
2024-11-17 23:14:40 +0800 CST
Vue3中如何进行性能优化?
2024-11-17 22:52:59 +0800 CST
CSS实现亚克力和磨砂玻璃效果
2024-11-18 01:21:20 +0800 CST
Vue3 vue-office 插件实现 Word 预览
2024-11-19 02:19:34 +0800 CST
四舍五入五成双
2024-11-17 05:01:29 +0800 CST
Vue3中如何使用计算属性?
2024-11-18 10:18:12 +0800 CST
Python Invoke:强大的自动化任务库
2024-11-18 14:05:40 +0800 CST
网站日志分析脚本
2024-11-19 03:48:35 +0800 CST
浏览器自动播放策略
2024-11-19 08:54:41 +0800 CST
Vue3中的v-bind指令有什么新特性?
2024-11-18 14:58:47 +0800 CST
记录一次服务器的优化对比
2024-11-19 09:18:23 +0800 CST
Python 基于 SSE 实现流式模式
2025-02-16 17:21:01 +0800 CST
程序员茄子在线接单