用 dircolors 导出并修改 ls_colors 配色规则需先运行 dircolors -p > ~/.dircolors 导出默认规则,再编辑该文件仅修改等号右侧 ansi 代码,最后在 ~/.bashrc 中添加 eval "$(dircolors ~/.dircolors)" 并 source 生效。

如何用 dircolors 导出并修改 LS_COLORS 配色规则
终端中 ls 命令的颜色由 LS_COLORS 环境变量控制,它不是直接写死的字符串,而是由 dircolors 工具根据配色规则文件(如 ~/.dircolors)动态生成的。想保存一套可复用、可迁移的颜色主题,必须导出规则文件,而不是只改 ~/.bashrc 里的 PS1。
常见错误是直接编辑 $LS_COLORS 输出再赋值回去——这会导致格式错乱、丢失类型映射,ls 可能彻底不着色。
- 运行
dircolors -p > ~/.dircolors导出默认规则(注意是小写-p,不是-P) - 打开
~/.dircolors,查找类似DIR 01;34(目录)、ow 34;42(其他用户可写目录)这类行 - 修改时只动等号右边的 ANSI 代码,例如把
ow 34;42改成ow 01;33(粗体橙色文字,无背景),避免删掉前面的类型标识符 - 保存后执行
eval "$(dircolors ~/.dircolors)"立即生效,不用重启终端
怎样让颜色配置对所有新终端会话自动生效
~/.dircolors 文件本身不会自动加载;必须在 shell 初始化文件里显式调用 dircolors。很多人只改了配色文件却没生效,就是漏了这步。
关键不是改 PS1,而是确保每次启动 bash 都重新解析配色规则。Ubuntu 默认使用 ~/.bashrc,但要注意:如果该文件里已有 eval "$(dircolors -p)" 这类语句,它会覆盖你自定义的 ~/.dircolors。
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
- 检查
~/.bashrc是否已存在dircolors相关行:grep dircolors ~/.bashrc - 如果没有,就在文件末尾添加:
eval "$(dircolors ~/.dircolors)" - 如果有旧的调用(比如
eval "$(dircolors -p)"),必须删掉或注释掉,否则你的~/.dircolors不会被读取 - 执行
source ~/.bashrc生效,验证:echo $LS_COLORS | grep di=应显示你改过的值
备份和迁移终端颜色主题的可靠方式
真正可迁移的“颜色主题”只有两个文件:~/.dircolors 和 ~/.bashrc 中那行 eval。只备份其中一个没用——前者缺加载逻辑,后者缺具体规则。
容易被忽略的是权限和路径硬编码问题。比如有人把 ~/.dircolors 复制到另一台机器后,source ~/.bashrc 报错说找不到文件,其实是 eval 里写的路径是绝对路径(如 /home/olduser/.dircolors)没更新。
- 导出主题只需两步:
cp ~/.dircolors ~/my-ls-theme.dircolors,再确认~/.bashrc里eval行指向的是~/.dircolors(用波浪线,别用绝对路径) - 恢复时先复制
my-ls-theme.dircolors到~/.dircolors,再source ~/.bashrc - 若要分享给他人,附上说明:“请将文件放至
~/.dircolors,并在~/.bashrc末尾添加eval "$(dircolors ~/.dircolors)"” -
LS_COLORS本身不跨 shell 类型(zsh 用户需另配),主题文件只对 bash / dash 兼容
为什么终端提示符(PS1)颜色和 ls 颜色要分开管理
PS1 控制命令行前缀(如 user@host:~/path$)的颜色,而 LS_COLORS 控制 ls 输出的文件/目录着色。两者底层机制完全不同:前者靠 ANSI 转义序列嵌入字符串,后者靠 ls 内部查表匹配文件元数据。
混用会导致维护混乱。例如有人把 PS1 里目录路径设成绿色,又把 LS_COLORS 里 di 设成蓝色,结果同一目录在提示符里绿、在 ls 里蓝,视觉割裂。更糟的是,某些终端模拟器(如 Tilix)对 PS1 的转义支持不一致,而 LS_COLORS 是 POSIX 标准行为,兼容性高得多。
-
PS1修改位置:在~/.bashrc里找以PS1=开头的行,用\[\033[01;33m\]这类序列包裹对应字段 -
LS_COLORS修改位置:只动~/.dircolors,类型标识符(如di、ow)不能拼错,大小写敏感 - 调试时分别验证:
echo $PS1看是否含转义序列,ls --color=always /tmp | head -1看输出是否按预期着色
ow(other-writable)和 tw(sticky other-writable)这两项——它们默认带绿色背景,在深色终端里极刺眼,但很多人只改 DIR 却漏掉它们。










