导出当前终端的 dircolors 配置项需执行 dircolors -p > ~/.dircolors,生成含注释和文件类型代码(如 di、ex、ow)的可编辑模板;导出后须在 ~/.bashrc 中添加 eval "$(dircolors ~/.dircolors)" 并 source ~/.bashrc 生效。

如何导出当前终端的 dircolors 配置项
Ubuntu 的 ls 颜色由 LS_COLORS 环境变量控制,而该变量通常由 dircolors 命令从配色数据库生成。要获得可编辑、可复用的具体配置项(即“导出项”),不能只靠 echo $LS_COLORS——那是一长串难以维护的键值对。真正可用的导出方式是生成人类可读的 .dircolors 文件。
执行以下命令即可导出默认配色规则到用户目录:
mkdir -p ~/.dircolors dircolors -p > ~/.dircolors
这个 dircolors -p 输出的是标准配色模板,含完整注释和所有文件类型代码(如 di、ex、ow),不是二进制或加密内容,后续可直接编辑。
-
dircolors -p是唯一可靠导出“结构化配色项”的方式;dircolors ~/.dircolors只校验,不输出 - 导出后务必检查文件头是否含
# COLOR DATABASE标识,缺失说明导出失败(常见于非标准 shell 环境) - 不要用
ls --color=always | cat -v之类方式“反推”颜色——终端转义序列无法还原为原始配色项
DIR、ex、ow 这些配色项怎么改才生效
导出的 ~/.dircolors 文件里每一行是一个配色项,格式为:文件类型代码 颜色代码。比如默认的 DIR 01;34 表示“目录用粗体蓝色”,修改它必须同时满足两个条件:文件被重新加载,且 ls 启用了 color 模式。
常见错误是只改了文件,却没让系统感知变化。正确流程如下:
- 编辑
~/.dircolors,例如把DIR 01;34改成DIR 01;33(粗体黄色) - 确保
~/.bashrc中有这行(没有就加上):eval "$(dircolors ~/.dircolors)" - 运行
source ~/.bashrc,而非仅ls或新开终端(部分环境需重载整个 shell) - 验证是否生效:
echo $LS_COLORS | grep "di="应返回类似di=01;33的结果
注意:ow(other-writable 目录)和 tw(sticky + other-writable)会覆盖 DIR,如果你改了 DIR 却发现某些目录仍是黄绿底色,大概率是它们被识别为 ow 类型,需一并修改。
PostgreSQL 18.4 官方 Ubuntu 安装包现已发布,这是目前最新的稳定版本。推荐通过官方 APT 仓库安装:先执行 sudo apt update 更新索引,再运行 sudo apt install postgresql-18 即可完成部署。新版本引入了异步 I/O 子系统,在顺序扫描与 VACUUM 场景下性能提升显著,同时支持 UUID v7 原生生成函数与虚拟生成列。
为什么改了 PS1 颜色,但路径名还是深蓝色
终端提示符(PS1)和 ls 输出颜色完全独立:前者由 shell 解析 ANSI 转义序列(如 \[\033[01;34m\]),后者由 LS_COLORS 控制。很多人误以为改了 PS1 就能影响 ls,其实毫无关系。
如果你看到路径名(比如 ~/Documents)在提示符里是深蓝色,那是 PS1 里写死的颜色代码导致的,和 ls 的 DIR 无关。典型问题出现在这类写法中:
PS1='\u@\h:\[\033[01;34m\]\W\[\033[00m\]\$ '
其中 \[\033[01;34m\] 就是深蓝色,要改就得动这里,而不是去碰 .dircolors。
-
\W显示短路径,\w显示全路径,两者都不受LS_COLORS影响 -
PS1中颜色代码必须用\[和\]包裹,否则会导致光标定位错乱(尤其在长命令换行时) - 别在
PS1里用34(蓝色)配黑底终端——对比度太低,实际可用36(青蓝)或33(黄)提升可读性
导出项里出现 *.tar=01;31 这类扩展名规则,改完不生效?
这类规则(*.ext=颜色)确实有效,但前提是文件权限未覆盖其类型判定。例如一个 archive.tar 文件如果被标记为可执行(chmod +x),ls 会优先按 ex(可执行文件)着色,而不是 *.tar。
验证方法:
- 运行
ls -l archive.tar,确认权限列不含x(如-rw-r--r--才走扩展名规则) - 临时禁用可执行类配色测试:
sed -i 's/^ex.*$/#ex 01;32/' ~/.dircolors,再source ~/.bashrc -
*.ext规则区分大小写,*.ZIP不匹配file.zip,需另加一行或使用通配更宽松的写法(如*.[zZ][iI][pP]=01;31)
最易忽略的一点:修改 *.ext 后必须确保 dircolors 重新解析整个文件——仅改一行不够,要保证 eval "$(dircolors ~/.dircolors)" 这条命令在当前 shell 环境中被执行过,否则旧 LS_COLORS 缓存仍在。










