温馨提示×

centos aliases优先级怎样

小樊
41
2026-09-21 07:25:42
栏目: 智能运维

在 CentOS(以及一般的 Linux shell,如 bash)中,alias(别名)的优先级遵循一定的规则,理解这些规则有助于排查命令“为什么执行的不是我想要的”。


一、命令解析的一般优先级(bash 中)

在 bash 里,当你输入一条命令时,shell 大致按以下顺序判断:

✅ 优先级从高到低(常见情况)

  1. 别名 alias(最高优先级)
  2. shell 内建命令(builtin)
  3. 函数 function
  4. 外部命令( PATH 中的可执行文件)

⚠️ 注意:
实际上更准确的说法是
alias > function > builtin > external command
但 alias 只在“交互式 shell + 非引用命令”时生效。


二、alias 的真实行为细节

1️⃣ alias 优先于一切(包括 builtin 和命令)

例如:

alias ls='ls --color=auto'

此时你输入:

ls

✅ 实际执行的是:

ls --color=auto

即使 /bin/ls 存在,也不会直接用。


2️⃣ alias 不能覆盖 shell 关键字(keyword)

例如:

ifforwhilecase

这些不是 alias,也不是 builtin,而是 shell 关键字,优先级比 alias 高。

alias if='echo haha'
if  # 仍然是 shell 的 if

3️⃣ alias 只在“交互式非登录/登录 shell”中默认启用

  • 脚本中默认 不展开 alias
  • 若要在脚本中用 alias:
shopt -s expand_aliases

4️⃣ 引号会阻止 alias 展开

'ls'     # 不展开 alias
"ls"     # 不展开 alias
\ls      # 不展开 alias

这是绕过 alias 的常用方法。


三、alias vs function vs builtin 示例

alias pwd='echo alias_pwd'
pwd
# 输出 alias_pwd

function pwd() {
  echo func_pwd
}
pwd
# 输出 func_pwd(function 覆盖 alias)

unalias pwd
pwd
# 输出 builtin pwd 的结果

四、如何查看当前优先级来源

查看是否是 alias

type ls

输出示例:

ls is aliased to `ls --color=auto'

查看所有 alias

alias

强制使用原命令

\ls
command ls
/bin/ls

五、CentOS 特定说明

  • CentOS 7/8 默认使用 bash
  • 系统级 alias 通常在:
    • /etc/bashrc
    • ~/.bashrc

加载顺序:

/etc/profile
└── /etc/bashrc
~/.bashrc

后加载的 alias 会覆盖前面的


六、总结一句话

在 CentOS 的 bash 中:alias 优先级最高,但只影响交互式 shell,且不能覆盖 shell 关键字;用 \命令command 可绕过 alias。

如果你有具体场景(比如 llrmcp 被 alias 了想改),可以贴出来我帮你分析。

0