👋 欢迎来到吴老二技术博客,专注运维 / 数据库 / 云原生
首页/运维服务/正文

Kali 提示符把 `㉿` 换成 `💀`:全员生效的正确改法

吴
吴老二
2026-10-30运维服务11 次浏览0 条评论

环境:Kali GNU/Linux Rolling 2026.3,zsh 5.9 / bash 5.3.9,root 与普通用户都要生效。一句话结论:㉿ 不是主机名,是 Kali 提示符的分隔符变量 prompt_symbol;把它的赋值改成 💀 即可,不用动 /etc/hostname。

一、先看清楚这个提示符到底是什么

Kali 登录后长这样:

┌──(root㉿kali)-[~]
└─#

很多人第一反应是「主机名怎么是 root㉿kali」,于是去改 /etc/hostname——改错了。这样改的话,/etc/hosts、sudo、各种依赖主机名的服务都可能跟着出问题,而且提示符也不会变成你要的样子(你只是把 kali 换成了另一个词)。

真实结构是 用户名 + 分隔符 + 主机名,Kali 在 ~/.zshrc / ~/.bashrc 里拼出来的:

# ~/.zshrc 中的默认 PROMPT(简写)
PROMPT=$'...(%B%F{%(#.red.blue)}%n'"$prompt_symbol"'%m%b%F{...})-[%~]...'
#                          ↑用户名      ↑分隔符          ↑主机名

对应关系:

| 提示符片段 | 变量 | 值 | | ---------- | ---------------- | ------------------------- | | root | %n | 当前用户名 | | ㉿ | $prompt_symbol | 要改的就是它 | | kali | %m | 主机名(/etc/hostname) |

验证一下当前值:

grep -n prompt_symbol ~/.zshrc ~/.bashrc
# ~/.zshrc:95:    prompt_symbol=㉿
# ~/.bashrc:72:    prompt_symbol=㉿

二、三种改法,按需求选

Kali 的 shell 初始化里其实预留了一个「root 用骷髅」的开关,只是默认注释掉了:

# ~/.zshrc(configure_prompt 函数内)
prompt_symbol=㉿
# Skull emoji for root terminal
#[ "$EUID" -eq 0 ] && prompt_symbol=💀

方案 A:只有 root 显示骷髅(Kali 官方设计)

取消那一行注释即可:

sed -i 's/^    #\[ "\$EUID" -eq 0 \] && prompt_symbol=💀/    [ "$EUID" -eq 0 ] \&\& prompt_symbol=💀/' ~/.zshrc

效果:root → root💀wolf,普通用户仍是 user㉿wolf。

方案 B:所有用户无条件都用骷髅(本文推荐/实际采用)

直接把默认值改掉,那行 root 判断留着也无所谓(已经是同一个值):

prompt_symbol=💀

效果:root 和普通用户统一 ┌──(user💀host)-[~]。

方案 C:只想临时看效果(不写文件)

prompt_symbol=💀 && PROMPT="${PROMPT//㉿/💀}"   # 当前 shell 立即生效,退出即还原

三、全员生效:要改 6 个文件

这是个容易漏的地方。prompt_symbol 是每个用户自己家目录里的 rc 文件里写的,改 /root/.zshrc 只影响 root;新建用户又是从 /etc/skel 拷的模板。所以「全员 + 未来用户」要改:

| 文件 | 影响范围 | | --------------------------------------- | -------------------------------- | | /root/.zshrc、/root/.bashrc | root 用 zsh / bash | | /etc/skel/.zshrc、/etc/skel/.bashrc | 以后adduser新建的用户 | | /home/<已有用户>/.zshrc、.bashrc | 已存在的普通用户(本次是wolf) |

脚本化改法(带备份,幂等):

# 保存为 /tmp/patch_prompt.py,远程/本地都能跑
import os, shutil, time

ts = time.strftime("%Y%m%d%H%M")
targets = ["/root/.zshrc", "/root/.bashrc",
           "/etc/skel/.zshrc", "/etc/skel/.bashrc",
           "/home/wolf/.zshrc", "/home/wolf/.bashrc"]

