永久生效 alias 需写入 shell 初始化文件(如 ~/.bashrc 或 ~/.zshrc),并执行 source 命令加载;复杂逻辑应使用函数而非 alias;系统级配置推荐 /etc/profile.d/ 下可执行脚本。

alias 命令本身不支持永久生效
执行 alias ll='ls -la' 确实能立刻用 ll,但关掉终端就没了——因为 alias 是 shell 会话级的临时设置,不是系统级配置。想“永久”保存,本质是让每次新打开 shell 时自动执行一遍 alias 定义。
永久生效得写进 shell 的初始化文件
不同 shell 加载的文件不同,绝大多数 Linux 发行版默认用 bash,所以优先改 ~/.bashrc;如果你用 zsh(比如 macOS Catalina 后或自己装的),就得改 ~/.zshrc。别乱写进 /etc/profile 或 ~/.bash_profile,除非你明确知道自己在做什么。
- 确认当前 shell:
echo $SHELL - 编辑对应文件:
nano ~/.bashrc(bash)或nano ~/.zshrc(zsh) - 在文件末尾追加你的 alias,例如:
alias ll='ls -la --color=auto' - 保存后,运行
source ~/.bashrc(或source ~/.zshrc)立即生效,不用重启终端
别名里带参数或复杂逻辑时,alias 不够用
alias 只做简单字符串替换,遇到带空格、管道、条件判断或需要传参的情况,容易出错。比如想写个 “删空目录” 别名:alias rmd='rmdir *' ——这会在定义时就展开 *,根本不是你想要的行为。
- 这种场景该用函数:在
~/.bashrc里写rmd() { rmdir "$@"; },然后source生效 - 函数能正确处理参数、引号、通配符,也支持 if/for 等逻辑
- alias 和函数不能同名,否则函数会覆盖 alias
- 别名中避免嵌套其他 alias,比如
alias ls='ls --color'+alias ll='ls -a',第二层不会继承颜色选项
系统级别别名要小心权限和作用域
想让所有用户都用某个别名?别直接往 /etc/bash.bashrc 或 /etc/profile.d/ 下扔文件——很多发行版(如 Ubuntu)默认不加载 /etc/bash.bashrc 给非登录 shell,而 Docker 容器、CI 脚本这类非交互式 shell 根本不读这些文件。
- 真正跨用户且稳定的方式:把别名写进
/etc/profile.d/my-aliases.sh,并确保该文件可执行(chmod +x) - 但要注意:普通用户仍可覆盖它(比如自己
~/.bashrc里再定义同名 alias) - 更稳妥的做法是封装成小脚本放
/usr/local/bin/,比依赖 alias 更可控
source,不然你以为生效了其实没动。还有人把 alias 写进 ~/.bash_profile 却用的是非登录 shell(比如平时开的 GNOME 终端默认就是非登录 shell),结果怎么都加载不出来——这个路径差异,最容易被忽略。










