讲解
shell 会记住你执行过的命令,这是命令行效率的重要来源。按上箭头逐条翻,Ctrl+R 进入反向搜索(输入关键词实时匹配历史,再按 Ctrl+R 找更早的,回车执行),history 命令列出编号清单。三个历史展开符号很实用:!! 重复上一条命令(最经典的场景是 sudo !!——忘了加 sudo 时的补救),!n 重放第 n 条,!关键词 重放最近一条以该关键词开头的命令。历史默认在退出终端时写入 ~/.bash_history 或 ~/.zsh_history。
别名(alias)给长命令起短名字:alias ll='ls -lh' 之后输入 ll 就等于输入 ls -lh。查看当前所有别名直接输入 alias,删除用 unalias ll。别名只对当前会话有效,长期使用要写进 ~/.zshrc。常见的实用别名还有 alias grep='grep --color=auto'(Linux)、alias ..='cd ..'。
别名有两个局限要知道:一是不能带参数逻辑(比如「把参数插到命令中间」就做不到),这种情况用 shell 函数;二是在非交互的脚本里别名默认不展开——脚本里请直接用函数或完整命令。函数的定义是 名字() { 命令 "$@"; },"$@" 代表收到的所有参数,函数在脚本和交互终端里都可靠工作。
示例
脚本环境里别名不可靠,用函数才是正解:
# 定义一个函数:带颜色地列出文件(参数原样转发)
ll() {
ls -lh "$@"
}
# 像命令一样使用
ll notes.txt
ll docs
别名和历史命令是交互终端里的功能,真实终端里这样用:
# 仅示意:定义别名(写进 ~/.zshrc 可永久生效)
alias ll='ls -lh'
alias gs='git status'
# 仅示意:历史命令三板斧
history | tail -n 5
sudo !!
# 仅示意:Ctrl+R 反向搜索历史,输入关键词回车执行
常见坑
- 脚本里用别名不生效:非交互 shell 默认不展开别名,脚本里写函数或完整命令。
- 别名里塞复杂逻辑:alias 只能做字符串替换,带条件、带循环的需求请写函数。
- 密码进了历史:命令行里直接敲密码会被记入历史文件。敏感命令前加一个空格,配合 HISTCONTROL=ignorespace 可以不入历史。
- 改了别名当前窗口没生效:改完 ~/.zshrc 要 source 一下或开新终端。
小结
上箭头和 Ctrl+R 翻历史,!! 和 !n 重放;alias 起短名、函数处理复杂逻辑,长期配置写进 shell 配置文件。最后一节总结命令行的安全与高效习惯。