临时 alias 只在当前 shell 进程有效,永久生效需写入 ~/.bashrc 并执行 source ~/.bashrc;引号必须用单引号避免提前解析,函数比 alias 更适合传参,绕过 alias 用 \cmd 或绝对路径。

别名设完就失效?不是命令写错了,是没搞清 shell 加载机制和引号规则。
临时 alias 只在当前终端里活
运行 alias ll='ls -l' 立刻能用,但关掉终端、新开一个、或者 SSH 重连后,ll 就报 command not found。这不是 bug,是设计如此——它只存在于当前 shell 进程的内存里。
- 适合快速测试语法,比如验证
grep -v能不能缩成grepv - 别在脚本里依赖临时 alias,它不会自动继承到子 shell
- 想确认是否生效,直接运行
alias ll,别用which ll(它查的是可执行文件路径,不是 alias)
永久生效必须写进 ~/.bashrc(不是 .bash_profile)
绝大多数人日常开的终端(GNOME Terminal、Konsole、iTerm2 新建 tab)走的是 non-login shell 流程,只读 ~/.bashrc;而 ~/.bash_profile 只在登录 shell(如 SSH 登录、图形界面首次启动终端)时读一次——漏掉它,90% 的“永久设置不生效”问题就在这儿。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 先确认 shell 类型:
echo $SHELL,如果是/bin/bash,就编辑~/.bashrc - 用
nano ~/.bashrc或其他编辑器,在文件末尾追加一行:alias gs='git status' - 保存后立刻生效:
source ~/.bashrc(不是source ~/.bash_profile) - 别把 alias 写在
if块或return后面——那些分支可能根本没执行到
带空格、管道、参数时,单引号是硬性要求
双引号或不加引号会让 shell 在定义阶段就尝试解析,导致 |、$、! 等字符提前触发扩展,结果和你想要的完全相反。
- 错:
alias psa="ps aux | grep"→|被当成当前命令分隔符,定义直接失败 - 对:
alias psa='ps aux | grep'→|作为字面量保留,调用时才执行管道 - 错:
alias grepv=grep -v→ shell 把它拆成三个词,grepv指向grep,后面-v被丢弃 - 函数更适合传参场景:
ll() { ls -la "$@"; },这样ll /tmp才能正确转发路径
别名冲突时,用反斜杠或绝对路径绕过
设了 alias rm='rm -i' 后,想某次跳过确认,别写 rm -f file——alias 展开后变成 rm -i -f file,-i 和 -f 冲突,仍会卡住。
- 临时绕过:
\rm -f file(反斜杠禁用 alias) - 或用绝对路径:
/bin/rm -f file - 全局 alias 放
/etc/bash.bashrc,但普通用户不该动它;多人共享机器时优先考虑用户级配置 - 大量别名建议拆到独立文件:
~/.bash_aliases,并在~/.bashrc里加if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases; fi
最常被忽略的一点:改完 ~/.bashrc 必须 source 才生效,不是保存就完事;而 source 报错(比如某行少了个单引号),后面所有 alias 都不会加载——检查 alias 输出列表是否包含你新加的那条,是最直接的验证方式。

















