Zsh 命令速查表 - Shell 终端配置常用命令大全

默认 shell 换成 zsh 之后,真正带来效率提升的不是命令语法,而是三件事:更聪明的补全、按前缀搜索的历史、把提示符变成信息面板。这张表按基础配置、变量与数组、通配与扩展、历史与搜索、函数与补全、提示符定制、oh-my-zsh 与插件七组组织,正对应 .zshrc 里会被反复改的部分。几个判断点写在表内:zsh 数组下标从 1 开始而 bash 从 0 开始,迁移老脚本时这条最容易出错;setopt AUTO_CD 允许直接输入目录名回车进入,配合 AUTO_PUSHD 把访问过的目录压栈,cd -<Tab> 就是跳转列表。历史一组的关键是 bindkey 后接 history-search-backward,把上下键从「翻时间」改成「按当前前缀搜」。oh-my-zsh 每次启动有开销,生产机器上只取需要的插件。

系统与运维·共 37 条命令·最后更新 2026-07-21
zshshell终端oh-my-zsh

典型使用场景

面向把默认 shell 换成 zsh 的开发者:让补全、历史检索、别名与提示符真正替自己干活。zsh 相对 bash 多出来的价值集中在三处——递归通配(**)、可复制的历史搜索(Ctrl+R)、以及 glob 限定符(*(om[1]) 取最新文件)。本表覆盖 .zshrc 高频配置项与 oh-my-zsh 插件用法,适合刚换 shell 的一周内集中过一遍,之后按需回查。

基础配置 5

chsh -s $(which zsh)
切换默认 Shell 为 zsh
source ~/.zshrc
重新加载配置
echo $SHELL
查看当前 Shell
setopt AUTO_CD
输入目录名即可 cd,无需写 cd
setopt CORRECT
命令拼写错误时提示纠正

变量与数组 6

