用 Linux 这些年最头疼的倒不是命令记不住而是man手册那一整屏的英文。我第一回跑man bash屏幕刷出几百行英文文档直接给我劝退回博客抄命令。后来系统装多了英文文档阅读速度上来了还是觉得不痛快查mount选项时英文描述里一堆 filesystem independent mount options看完得在脑子里转一圈才敢确定中文里的“挂载”是哪个动作。更别提刚入门的朋友对着man tar研究-I、--use-compress-program这种参数查词典的时间比执行命令的时间还长。所以那次我决定把中文 man 手册彻底搞定。实测下来真的舒服看man ls、man grep、man ssh这些高频命令中文描述一目了然英文手册变成“对照资料”而不是“准入门槛”。这篇文章就把我踩过的坑、试过可行的方案从 Debian/Ubuntu 系到 CentOS/RHEL/openEuler 系全部梳理一遍。不管是刚在虚拟机上装好 Linux 的新手还是用 Kali Linux 做学习笔记的老手都能直接照做。1. 为什么偏偏要装中文 man 手册1.1 英文手册不是不能看是“看得慢”man手册本质上是系统的“官方说明书”每一条命令的语法、参数、示例、返回值都写在里面。问题在于Linux 命令动辄几十个参数英文描述里还带着大量术语缩写比如recursive、verbose、force每个词单独查不难但混在一整段说明里大脑处理速度就急剧下降。我刚带团队的时候让新同事查man rsync他看了十分钟跑来问我-a到底是什么意思我说归档模式包含递归、保留权限、保留时间戳等一堆属性。他说文档里每一条都写了但组合起来就是记不住。其实不是记不住是英文打断了“理解”的链条。中文手册解决的就是这个“理解链条”。同理对中文用户来说像file_operations、read、write这种内核概念先用中文建立整体框架再回头读英文原文反而学得更快。1.2 中文 man 手册的实际使用场景至少三类人特别需要中文 man 手册Linux 初学者刚开始接触ls、cd、cp、rm中文手册能减少挫败感不至于第一周就被man劝退。以中文为主要学习语言的开发者查gcc编译选项、查tar打包参数快速定位到关键信息再回看英文细节。教学培训场景给客户做 Linux 培训、给学生上课演示man命令时如果屏幕上是中文讲解阻力小很多。我在给公司内部做 Linux 培训时课上演示直接用中文手册学员反馈“终于能跟上文档读到哪里了”。所以不要觉得自己英文不错就不需要中文手册它是个效率工具不是“英文不好的人的替代品”。2. 中文 man 手册的“货源”对比与选型2.1 manpages-zhLinux 中文手册的常青树Linux 中文手册最常见、维护时间最久的项目叫manpages-zh在国内老一辈 Linux 用户嘴里也叫“中文 man pages 项目”。它的源头能追溯到 1997 年的 CMPChinese Man Pages计划后来在 GitHub 上托管地址是man-pages-zh/manpages-zh支持 UTF-8 编码覆盖了绝大多数基础命令和系统调用。这个项目的优势很明显一是覆盖面广ls、cat、grep、find、tar这些高频命令都有二是持续更新部分常用命令的中文翻译会跟随新版 man 手册同步三是安装简单Debian/Ubuntu 系直接apt install manpages-zh就能装好。2.2 为什么不建议用在线翻译或 GUI 工具有人会说现在浏览器翻译插件这么强我直接打开man7.org在线翻译不香吗但实际用起来有几个麻烦离线场景内网服务器、虚拟机里没有网络时在线翻译完全不可用。版本偏差在线翻译的文档版本可能和系统里的命令版本不一致查mount时系统支持的新参数在线文档根本没写。效率问题在终端里查手册本来就是为了不切窗口。查一个tar参数还要开浏览器跟打断“心流”没区别。至于 GUI 工具像manpages-zh官方也提供 HTML 版但它更多用于离线浏览终端里最顺手的还是man加中文手册包。2.3 不同发行版的选择差异中文 man 手册的安装方式主要看发行版属于哪一派发行版系包管理器安装方式装后路径Debian/Ubuntu/Kaliaptapt install manpages-zh/usr/share/man/zh_CNCentOS/RHEL/openeulerdnf/yum源码编译或第三方源/usr/local/share/man/zh_CNArch Linuxpacmanpacman -S man-pages-zh或 AUR/usr/share/man/zh_CNopenSUSEzypperzypper install man-pages-zh/usr/share/man/zh_CN提示CentOS/RHEL 官方源里没有现成的中文 man 手册包所以我建议用源码编译这也是后面第 4 节要展开的重点。openEuler 这类国产系统同样适用源码编译方案。3. Debian/Ubuntu/Kali 系一行命令搞定3.1 安装 manpages-zh 包如果你的发行版是 Debian、Ubuntu、Kali Linux 或者它们的衍生版安装就一条命令sudo apt update sudo apt install manpages-zh装完之后中文手册会放在/usr/share/man/zh_CN/目录下面。验证一下有没有装成功ls /usr/share/man/zh_CN/正常情况下会看到一堆.gz结尾的手册文件比如ls.1.gz、grep.1.gz。也可以用man -M强制指定中文目录直接看效果man -M /usr/share/man/zh_CN ls如果能正常显示中文的ls说明就说明安装成功。3.2 用 alias 或函数优雅切换中英文装好之后我不建议大家直接修改系统的全局 locale 为中文来让man自动显示中文因为整个系统切成中文会带来很多麻烦而且某些命令的 man 手册还没有中文版会导致“中文目录里找不到英文回退”的尴尬。我的习惯是定义一个cman命令专门用来查中文手册cman() { man -M /usr/share/man/zh_CN $ }把这段加到~/.bashrcbash 用户或者~/.zshrczsh 用户里source一下就能用source ~/.bashrc cman tar cman ssh这里我不用alias而是用函数是因为函数可以更好地处理参数传递比如cman -k 关键词这种搜索场景不会因为参数顺序问题报错。如果你喜欢让man优先找中文、找不到再回退英文可以用-L参数man -L zh_CN ls-L是 man-db 提供的语言切换选项它会先找/usr/share/man/zh_CN找不到就去默认英文目录。不过老版本的 man-db 可能不支持-L所以我实际生产环境中更信任-M。3.3 中文字体与分页器优化中文 man 页面在终端里偶尔会出现“中文加粗显示为乱码”或“反白色块”的问题。根源在于 man 的分页器默认是less对中文加粗和下划线的渲染不如英文完美。英文加粗可以用退格叠加法表示中文因为字符宽度问题容易显示成乱码。我的两个解决思路使用most作为分页器。most对中文的渲染比less友好安装后设置环境变量即可。sudo apt install most export PAGERmost export MANPAGERmost保持less但加上-R参数让转义序列直接传给终端处理原始字符。export MANPAGERless -R实际使用中most看中文 man 更舒服但most的分页浏览习惯比如退出键是q、翻页是空格和less有差异小白可能需要适应。我个人保留less -R因为命令习惯更重要。3.4 Kali Linux 上的一点注意Kali Linux 是基于 Debian 的所以apt install manpages-zh同样适用。但 Kali 默认安装的软件包比较精简有些机器可能连man-db都没装先执行sudo apt update sudo apt install man-db manpages-zh另外Kali 里我用中文手册最多的场景是配合学习笔记边查nmap、sqlmap的中文手册边把参数和结果整理成自己的笔记比直接抄英文文档效率高很多。4. CentOS/RHEL/openEuler 系源码编译通用方案4.1 为什么不建议用第三方源CentOS/RHEL 官方源没有 manpages-zh有人会用 EPEL 或者第三方 RPM 源但第三方源的维护进度不一定跟得上而且引入额外源有安全隐患尤其是生产环境和国产系统如 openEuler 麒麟我更推荐源码编译。源码编译看起来比apt install多几步但胜在可控所有文件都装到/usr/local下不会污染系统目录卸载也方便。4.2 编译安装的全流程记录先把编译要用的工具装上。在 CentOS/RHEL/openEuler 上执行sudo dnf install gcc make如果你用的是没有 dnf 的老版本 CentOS 7用 yumsudo yum install gcc make然后去 GitHub 拉取 manpages-zh 源码cd /tmp git clone https://github.com/man-pages-zh/manpages-zh.git cd manpages-zh如果服务器没有 git可以用 wget 下载 release 包wget https://github.com/man-pages-zh/manpages-zh/archive/refs/tags/v1.6.3.6.tar.gz tar -xzf v1.6.3.6.tar.gz cd manpages-zh-1.6.3.6接着是标准的 configure、make、install 三步./configure --prefix/usr/local make sudo make install安装完成后手册出现在/usr/local/share/man/zh_CN/ls /usr/local/share/man/zh_CN/测试一下man -M /usr/local/share/man/zh_CN ls4.3 全局与用户级配置的取舍源码编译默认装到/usr/local这意味着普通的man命令不会自动去这里找中文手册。配置有两种思路用户级配置推荐在当前用户的~/.bashrc里加函数只影响自己不会干扰其他用户。cman() { man -M /usr/local/share/man/zh_CN $ }全局配置适合教学机修改/etc/man_db.conf有些系统是/etc/man.conf在文件里找到类似这样的一行MANPATH_MAP /bin /usr/share/man在文件末尾追加映射MANPATH_MAP /usr/local/bin /usr/local/share/man这样系统执行man ls时会自动去/usr/local/share/man找手册不管是不是中文。但我不建议全局开启中文因为部分命令没有中文页反而会把原来英文的路径切断。注意/etc/man_db.conf是 man-db 的配置文件改完不需要重启服务但要重新打开终端或者执行man -u刷新缓存。4.4 openEuler 和国产系统的坑在 openEuler欧拉这类国产系统上源码编译方案的兼容性很好因为它的基础工具链和 RHEL 系是一脉相承的。我在 openEuler 22.03 LTS 上实测过一次编译通过。但有几个细节openEuler 默认软件源里的 gcc/make 可能在安装时会提示没有可用软件包先执行sudo dnf update更新源。openEuler 的安全策略比较严格configure脚本如果提示/bin/bash^M: bad interpreter说明是 Windows 下解压的源码混入了 CRLF 换行符用sed -i s/\r$// configure修一下。编译时如果遇到make: Nothing to be done for all一般是因为之前没执行./configure或者源码目录不干净重跑一遍make clean再./configure。国产 Linux 系统还有一个共性问题默认中文字体可能没装全。所以即使手册装好了终端里显示中文也可能出现方框。解决办法是安装字体包openEuler 用sudo dnf install wqy-microhei-fonts这就是为什么我总说问题有时不在 man 手册本身而在系统对中文的支持环境。5. 进阶玩法虚拟机和嵌入式环境也能用5.1 虚拟机里的 Linux 如何快速配好中文手册很多人是在虚拟机上安装 Linux 学习的比如 VMware 里的 Ubuntu、VirtualBox 里的 Kali。虚拟机环境有个优势物理机可以下载好离线包再传到虚拟机里安装避免网络慢的问题。Debian/Ubuntu 系虚拟机先下载安装包# 在能联网的机器上打包 apt download manpages-zh然后把.deb文件拷贝到虚拟机里sudo dpkg -i manpages-zh_*.debRPM 系的虚拟机可以用源码编译方案直接在虚拟机里 git clone 或者通过共享文件夹把源码传进去按第 4 节的步骤操作。另外虚拟机老出“中文乱码”的朋友先检查虚拟机的终端编码是不是 UTF-8。VMware 和 VirtualBox 默认都支持但有时候 Windows 宿主机影响会导致终端字体选错打开虚拟机的终端设置字体选Noto Sans Mono CJK SC或文泉驿等宽正黑基本就稳了。5.2 嵌入式 Linux 开发里的离线手册妙用嵌入式 Linux 开发板通常没有 man 命令也没有编译环境要在板子上查命令帮助基本只能靠记忆。但我们的中文手册可以下载到开发机上用man -M指向本地目录就算在交叉编译环境里照样能看。比如你在/opt/manpages-zh下放了中文手册在开发机上执行export MANPATH/opt/manpages-zh:$MANPATH这样你开发机上敲man read、man write看到的就是中文版的内核接口说明。我写内核驱动时经常先查中文版的手册目录快速定位到某个结构体或系统调用的含义再对照源码看英文详情效率翻倍。5.3 把中文手册整合进 Vim/IDE 工作流在终端里查man已经很顺了但对 Vim 用户来说还可以利用 Vim 的:Man插件把中文手册直接嵌到编辑器里。比如在 vimrc 里加source $VIMRUNTIME/ftplugin/man.vim然后打开 Vim 执行:Man ls如果想让:Man默认显示中文可以设置let g:man_winview 1 let $MANPAGER cat let $MANWIDTH 80同时配合cman函数在 Vim 里用:Man前先把MANPATH指过去export MANPATH/usr/share/man/zh_CN:$MANPATH这样:Man ls就直接渲染中文手册看代码的时候顺手查帮助不用切终端。5.4 脚本化批量安装运维机器如果你要管理很多台服务器不想每台都手动编译源码可以把这个安装过程写成一个脚本。下面是我用过的简化版#!/bin/bash # 适用于 CentOS/RHEL/openEuler 的中文 man 手册安装脚本 set -e # 安装编译依赖 if command -v dnf /dev/null 21; then sudo dnf install -y gcc make wget else sudo yum install -y gcc make wget fi # 下载源码 cd /tmp wget -O manpages-zh.tar.gz https://github.com/man-pages-zh/manpages-zh/archive/refs/tags/v1.6.3.6.tar.gz tar -xzf manpages-zh.tar.gz cd manpages-zh-1.6.3.6 # 编译安装 ./configure --prefix/usr/local make sudo make install # 给当前用户添加 cman 函数 echo cman() { man -M /usr/local/share/man/zh_CN $; } ~/.bashrc echo done. run: source ~/.bashrc cman ls这个脚本在批量初始化运维机器时很实用配合自动化工具把~/.bashrc那段函数推到所有机器上就能统一给所有开发人员提供中文手册入口。6. 常见问题与排查实录6.1 中文显示为方块或乱码现象cman ls能打开手册但中文全变成小方块。原因终端字体不支持中文或系统的 locale 没有配置 UTF-8。排查locale看输出里是不是LANGen_US.UTF-8或LANGzh_CN.UTF-8如果输出POSIX或C说明 locale 没配好。临时切换export LANGzh_CN.UTF-8 export LC_ALLzh_CN.UTF-8永久生效就写进~/.bashrc。如果系统根本没有zh_CN.UTF-8这个 localeDebian/Ubuntu 先装sudo apt install locales sudo sed -i s/# zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/ /etc/locale.gen sudo locale-gen字体检查终端软件的设置里把字体改成支持中文的等宽字体比如Noto Sans Mono CJK SC。我用 Ubuntu 默认的Monospace没问题但 CentOS 的默认终端字体有时候会引发方块改字体立竿见影。6.2 装好了但cman还是显示英文现象源码编译完成后敲cman ls打开的却是英文手册。排查多半是-M指定的路径不对。源码编译默认装到/usr/local/share/man/zh_CN但如果你加了--prefix/usr路径就变成/usr/share/man/zh_CN。先确认一下目录到底在哪find /usr -type d -name zh_CN 2/dev/null找到后把函数里的路径替换成实际路径。还有一个原因man 命令默认的MANPATH环境变量会覆盖-M参数如果显式设置了MANPATHman -M可能不生效。解决办法是临时清空MANPATH再测试MANPATH man -M /usr/local/share/man/zh_CN ls6.3 某些命令没有中文手册现象cman iptables提示找不到手册或者打开后只有几行英文。原因manpages-zh 项目覆盖的并不是 Linux 上所有命令。iptables、systemd系列、部分新命令的中文翻译确实缺失尤其 RHEL 系的命令更新速度快中文手册跟不上。我的经验是核心命令用中文特殊命令回退英文。cman函数可以做一个小优化——如果中文目录里找不到就自动打开默认英文页cman() { if [ -f /usr/local/share/man/zh_CN/$1.1.gz ] || [ -f /usr/share/man/zh_CN/$1.1.gz ]; then man -M /usr/local/share/man/zh_CN $ else man $ fi }这个判断比较粗糙有些命令章节不是 1但作为日常使用的兜底足够了。更严谨的方法是用ls /xxx/zh_CN/ | grep 命令名判断但不建议为了这点功能写太复杂的逻辑。6.4 源码编译时报错configure: error: cannot find groff现象执行./configure时提示找不到 groff 或文档工具。原因manpages-zh 编译期间需要借助 groff 处理文档机器上没装。解决办法sudo dnf install groffDebian 系也要提前装sudo apt install groff一般来说搞 Linux 开发的机器上 groff 大概率都有但精简版系统比如 Docker 容器很容易缺这个包。6.5 新终端里cman失效现象第一次配置完能用过几天新开的终端敲cman提示 command not found。原因函数只写进了当时的~/.bashrc新终端没重新source或者你用了不同的 shell比如zsh、fish。解决办法检查当前 shell 和配置文件。echo $SHELL如果是/bin/zsh要把函数写进~/.zshrc如果是 fish改用function cman; man -M /usr/local/share/man/zh_CN $argv; end写完记得source对应配置文件。6.6 常见问题速查表症状可能原因解决方案中文变方块缺中文字体或 locale 未配 UTF-8安装字体配置zh_CN.UTF-8打开手册是英文-M路径错误或MANPATH覆盖检查zh_CN目录临时清空MANPATHconfigure报错缺 groff 或 gcc/makednf install groff gcc make新终端不生效写入错误的配置文件确认$SHELL写入对应 rc 文件某些命令没中文manpages-zh 未覆盖该命令回退英文man或查包更新中文加粗乱码less 对中文加粗渲染不佳用most或MANPAGERless -R最后的一点个人体会装中文 man 手册看着是一件小事但真正用顺之后它对学习效率的提升是肉眼可见的。我自己从“拒绝中文手册”到“日常必用cman”心态转变来自于一次排障当时调rsync的过滤规则英文 man 看得头大随手敲了下cman rsync中文说明把--exclude和--delete-excluded的区别讲得清清楚楚几分钟就定位到了问题。从此再也没纠结过“用中文手册是不是显得不专业”。如果你用的是 Kali Linux 做渗透测试学习或者是初入嵌入式 Linux 的小白又或者只是想把日常运维效率提一提按照这篇文章的方案花五分钟装个中文 man 手册真的就是“装完就回不去”的事。以后每次在终端里敲下man看到的是能秒懂的中文描述那感觉比省下几分钟更值——你会更愿意去看手册本身而不是遇到问题就刷搜索引擎。最后再分享一个小技巧给cman加上当前命令的中文页章节号自动判断用man -w先看文件路径像我有一台老服务器上 manpages-zh 的路径被管理员改过cman一旦失效直接检查MANPATH环境变量基本都是这里被别的配置覆盖了。记住中文手册的价值在于“快速读懂”不是在某种特定配置上死磕换个思路就能绕开很多坑。