真正持久化ls颜色需修改shell启动文件中的LS_COLORS,Ubuntu改~/.bashrc,zsh改~/.zshrc;必须用dircolors生成配置,不可手动拼接;GUI设置和PS1与ls颜色无关。

直接改 ~/.bashrc 里的 LS_COLORS 才算真正持久化
终端里 ls 的颜色不是靠 GUI 设置界面保存的,那些「颜色选项卡」只管文字/背景色,不影响 ls 输出的文件类型着色。真要让目录背景、可执行文件高亮等规则每次打开终端都生效,必须把 LS_COLORS 写进 shell 启动文件。
Ubuntu 默认用 bash,所以改 ~/.bashrc;如果用 zsh,则是 ~/.zshrc。别写进 /etc/profile 或 /etc/bash.bashrc —— 那是系统级配置,普通用户没权限,且容易被系统更新覆盖。
- 先确认当前 shell:
echo $SHELL - 备份原文件:
cp ~/.bashrc ~/.bashrc.backup - 在文件末尾追加:
eval "$(dircolors -p | sed 's/ow=.*$/ow=01;34;40/' | dircolors -)"(示例:把其他用户可写目录ow改成蓝字黑底) - 运行
source ~/.bashrc生效,不用重启终端
dircolors 是生成 LS_COLORS 的唯一可靠方式
手动拼接 LS_COLORS="di=01;34:ln=01;36:ow=00;33;42" 极易出错:漏冒号、错位、不支持的代码会被忽略,而且 Ubuntu 的 ls 实际依赖的是 dircolors 解析后的二进制缓存格式(~/.dircolors),不是原始字符串。
正确做法是用 dircolors 管理:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 生成默认配置模板:
dircolors -p > ~/.dircolors - 编辑
~/.dircolors,找到ow行(黄绿底色元凶),改成比如ow 01;34;40(粗体蓝色字 + 黑背景) - 在
~/.bashrc里加一行:eval "$(dircolors -b ~/.dircolors)" -
dircolors -b输出的是可执行的 shell 赋值语句,eval才能真正加载
别碰 PS1 颜色来“解决目录背景问题”
很多人误以为改 PS1(命令行提示符)就能影响 ls 输出的颜色,这是混淆了两个完全独立的机制:PS1 控制的是你输入命令前那一行(user@host:~/path$),而 LS_COLORS 控制的是 ls 命令输出的每一行文件名样式。
如果你发现改了 PS1 后 ls 颜色没变,不是配置没生效,而是根本没改对地方。常见错误包括:
- 在
~/.bashrc里只改了PS1,却没碰LS_COLORS - 写了
export LS_COLORS="..."但内容格式非法,ls直接降级用内置默认值 - 用了 GUI 终端设置改了背景色,结果
ls里目录还是刺眼黄绿底——因为那是ow规则单独控制的
修改后验证是否真生效
改完别急着关终端,用这几步确认是不是“真持久”:
- 新开一个终端窗口,运行
ls -l /tmp(确保有其他用户可写目录)——看ow类型是否已变色 - 运行
echo $LS_COLORS | grep ow,输出应含你设定的代码,如ow=01;34;40 - 临时删掉
~/.dircolors,再开新终端,ls颜色应退回系统默认——证明你之前的配置确实在起作用 - 注意:某些桌面环境(如 GNOME Terminal)会缓存
dircolors输出,改完~/.dircolors后必须重新source ~/.bashrc,不能只靠重启终端
最常被跳过的环节是没运行 source ~/.bashrc,或者改了 ~/.zshrc 却在 bash 里测试——配色不会跨 shell 自动同步。

















