别名默认仅当前终端生效,永久生效需写入~/.bashrc或~/.zshrc并source;复杂功能须用函数替代;绕过别名可用\命令、绝对路径或别名末尾加空格。

别名默认只在当前终端生效,想让 alias 全局或长期可用,必须写进 Shell 初始化文件并正确重载——不是“写完就自动生效”,也不是所有配置文件都管用。
临时 alias 只在当前终端起作用
直接运行 alias ll='ls -la',ll 立刻能用,但新开一个终端或关掉当前窗口就失效。这不是 bug,是 Bash 的设计:每个 shell 进程独立维护自己的别名表。
常见错误现象:
- 设置完
alias gs='git status',新开终端输gs报command not found - 误以为
sudo alias foo='bar'能让 root 也用上(实际 root 的 shell 环境完全隔离)
永久生效得写对配置文件并 source
用户级永久配置,99% 的情况只需改 ~/.bashrc(Bash)或 ~/.zshrc(Zsh)。先确认你的 shell:
echo $SHELL
输出 /bin/bash 就编辑 ~/.bashrc;输出 /bin/zsh 就编辑 ~/.zshrc。
实操建议:
- 追加一行别名定义:
echo "alias ll='ls -la --color=auto'" >> ~/.bashrc - 立即生效:
source ~/.bashrc(不是bash ~/.bashrc,后者会启动子 shell,改的不是当前环境) - 别往
/etc/profile或/etc/bash.bashrc乱写——除非你真有 root 权限且要给所有用户统一设别名
带参数或复杂逻辑别名得用函数
alias 本质是字符串替换,不支持位置参数传递。比如 alias ll='ls -la' 后执行 ll /tmp,Bash 不会把 /tmp 自动传给 ls,而是报错或行为异常。
正确做法是用函数替代:
ll() { ls -la "$@"; }
写进 ~/.bashrc 并 source 后,ll /tmp、ll -t 都能正常工作。$@ 会原样转发所有参数,这是函数比别名更可靠的地方。
绕过别名执行原始命令的三种方式
当某个命令(如 cp)被设为别名后,有时你想跳过它直接调用系统原始程序:
- 加反斜杠:
\cp file1 file2—— 最常用,推荐记牢 - 用绝对路径:
/bin/cp file1 file2—— 需知道可执行文件真实位置 - 别名末尾加空格:
alias sudo='sudo '(注意空格)—— 这样后续命令会被 shell 重新解析,避免别名嵌套
安全类别名(如 alias rm='rm -i')一旦写进配置文件,就很难绕过,所以务必确认自己理解其行为——删错文件时不会二次确认,因为 -i 已被固定注入。


















