unalias 是 shell 内建命令,用于删除当前会话中的别名,支持 unalias 别名名 取消单个别名或 unalias -a 删除全部别名,操作仅限当前 shell,不影响配置文件。

unalias 是唯一能直接取消当前 Shell 会话中别名的命令,它不修改文件、不重启终端,但仅对当前会话生效。
取消单个别名:用 unalias 别名名 就行
比如你设置了 alias ll='ls -l',现在想临时去掉它,直接运行:unalias ll
之后再输 ll,就会报错 command not found,说明已生效。
常见错误现象:
• 输入 unalias ll 后没反应 → 实际已成功,只是没提示;
• 输入 unalias ll 报错 bash: unalias: ll: not found → 这个别名根本不存在,可能拼错了,或定义在其他 Shell(如 zsh)里;
• 取消后 ll 还能用 → 别名是从 ~/.bashrc 或 /etc/profile 加载的,unalias 不影响配置文件。
使用场景:
• 脚本调试时临时绕过别名干扰;
• 某个别名和新装工具冲突(比如 alias grep='grep --color=auto' 和某些 expect 脚本不兼容);
• 忘记自己设过什么别名,先清掉再重设。
取消所有别名:unalias -a 简单粗暴
unalias -a 会清空当前 Shell 中所有用户定义的别名,包括系统默认加的(如 Ubuntu 的 alias ls='ls --color=auto')。执行后,所有命令都回归原始行为。
注意点:
• 它不会影响函数、变量或环境变量;
• 不会删除 ~/.bashrc 里的 alias 行,关掉终端再开,别名又回来了;
• 某些发行版(如 CentOS 7)默认没设太多别名,unalias -a 后几乎看不出变化;
• 如果你依赖别名提高效率(比如 alias ..='cd ..'),慎用。
永久取消别名:必须编辑配置文件
别名写在配置文件里(~/.bashrc、~/.zshrc 或 /etc/bashrc),unalias 动不了它们。要一劳永逸,得手动删或注释掉对应行:
步骤:
• 先查别名在哪定义:grep "alias ll" ~/.bashrc ~/.zshrc /etc/bashrc 2>/dev/null;
• 找到后用 nano ~/.bashrc 打开,删掉或在行前加 #;
• 保存后运行 source ~/.bashrc 生效;
• 验证:输入 alias ll 应该无输出,alias 列表里也不再出现。
容易踩的坑:
• 编辑了 ~/.bash_profile 却忘了 ~/.bashrc,结果在终端里不生效;
• 在 root 用户下改了 /etc/bashrc,但普通用户仍读自己的 ~/.bashrc;
• source 后没报错,但别名还在 → 可能有多个配置文件都定义了同一个别名,得逐个排查。
不想取消,只想这次不用别名?试试 \命令 或 command 命令
很多场景其实不需要真取消别名,只是某次执行想跳过它。最轻量的方式是:
• \cp file1 file2:反斜杠强制走原始命令;
• command cp file1 file2:command 内置命令忽略别名;
• "cp" file1 file2:用引号包裹也行,但不如前两者可靠;
• /bin/cp file1 file2:写绝对路径,适合脚本里避免歧义。
适用情况:
• cp 被别名为 cp -i,批量覆盖时不想挨个确认;
• rm 别名为 rm -i,自动化清理时卡住;
• 测试某个命令原始行为,又怕误删别名影响后续操作。
性能/兼容性影响:
• \cp 和 command cp 几乎无开销,Shell 解析快;
• /bin/cp 多一次 PATH 查找(虽然路径明确,但略啰嗦);
• 所有方式都不改变环境,适合写进脚本或 alias 里做“安全版本”。
真正复杂的是别名嵌套或与函数共存的情况——比如 alias grep='my_grep_func',这时 unalias grep 只删别名,my_grep_func 还在;而 \grep 会绕过别名但不绕过函数。这种混合定义,得先用 type grep 看清本质,再决定动哪一层。


















