同样是用终端,有人敲一条命令要想五秒钟、翻半天历史记录;有人噼里啪啦几下就完成了,还带自动补全和高亮。差距不在记忆力,而在配置:Shell 是一个高度可定制的工作台,花半小时调教,之后每天都能省下几十分钟。这篇文章以 Linux 和 macOS 的 Bash 为主(Windows 用户可以装 WSL 或 Git Bash 跟着练),从别名、补全、历史记录到分屏终端,一步步把终端变成你的效率神器。

1. 终端、Shell 与配置文件

先分清三个概念:终端是窗口程序(如 Windows Terminal、iTerm2),负责显示和接收输入;Shell 是解释命令的程序(Bash、Zsh),负责理解你敲的每个词;命令行是人和 Shell 对话的方式。绝大多数 Linux 默认 Shell 是 Bash,它的配置文件是 ~/.bashrc——每次打开新终端都会自动加载,我们所有的自定义都写在这里。

# 看看当前用的是哪个 Shell
echo $SHELL
# 查看配置文件是否存在
ls -la ~/.bashrc
# 让修改立即生效(不用重开终端)
source ~/.bashrc

echo $SHELL 输出的路径末尾就是 Shell 的名字。~ 是"当前用户主目录"的简写。source 命令重新执行一遍配置文件,是"改完配置立刻生效"的标准动作——改完 .bashrc 记得执行它。

2. 别名:给长命令起小名

每天都要敲 git status、ls -la?用 alias 给它们起个两三字母的小名,能省下的按键次数相当可观。

# 临时别名(当前终端有效,关掉就没了)
alias ll='ls -la'
alias gs='git status'
alias gd='git diff'
alias up='cd .. && ls'

# 查看当前所有别名
alias

临时别名只活在当前终端,想永久生效就把同样的 alias 行写进 ~/.bashrc。注意 up 这种组合命令要用引号包住,里面 && 表示"前一条成功才执行后一条"。起名原则:短、好敲、不容易和已有命令冲突。

如果别名和某个已有命令重名,别名会优先——想临时绕过别名用原命令,在命令前加反斜杠,比如 \ls。删除别名用 unalias ll,查看某个别名的定义用 alias ll。想搞清楚一个名字到底是别名、函数还是系统程序,用 type 名字,输出会明确告诉你。

3. 补全与历史记录:少打字,多干活

Shell 自带的 Tab 补全是最被低估的功能:输入命令、路径、参数的前几个字母,按 Tab 自动补全,再按一次列出所有候选。而 history 命令记录了你敲过的每一条命令,配合几个快捷键,重复劳动基本消失。

# 查看最近的命令历史
history
# 只看和 git 有关的
history | grep git
# 重复执行上一条命令
!!
# 用管理员权限重跑上一条命令
sudo !!

!! 是"上一条命令"的简写,sudo !! 是"权限不够时重跑刚才那条"的经典救场。Ctrl + R 进入反向搜索:输入几个字母,自动匹配历史里最接近的一条,回车直接执行——比翻 history 输出快得多。这三个技巧练熟,重复敲命令的时间基本归零。

历史记录还可以调教:默认只保存最近 1000 条,想多存就在 .bashrc 里写 export HISTSIZE=10000 和 export HISTFILESIZE=20000;总被重复命令刷屏?加一行 export HISTCONTROL=ignoredups,连续重复的命令只记一条。这些变量和别名一样写在配置文件里,source 后生效。历史记录默认存在 ~/.bash_history,感兴趣可以 cat 看看,那其实是你自己写的一部"命令流水账"。

4. 自定义提示符:让 PS1 告诉你状态

提示符(命令左边那一串字)由环境变量 PS1 控制,默认通常只有用户名和路径。稍微改一改,就能让它显示 Git 分支、当前时间,信息都在眼前,就不用老想着"我是不是漏了什么"。

# 用户名@主机名:当前目录,换行后是 $ 提示符
export PS1='\u@\h:\w\n\$ '

# 加上 Git 分支(如果当前目录是 Git 仓库)
export PS1='\u@\h:\w $(git branch 2>/dev/null | grep "^*" | tr -d "* ")\$ '

\u 是用户名,\h 是主机名,\w 是当前完整路径,\n 换行。第二行把 git branch 的输出塞进提示符,你就能随时看到自己在哪个分支——2>/dev/null 是把错误信息扔掉(非 Git 目录时不报错),\$ 是"普通用户显示 $,root 显示 #"。把这两行写进 .bashrc 就永久生效。

5. 函数:把套路固化成命令