for path in targets:
    if not os.path.exists(path):
        continue
    s = open(path, encoding="utf-8").read()
    if "prompt_symbol=\U0001F480  # unconditional" in s:   # 幂等:改过就跳过
        print("already", path); continue
    shutil.copy2(path, path + ".bak-" + ts)
    s = s.replace("    prompt_symbol=\u327f",                       # ㉿
                  "    prompt_symbol=\U0001F480  # unconditional", 1)  # 💀
    s = s.replace('    #[ "$EUID" -eq 0 ] && prompt_symbol=\U0001F480',
                  '    # [ "$EUID" -eq 0 ] && prompt_symbol=\U0001F480  # now unconditional', 1)
    s = s.replace("        #prompt_symbol=\U0001F480",
                  "        #prompt_symbol=\U0001F480  # now unconditional", 1)
    open(path, "w", encoding="utf-8").write(s)
    print("patched", path)

执行:

sudo python3 /tmp/patch_prompt.py

用 open(path,"w") 原地截断写,文件属主/权限保持不变(/home/wolf/.zshrc 仍是 wolf:wolf);如果用 mv 覆盖就会变成 root 所有,普通用户再 source 可能踩权限坑。

四、验证:别看文件,看「渲染结果」

文件里写对了不代表提示符对了——% 转义、颜色、emoji 宽度都可能让实际显示不一样。直接让 shell 把 PROMPT 展开打印出来:

# zsh(TERM 不设会走无颜色分支,看到的就不是真实提示符)
TERM=xterm-256color zsh -i -c 'print -rP "$PROMPT"' | cat -v

# bash
TERM=xterm-256color bash -i -c 'echo $PS1' | cat -v

cat -v 把不可见字符转义出来,💀(UTF-8 F0 9F 92 80)会显示成:

M-bM-^_M-^RM-^@

看到这段就说明序列里真的是骷髅,而不是「看着像」的其它字符。root 与普通用户各验一遍:

TERM=xterm-256color zsh -i -c 'print -rP "$PROMPT"'                     # root
su - wolf -c 'TERM=xterm-256color zsh -i -c "print -rP \"\$PROMPT\""'   # 普通用户

五、生效时机

  • 当前已开着的 shell 不会热变(PROMPT 是登录时算好的),新开一个 SSH 会话即可;急着看就 source ~/.zshrc。
  • 远程批量改完,最稳的验证是重新登一次。

六、几个坑

  1. 别动 /etc/hostname。㉿ 是提示符装饰,主机名是独立概念;改主机名要连带 /etc/hosts、云厂商元数据/证书等,风险和收益完全不成正比。
  2. sudo 与 root 的判断。方案 A 依赖 $EUID -eq 0,sudo -s 进去也是 0,行为一致;如果你用 sudo bash 起子 shell,注意 rc 文件里对 root 的配色分支是另一段逻辑。
  3. SSH 远程跑 heredoc 会翻车。ssh host '... python3 - <<PY ... PY' 这种嵌套 heredoc 会被远端 zsh 解析成 parse error near '()'。正确姿势:本地写好脚本 → scp 过去 → ssh host 'python3 /tmp/x.py'。
  4. 字体/终端宽度。💀 是双宽 emoji,某些等宽字体渲染会挤一格导致对齐难看,zsh-syntax-highlighting 一般能正确计算;如果错位,换 Nerd Font 或终端设置里开 emoji 宽字符支持。
  5. 备份。改 rc 文件一定要留 .bak-时间戳,Kali 升级 kali-defaults 包时也可能覆盖这些文件。

七、回滚

ls -l ~/.zshrc.bak-*          # 找到备份
cp ~/.zshrc.bak-202610301033 ~/.zshrc && exec zsh

或者只把那一行改回去:

sed -i 's/prompt_symbol=💀.*/prompt_symbol=㉿/' ~/.zshrc ~/.bashrc

评论 0

评论需 登录 后发表(注册并验证邮箱)。
还没有评论,来抢沙发~