blogger

JackS·Zhao

人生就像开车在路上走,你我只是其中的一个驾驶员。送走老的、迎来小的,匆匆看过路边风景。一直向前行驶,却不知道是谁修的这条路。
Debian 系统 出现bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory

时间:2026-10-17    作者:JackS·Zhao    分类: Linux


这是在 Debian 上没生成对应的 locale 导致的警告,解决方法就是安装/生成缺失的 en_US.UTF-8 locale。按下面步骤来。
方法一:生成缺失的 locale(最推荐、一次性解决)

# 1. 安装 locales 工具(一般都有,没有就装)
sudo apt update
sudo apt install -y locales

# 2. 确保 en_US.UTF-8 在配置里启用
sudo sed -i 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen

# 3. 重新生成 locale
sudo locale-gen

# 4. 设置系统默认 locale(可选,建议)
sudo update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8

然后退出重新登录(或 source /etc/default/locale),警告就消失了。
方法二:只针对当前会话消除警告(临时)
如果暂时不想生成 locale,就在执行命令前设置环境变量:

export LC_ALL=C

或改成 export LC_ALL=en_US.UTF-8(前提是已生成)。这样当前终端不再报 setlocale 警告。
排查:看你系统当前支持哪些 locale

locale -a

如果列表里没有 en_US.utf8 → 就是没生成,用方法一。
如果有但还报错,可能是路径/变量引用问题,可以 echo $LC_ALL $LANG 看看。
更省事的备选
如果你不需要 en_US,直接用系统已带的 locale(比如 C 或 zh_CN),把 /etc/default/locale 改成对应值即可,不必强求 en_US.UTF-8。
提醒:如果是通过 SSH 远程登录出现的这个警告,最干净的是方法一(真正生成 locale),因为 SSH 登录会话会自动读 en_US.UTF-8。先跑 locale -a 看下你系统里有没有 en_US.utf8,把那个输出发我,我能立即判断是"没生成"还是"变量没对",给你精确到不走弯路。你现在是 SSH 登录报的,还是脚本/程序里报的?