别名只能做"替换",想写逻辑就要用 Shell 函数。比如"创建目录并进入"是最高频的操作组合,一个函数搞定:

# 在 ~/.bashrc 里加上这个函数
mkcd() {
  mkdir -p "$1" && cd "$1"
}

# 之后直接使用
mkcd my_new_project

函数体里 $1 是第一个参数。有了 mkcd,"建文件夹加进去"从两条命令变成一条。想扩展成"建完顺便初始化 Git 仓库"?在函数里加一行 git init 即可——Shell 函数就是你自己的微型命令行工具库。

函数的参数不止 $1:$2、$3 依次是第二、第三个参数,$# 是参数个数,$@ 是全部参数。比如给 mkcd 升级成"建目录并进入,顺便输出提示",函数体里多写一行 echo "已进入 $1" 即可。再看一个批量备份的套路:backup() { cp -r "$1" "$2"; echo "备份完成: $1 -> $2"; },调用 backup ./docs ./backup 就把整个目录复制过去了。$? 表示上一条命令的退出状态码,0 代表成功,非 0 代表出错,在函数里判断它就能实现"失败就停下来"的健壮逻辑。会写两三个这样的小函数,你就正式从"敲命令的人"变成"造命令的人"了。

6. 多标签与分屏:tmux

同时开着七八个终端窗口是灾难。方案有二:终端程序自带的多标签(Windows Terminal 的 Ctrl + Shift + T,iTerm2 的 Cmd + D 分屏);或者用 tmux——一个运行在 Shell 里的"终端管理器",即使 SSH 断线,会话里的程序也不会中断,重连后原样恢复,服务器运维必备。

# 安装 tmux(Ubuntu/Debian)
sudo apt install tmux
# 新建一个名为 work 的会话
tmux new -s work
# 从会话里分离(程序继续在后台跑)
# 快捷键:先按 Ctrl+b,再按 d
# 重新连回会话
tmux attach -t work
# 列出所有会话
tmux ls

tmux 的所有操作都先按前缀 Ctrl + b:再按 % 左右分屏、" 上下分屏、c 新建标签页、d 分离。这套"前缀加单键"的设计记住前三个就够日常使用了。重点理解"分离"的含义:关掉终端窗口,会话依然活着,这是 tmux 比普通多标签强的地方。

tmux 的会话管理再补三个:tmux kill-session -t work 彻底销毁会话(里面的程序也会终止),tmux rename-session -t work dev 给会话改名,tmux list-keys 查看所有快捷键。日常组合拳是:上班 tmux new -s work,下班 Ctrl + b 再按 d 分离,第二天 tmux attach 原样接上——服务器上的长任务(比如编译、数据同步)从此再也不怕断网中断。

7. 换个更顺手的 Shell:Zsh

Bash 是"能用",Zsh 是"好用":补全更智能(大小写不敏感、路径自动纠错)、插件生态丰富。macOS 默认就是 Zsh;Linux 装一下,再配合 oh-my-zsh 框架,几分钟就能拥有漂亮主题和开箱即用的插件。

# Ubuntu/Debian 安装 Zsh
sudo apt install zsh
# 安装 oh-my-zsh(会自动把默认 Shell 切到 zsh)
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# 确认当前 Shell
echo $SHELL

装完后你的提示符会变成彩色主题,git 补全开箱即用(输入 gst 就是 git status,gp 就是 git push)。注意安装脚本需要联网访问 GitHub,网络受限时先配置代理或镜像。Zsh 的配置文件是 ~/.zshrc,之前学的别名、函数照搬过去同样生效。

oh-my-zsh 的配置写在 ~/.zshrc 里:改 ZSH_THEME 换主题(推荐 agnoster 或 powerlevel10k,颜值和实用性兼顾),在 plugins=(git) 里加插件名启用更多快捷方式(比如 z 插件可以"跳转到最近去过的目录")。装了新插件后记得 source ~/.zshrc 或重开终端。注意别一次装十几个插件,主题加两三个高频插件就够,插件越多启动越慢。

8. 总结与练习

这篇你学会了:分清终端、Shell、命令行,用 ~/.bashrc 持久化配置;用别名缩短高频命令;用 Tab 补全和 Ctrl + R 告别重复输入;自定义 PS1 提示符显示 Git 分支;用函数固化操作套路;用 tmux 管理多会话;最后认识了 Zsh 这个更强大的 Shell。练手三题:

💡 配置文件的改动尽量小而可解释:每加一段,旁边用 # 注释说明用途。三个月后回看,你会感谢当时写注释的自己。