直接运行fc-list : family | sort -u可快速列出去重排序的字体家族名;查中文字体应使用fc-list : lang=zh | grep -i simsun,而非搜索中文名;安装新字体后必须执行fc-cache -fv刷新缓存,否则不生效。

直接运行 fc-list 就能看到所有已注册字体,但默认输出冗长、含路径和样式,不便于快速筛选或确认是否装对。
只看字体家族名(去重排序)
多数场景下你只想知道“有哪些字体可用”,而不是每种样式都列一遍。用这个组合最实用:
-
fc-list : family—— 只输出家族名(如Noto Sans、WenQuanYi Micro Hei),不含路径和样式 -
fc-list : family | sort -u—— 去重 + 字母序排列,一眼扫完不重复 - 别用
fc-list | cut -d: -f2 | sort -u这类字符串切分:字段分隔不稳定,某些字体名含冒号会错切
专门查中文字体(别搜“宋体”)
中文显示名(如“宋体”“微软雅黑”)在 fontconfig 里不作为匹配依据,系统靠的是语言标签(lang=zh)和内部英文名(SimSun)。所以:
- 查是否支持中文:运行
fc-list : lang=zh,有输出说明至少有一个中文字体生效 - 验证“宋体”是否存在:用
fc-list : lang=zh | grep -i simsun,不是grep 宋体 - 如果返回空,不代表没放文件,大概率是缓存没刷或权限不对(见下一条)
为什么 fc-list 找不到刚复制的字体
常见原因就三个,按出现频率排序:
- 字体没放对目录:
~/.local/share/fonts/(用户级)或/usr/share/fonts/truetype/custom/(系统级)是当前 fontconfig 默认扫描路径;~/.fonts/已被弃用,新版不再读取 - 权限不对:字体文件需至少
644(用户可读),目录需755;用ls -l确认.ttf或.otf文件不是600 - 漏了强制刷新:复制完必须跑
fc-cache -fv(用户级)或sudo fc-cache -fv(系统级);只跑fc-cache不加-v和-f,可能跳过新目录或静默失败
验证字体是否真被识别(不只是“出现在列表里”)
fc-list 显示了,不代表应用能用。关键要确认 fontconfig 是否把它纳入匹配逻辑:
- 用
fc-match -s "sans-serif"查当前默认无衬线字体实际映射到哪个家族,看返回里有没有中文字体名 - 用
fc-match "SimSun"看它是否返回你安装的simsun.ttc的完整路径;如果返回别的(比如DejaVuSans.ttf),说明匹配失败,得调fonts.conf规则 - 终端、浏览器、Java 应用(如 PDF 导出)常缓存字体列表,改完要重启进程,不是只刷系统缓存
真正卡住人的地方,往往不是“怎么装”,而是“装了但系统不认”——这时候别反复复制字体文件,先盯住 fc-cache -fv 的输出有没有报错,再看 fc-match 返回什么路径。字体名大小写、TTC 合集里多个子字体、桌面环境覆盖 fontconfig 配置……这些细节比命令本身更影响结果。


















