距离上次更新本文已经过去了 694 天,文章部分内容可能已经过时,请注意甄别

man 什么都搜不了,No manual entry for xxx 的解决方案

系统 CentOS 7.6

1. 问题描述

今天查手册的时候,发现 man 什么都查不了。不管是系统接口还是函数,都显示没有入口文档(No manual entry for)

plaintext
1
2
3
4
5
6
7
8
[muxue@bt-7274:~/git]$ man pthread_create
No manual entry for pthread_create
[muxue@bt-7274:~/git]$ man bind
No manual entry for bind
[muxue@bt-7274:~/git]$ man man
No manual entry for man
[muxue@bt-7274:~/git]$ man ls
No manual entry for ls

这可得难受了,要知道,我的博客里面关于接口定义的说明,很多都是从 man 手册里面复制出来的。

在 root 下尝试了安装,并 yum update 更新之后,还是无法使用

image-20230201172842758

于是我就去 stackoverflow 提了个问题 【点我】 然后又自己解决了这个问题😂

2. 解决

感谢 kook 频道的大佬,一眼就看出来这个是环境变量的问题

2.1 重装 man

先试试 reinstall 重装

plaintext
1
yum reinstall man-pages

image-20230201172950992

2.2 查看环境变量

安装完毕,查看 MANPATH 的环境变量,可以看到当前指向的是 devtoolset-11 里面的 man

plaintext
1
2
# echo $MANPATH
/opt/rh/devtoolset-11/root/usr/share/man

罪魁祸首就找到了!几天前,我升级了云服务器的 gcc 版本【教程】当时安装的就是 devtoolset-11

所以,情况就是升级的过程中,man 的环境变量被修改了!

我们要做的就是给他改回来

2.3 修改成正确的环境变量

先用 whereis man 找一下 man 的安装路径,一般都是 /usr/share/man

plaintext
1
2
# whereis man
man: /usr/bin/man /usr/share/man /usr/share/man/man7/man.7.gz /usr/share/man/man1/man.1.gz /usr/share/man/man1p/man.1p.gz

/usr/share/man 导入到环境变量

plaintext
1
export MANPATH=/usr/share/man

此时再 man,发现已经活过来了

plaintext
1
man man

image-20230201174145668

2.4 永久生效

export MANPATH=/usr/share/man 只是暂时修改当前 bash 的环境变量,要想完全生效,需要修改 bash 的配置文件

注意:修改配置文件之前,一定要 cp 进行备份,避免修改 boom!

  • 用户目录下的.bashrc

在里面添加如下命令

plaintext
1
MANPATH=/usr/share/man

然后再 source 使其生效

plaintext
1
source .bashrc

此时,当前用户的 bash 就能正常使用 man 了,但是其他用户还是不行。这就需要我们修改系统的配置文件

  • 系统配置文件 /etc/bashrc

注意,系统的配置文件需要输入的是命令。在新建 bash 的时候会执行。如下

plaintext
1
export MANPATH=/usr/share/man

同样的,source 使其生效

plaintext
1
source /etc/bashrc

现在就 OK 了!此时其他用户也能正常使用 man 了

image-20230201174533765