NAME="value"
定义变量(等号两边不能有空格)
arr=(a b c)
定义数组(zsh 下标从 1 开始)
echo $arr[1]
访问数组第一个元素
echo ${arr[@]}
访问数组所有元素
${#arr[@]}
获取数组长度
typeset -A dict\ndict[key]=value
定义关联数组(哈希表)

通配与扩展 6

**/*.js
递归匹配所有子目录的 .js 文件
*.{js,ts}
花括号扩展,匹配多种后缀
*(.)
只匹配普通文件(glob 限定符)
*(/)
只匹配目录
*(om[1])
最新修改的一个文件
=ls
等号扩展为命令的完整路径

历史与搜索 6

HISTSIZE=10000 / SAVEHIST=10000
内存与文件历史条数
setopt SHARE_HISTORY
多终端实时共享历史
Ctrl+R
反向增量搜索历史命令
!!
执行上一条命令(sudo !! 最常用)
!$
上一条命令的最后一个参数
history -i | tail
带时间戳查看历史

函数与补全 4

function name() { ... }
定义函数
alias ll="ls -la"
设置别名
autoload -Uz compinit && compinit
初始化补全系统
compdef _git g=git
为别名 g 复用 git 的补全

提示符定制 5

PROMPT='%n@%m %~ %# '
用户名@主机 路径 提示符
%n / %m / %M
用户名 / 短主机名 / 完整主机名
%~ / %d
当前目录(~ 缩写)/ 绝对路径
RPROMPT="%T"
右侧提示符显示当前时间
%T / %D / %W
24 小时时间 / 年月日 / 月日年

oh-my-zsh 与插件 5

plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
启用插件列表
ZSH_THEME="robbyrussell"
设置主题(random 随机切换)
zsh-autosuggestions
自动建议补全,按 -> 接受
zsh-syntax-highlighting
命令语法高亮(红表示错误)
extract file.tar.gz
extract 插件自动识别格式解压

参数矩阵

参数作用示例
setopt AUTO_CD输入目录名即进入,无需写 cdsetopt AUTO_CD
setopt CORRECT命令拼错时提示纠正setopt CORRECT
HISTSIZE / SAVEHIST内存与文件的历史条数,两者都设才生效HISTSIZE=10000; SAVEHIST=10000
setopt SHARE_HISTORY多终端实时共享历史记录setopt SHARE_HISTORY
Ctrl+R反向增量搜索历史命令Ctrl+R 后输入 git 关键词
!!执行上一条命令,sudo !! 是经典组合sudo !!
!$上一条命令的最后一个参数mkdir -p /var/log/app; cd !$
**/*.js递归匹配所有层级的 .js 文件ls **/*.js
*.{js,ts}花括号扩展,一次匹配多种后缀ls *.{js,ts}
*(om[1])glob 限定符:取最近修改的一个文件ls -t *(om[1])
compdef _git g为别名 g 复用 git 的补全compdef _git g=git
%~ / %n / %T提示符占位符:当前目录 / 用户名 / 时间PROMPT='%n@%m %~ %# '

易错点与避坑指南

现象脚本从 bash 换到 zsh 后数组取值全为空,${arr[0]} 拿不到第一个元素。

原因zsh 数组默认从下标 1 开始,而 bash 从 0 开始。

处置改用 ${arr[1]},或执行 emulate sh / setopt KSH_ARRAYS 让行为贴近 bash。

现象在 .zshrc 里定义了 alias 后,同一行继续用该别名没有生效。

原因alias 在同一次读取中只对其后的命令生效。

处置把 alias 单独放一行,或改用函数 function name() { ... }。

现象装上 zsh-syntax-highlighting 后命令高亮不工作或报错。

原因插件加载顺序不对,highlighter 必须在 plugins 数组最后加载。

处置写 plugins=(git zsh-autosuggestions zsh-syntax-highlighting),把 highlighter 放到末尾。

现象切到 zsh 后进不去交互 shell,只能走 sh 兜底。

原因~/.zshrc 存在语法错误,启动时解析中断。

处置用 zsh -n ~/.zshrc 做语法检查(只解析不执行),定位到错误行先注释掉。

现象zsh-autosuggestions 的灰色建议按方向键不接受。

原因默认接受键是 →(右方向键),按 End 或空格无效。

处置按 → 接受整条建议;只接受单词需额外配置。

现象Ctrl+R 搜到的命令执行后发现参数不对,但历史里只有这一条。

原因历史中未保存该命令的变体。

处置提高历史条数:HISTSIZE=10000 SAVEHIST=10000,并用 history -i | tail 看带时间戳的历史。

排障路径

  1. 1确认当前 shell 与配置是否生效

    echo $SHELL && zsh -n ~/.zshrc

    前者看登录 shell,后者只做语法检查(-n),能定位 .zshrc 的解析错误。

  2. 2改完配置立即重载

    source ~/.zshrc

    每次改 .zshrc 后执行一次;可写成 alias reload-cfg="source ~/.zshrc" 省事。

  3. 3递归查找任意层级的 .js 文件

    ls **/*.js

    ** 是 zsh 的递归通配;bash 需先开启 globstar(shopt -s globstar)。

  4. 4取出最近修改的那个日志文件

    ls -t *(om[1])

    (om[1]) 是 glob 限定符,o 按修改时间排序取第 1 个;bash 需 find + printf。

  5. 5在历史里搜含关键字的命令并直接执行

    git rebase

    输入前缀后按 Ctrl+R 向上检索,回车执行;配 SHARE_HISTORY 多终端实时共享。

命令示例

交互式取历史里最近的匹配命令

git rebase

直接在终端输入 git rebase 再按 Ctrl+R,会向上检索含该前缀的历史,方向键或 Enter 直接执行。配 setopt SHARE_HISTORY 多终端历史实时共享。

复用上一条命令的最后一个参数

mkdir -p /var/log/myapp cd !$

!$ 展开为上一条命令的最后一个参数,!^ 是第一个,!! 是整条。sudo !! 是最经典的组合——先执行一条危险命令,再用同样的参数加 sudo 重跑。

递归匹配任意层级的文件

ls **/*.ts ls *(om[1]).log

** 递归匹配所有层级(bash 需开启 globstar);*(om[1]) 是 glob 限定符,取最近修改的一个 .log 文件。bash 要用 find 配合 -printf 才能做到。

输出

src/index.ts
src/api/client.ts
src/api/auth/login.ts

改完 .zshrc 立即生效

source ~/.zshrc

每次改动后执行一次;写成 alias reload-cfg="source ~/.zshrc" 更方便。注意 alias 在同一个文件里定义后不会作用于该行本身。

常见坑与注意事项

  • zsh 数组从 1 开始,${arr[0]} 是空元素,跨 shell 脚本里最容易踩。
  • alias 定义在同一行之后才对后续命令生效,把 alias 和用法写在同一行不起作用。
  • 插件顺序有要求,zsh-syntax-highlighting 必须放在 plugins 数组最后加载。
  • ${#arr[@]} 在 zsh 与 bash 下行为一致,但 ${arr[@]} 的展开方式不同,跨 shell 脚本需显式加引号。
  • 直接替换系统 shell 前先验证 ~/.zshrc 无语法错误;一个语法错误会让你进不去交互 shell。

提示

  • oh-my-zsh 安装:sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
  • zsh-autosuggestions 需要单独安装插件,推荐用 git clone 到 $ZSH_CUSTOM/plugins/。
  • setopt AUTO_CD 可以直接输入目录名 cd 进去,不用写 cd 命令。
  • 让上下箭头按前缀搜索历史:bindkey 加 history-search-backward/forward。
  • zsh 数组下标从 1 开始(与 bash 从 0 开始不同),迁移脚本时要注意。
  • ZDOTDIR 环境变量可改变 zsh 配置文件目录,便于多套配置隔离。
  • autoload -Uz compinit && compinit 能打开 zsh 自带的补全框架,很多 oh-my-zsh 插件实际依赖它先完成初始化。
  • setopt HIST_IGNORE_DUPS 在写入时就丢弃连续重复项,比事后用 HIST_IGNORE_ALL_DUPS 清理更省内存且历史文件更小。
  • 在 .zshrc 末尾加 echo $? 之类的方式调试配置报错时,可用 typeset -p 打印变量是否展开成功,比逐步 echo 更快定位。

常见问题

zsh 数组的下标从几开始?

zsh 默认数组从 1 开始,而 bash 是从 0 开始。这个差异是跨 shell 脚本最常见的坑之一:在 zsh 里 ${arr[0]} 引用的是空元素而非第一个元素,正确的写法是 ${arr[1]}。想让 zsh 表现得像 bash,可执行 emulate sh 或 setopt KSH_ARRAYS。

Ctrl+R 之外,zsh 还有哪些好用的历史搜索方式?

Ctrl+R 是反向增量搜索,重复按可继续往前翻。除此之外还有几个实用技巧:!! 复用上一条命令,sudo !! 是最经典的组合;!$ 取上一条命令的最后一个参数,比如 mkdir -p /var/log/app 后 cd !$ 就直接进目录;!^ 取第一个参数。setopt SHARE_HISTORY 还能让多个终端窗口实时共享历史记录。

zsh 的通配符比 bash 强在哪?

主要有三点。一是 ** 递归匹配子目录,bash 需要开启 globstar 才能做到;二是花括号扩展 *.{js,ts} 一次匹配多种后缀,不用写多个模式;三是 glob 限定符,例如 *(.) 只匹配普通文件、*(/) 只匹配目录、*(om[1]) 取最新修改的那一个。bash 里要用 find 才能实现类似筛选。

怎么给 zsh 配置语法高亮和自动建议?

装两个插件即可:zsh-syntax-highlighting 让命令语法实时高亮(命令拼错显示为红色),zsh-autosuggestions 根据历史给出灰色建议,按 → 键接受。在 .zshrc 里写 plugins=(git zsh-autosuggestions zsh-syntax-highlighting) 并启用 compinit 补全系统。注意 highlighter 必须放在 plugins 数组的最后加载。

zsh 的提示符里 %~ %n %T 分别代表什么?

%n 是用户名,%m 是短主机名,%M 是完整主机名;%~ 是当前路径并把主目录缩写为 ~,%d 则是完整绝对路径;%T 是 24 小时制时间,%D 是年月日,%W 是月日年。典型配置 PROMPT='%n@%m %~ %# ' 显示「用户名@主机 路径」再加一个提示符,%# 在普通用户显示 $、root 显示 #。

官方参考来源

下方为命令对应的官方权威文档,供你核对最新用法与深入查阅。

由 巧匠 维护

公开更新于 2026年7月21日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们