Linux中如何快速调用刚执行过的命令?

在Linux命令行操作中,经常需要重复执行或引用刚执行的命令,无论是为了提高效率还是调试问题,熟练掌握命令历史调用技巧都非常重要,Linux的Shell(如Bash、Zsh等)提供了丰富的命令历史管理功能,通过内置的快捷方式、变量和工具,可以灵活调用历史命令。

linux中如何调用刚执行的命令

基础快捷方式:快速重复与引用

最常用的历史命令调用方式是通过“!”符号结合特定参数,直接引用或修改执行过的命令,这些快捷方式无需额外配置,在大多数Shell中默认可用。

重复执行上一条命令(!!)

最简单的场景是重复执行上一条命令,直接使用即可,执行ls -l后,若再次查看当前目录详细列表,只需输入并回车,Shell会自动替换为上一条完整的命令并执行。
示例

$ echo "Hello World"  # 执行后输出Hello World
$ !!                  # 自动执行echo "Hello World"

执行历史命令中的第n条(!n)

若要执行历史列表中编号为n的命令,可通过!n实现,历史编号可通过history命令查看(默认从1开始递增)。history显示第5条命令是pwd,则输入!5会直接执行pwd
示例

$ history            # 查看历史命令列表,假设第3条是cd /tmp
$ !3                 # 执行cd /tmp

执行倒数第n条命令(!-n)

除了正数编号,还可通过!-n引用倒数第n条命令。!-1等同于,!-2执行倒数第二条命令,这种方式在历史列表较长时比逐个查找编号更高效。
示例

$ date               # 倒数第一条
$ whoami             # 倒数第二条
$ !-2                # 执行whoami

通过字符串匹配执行命令(!string)

若记得命令中的部分关键字,可通过!string匹配最近一条包含该字符串的命令并执行,最近执行过grep "error" log.txt,则输入!grep会自动匹配并执行该命令。
示例

$ systemctl status nginx  # 假设这是最近包含"systemctl"的命令
$ !systemctl              # 执行systemctl status nginx

引用命令的参数(!$、!*)

有时需要重复使用上一条命令的参数,而非整个命令,引用最后一个参数,引用所有参数(用空格分隔),执行cp file1.txt /backup/后,若要将file2.txt也复制到同一目录,只需输入cp file2.txt !$,会被替换为/backup/
示例

linux中如何调用刚执行的命令

$ mv old_name.txt new_name.txt  # 移动文件
$ cp !$ backup/                 # 复制new_name.txt到backup/目录,!$=new_name.txt
$ rm !*                         # 删除上一条命令的所有参数(new_name.txt backup/)

历史命令管理工具:history与fc

除了快捷方式,Linux还提供了historyfc(fix command)两个工具,用于查看、编辑和执行历史命令。

history命令:查看与管理历史列表

history默认显示当前Shell会话中执行过的命令列表(带编号),常用选项包括:

  • -c:清空历史列表(仅当前会话)。
  • -w:将当前会话的历史写入历史文件(默认为~/.bash_history)。
  • -n:从历史文件中读取未读取的命令(追加到当前会话)。
    示例

    $ history 10          # 显示最近10条历史命令
    $ history -w          # 将当前会话历史保存到~/.bash_history

fc命令:编辑并执行历史命令

fc(Fix Command)允许以交互方式编辑历史命令后执行,语法为fc [选项] [旧命令编号] [新命令编号],常用选项:

  • -e:指定编辑器(如-e vi用vi编辑,-e nano用nano编辑)。
  • -l:仅列出历史命令,不执行(类似history)。
  • -s:直接执行指定编号的历史命令,不编辑。
    示例

    $ fc -e vi 5 10      # 用vi编辑第5到10条历史命令,保存后执行
    $ fc -s 8            # 直接执行第8条历史命令

历史命令的配置与持久化

通过Shell变量可调整历史命令的行为,这些变量通常定义在~/.bashrc(Bash)或~/.zshrc(Zsh)中,修改后需执行source ~/.bashrc生效。

常用配置变量

变量名 功能描述 默认值
HISTSIZE 内存中保存的历史命令数量(会话结束后写入历史文件) 500
HISTFILESIZE 历史文件(如~/.bash_history)的最大行数 5000
HISTCONTROL 控制历史命令的记录方式(ignoredups忽略重复命令,ignorespace忽略以空格开头的命令,ignoreboth两者都忽略)
HISTTIMEFORMAT 历史命令的时间戳格式(如"%Y-%m-%d %H:%M:%S "会在每条命令前显示时间)

