最简单可靠的方式是直接修改 /etc/bash.bashrc(Debian/Ubuntu)或 /etc/bashrc(RHEL/CentOS),添加 alias 即可全局生效;需避免覆盖 cd、rm 等关键命令;带参数需用函数并写入 "$@";zsh 用户须改 /etc/zsh/zshrc 或 zprofile。

直接改 /etc/bash.bashrc 最简单可靠
所有本地 Bash 用户默认都会读取 /etc/bash.bashrc,写在这里的 alias 一开新终端就自动生效,不用额外配置加载逻辑。Ubuntu/Debian 系统默认启用它;CentOS/RHEL 用的是 /etc/bashrc,路径不同但作用一样。
- 用
sudo nano /etc/bash.bashrc(Debian/Ubuntu)或sudo nano /etc/bashrc(RHEL/CentOS)打开文件 - 在文件末尾添加一行,比如:
alias dfh='df -h' - 保存后,新打开的终端立即可用;已登录用户执行
source /etc/bash.bashrc也能立刻加载 - 别名里避免覆盖关键命令(如
cd、rm),否则可能影响脚本或他人操作
/etc/profile.d/ 方式更干净,但需注意权限
把别名单独抽成脚本放 /etc/profile.d/ 目录下,是更模块化的方式,适合管理多个别名或配合部署流程。但必须确保文件可执行且不带扩展名(否则部分 shell 会忽略)。
- 新建文件:
sudo nano /etc/profile.d/myaliases.sh - 写入内容(注意开头不要漏
#!/bin/bash):#!/bin/bash<br>alias ..='cd ..'<br>alias ...='cd ../..'
- 设置可执行:
sudo chmod +x /etc/profile.d/myaliases.sh - 普通用户下次登录时生效;当前会话要手动
source /etc/profile.d/myaliases.sh - 如果文件名带
.sh后缀但没加#!/bin/bash,某些 shell 可能静默跳过——这是最常被忽略的点
别名带参数?必须用函数,alias 不行
系统级别名如果需要接收参数(比如 ll /tmp),alias 语法完全无法处理。这时候只能定义函数,并写进全局配置文件里。
- 在
/etc/bash.bashrc或/etc/profile.d/myaliases.sh中写函数,例如:ll() {<br> ls -la "$@"<br>} - 函数名和别名名可以一样,shell 会优先使用函数而非同名 alias
- 记得用
"$@"转发所有参数,否则ll -t /var这类调用会丢参数 - 函数里不能用
alias命令定义新别名——它只对当前 shell 生效,进不了全局上下文
zsh 用户怎么办?别硬套 bash 路径
如果系统里有人用 zsh(比如 macOS 或部分新发行版默认),/etc/bash.bashrc 对他们完全无效。zsh 的全局配置文件是 /etc/zsh/zshrc 或 /etc/zsh/zprofile,路径和加载时机都不同。
- 先确认哪些用户真正在用 zsh:
grep '/zsh' /etc/passwd | cut -d: -f1 - 给 zsh 用户加别名,得编辑
/etc/zsh/zshrc(交互式非登录 shell)或/etc/zsh/zprofile(登录 shell) - 如果混用 bash 和 zsh,又想统一别名,函数方式比 alias 更稳妥——函数语法在两种 shell 里基本一致
- 别忘了测试:
sudo -u someuser zsh -c 'll /tmp',别只在自己 bash 里验证
profile.d 文件的可执行位、或者在函数里漏了 "$@"。这些地方一错,别名看起来“写了”,却根本不动。


