示例配置(在~/.bashrc中添加):

export HISTSIZE=10000          # 内存保存10000条历史
export HISTFILESIZE=20000       # 历史文件保存20000条
export HISTCONTROL=ignoreboth  # 忽略重复和空格开头的命令
export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] "  # 显示时间戳

高级技巧:反向搜索与多Shell同步

Ctrl+R:反向搜索历史命令

在命令行按Ctrl+R后,输入关键词,Shell会实时反向搜索历史命令(从最新到最旧),再次按Ctrl+R继续向上搜索,找到后按回车执行,按Esc可复制到命令行编辑。
示例

linux中如何调用刚执行的命令

$ (按Ctrl+R)reverse-i-search:`': `grep`  # 输入grep,自动匹配最近的grep命令

多Shell会话同步历史

默认情况下,不同Shell会话的历史文件是独立的,退出会话后才会写入历史文件,若需实时同步,可在~/.bashrc中添加:

shopt -s histappend  # 追加历史,而非覆盖
export PROMPT_COMMAND="history -a; $PROMPT_COMMAND"  # 每次命令后立即保存历史

相关问答FAQs

Q1: 为什么有时执行提示“command not found”?
A: 通常是因为HISTCONTROL设置为ignorespaceignoreboth,且上一条命令以空格开头(Shell会忽略以空格开头的命令,不记录到历史),检查echo $HISTCONTROL,若包含ignorespace,需避免命令前加空格,或修改HISTCONTROLignoredups

Q2: 如何让Linux永久保存命令历史,即使重启后仍能查看?
A: 默认情况下,历史命令保存在~/.bash_history(Bash)或~/.zsh_history(Zsh)文件中,确保HISTFILESIZE变量设置足够大(如export HISTFILESIZE=100000),并在~/.bashrc中添加shopt -s histappend(避免历史被覆盖),重启后,历史文件会自动加载,可通过history查看历史记录。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/19451.html

(0)
酷番叔酷番叔
上一篇 2025年8月29日 08:07
下一篇 2025年8月29日 08:25

相关推荐

  • linux如何从硬盘启动项

    Linux 系统中,可通过设置 BIOS/UEFI 启动顺序,将硬盘设为首选

    2025年8月10日
    10700
  • Linux如何查询硬件序列号?

    在Linux系统中,序列号查询通常涉及硬件设备(如主板、CPU、硬盘、内存等)或操作系统本身的标识信息,不同硬件或系统组件的序列号存储位置和查询方式各异,需通过特定命令或工具获取,以下从硬件序列号、操作系统序列号两大类展开详细说明,涵盖常用命令、操作步骤及输出解读,硬件序列号查询方法硬件序列号是设备的唯一标识……

    2025年10月5日
    10900
  • Linux系统如何查看当前进程的数量?

    在Linux系统中,进程是程序执行的基本单位,监控当前进程的数量对于系统性能分析、故障排查和安全防护都具有重要意义,无论是系统管理员还是开发者,掌握查看进程数量的方法都是必备技能,本文将详细介绍Linux中查看当前进程数量的多种命令及其使用场景,帮助读者根据实际需求选择最合适的工具,使用ps命令查看进程数量ps……

    2025年9月28日
    10500
  • Linux如何显示当前路径?常用命令有哪些?

    在Linux操作系统中,路径是文件和目录在文件系统中的定位标识,理解如何显示和管理路径是高效使用Linux的基础,本文将详细讲解Linux中显示路径的核心命令、路径类型、环境变量配置及实用技巧,帮助用户全面掌握路径相关的操作,显示当前工作目录:pwd命令pwd(Print Working Directory)是……

    2025年10月5日
    10500
  • 如何移植Linux内核?

    移植Linux内核是一个涉及硬件适配、软件配置和系统调试的复杂过程,主要针对嵌入式设备或特定硬件平台,以下从环境准备、内核配置、编译优化、烧录调试等环节详细说明操作步骤和注意事项,移植前的环境准备移植内核前需搭建完整的开发环境,确保工具链和硬件支持到位,交叉编译工具链:根据目标板架构(如ARM、ARM64、RI……

    2025年8月30日
    8900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信