docker上安装Ubuntu环境man命令出现No manual entry for xxx的问题

       在docker上安装Ubuntu后,发现没有安装man,执行 apt-get update && apt-get install man ,安装man,完成后,运行man man 会发现并没有出现预想中的情况,而是出现如下信息:

       No manual entry for man
       See 'man 7 undocumented' for help when manual pages are not available.

       这是什么情况?

       其实原因很简单,为了使镜像文件体积尽可能的小,所以Ubuntu版本在安装文件时,过滤掉了其中包含的文档内容,这部分配置是在/etc/dpkg/dpkg.cfg.d/excludes文件中声明的(执行man dpkg会有相关配置信息的说明,当然你要先把No manual entry for dpkg的问题解决)。打开该文件cat /etc/dpkg/dpkg.cfg.d/excludes,有如下内容:

# Drop all man pages
path-exclude=/usr/share/man/*

# Drop all documentation ...
path-exclude=/usr/share/doc/*

# ... except copyright files ...
path-include=/usr/share/doc/*/copyright

# ... and Debian changelogs
path-include=/usr/share/doc/*/changelog.Debian.*

       所以,只要删除该文件或注释掉path-exclude的部分,之后安装的应用,就可以使用man文档了。但是,之前的应用依然没有办法使用man文档,比如ls、sed等命令,所以如果你需要的话,可以重新安装所有的应用。

       使用dpkg -l查看所有安装的程序,用grep ^ii 过滤出所有安装成功的条目,用cut -d' ' -f3命令(因为状态标识ii和程序名之间有两个空格,所以要用f3)筛选出程序名,最后使用apt-get重新安装就好了,命令如下:

       dpkg -l | grep ^ii | cut -d' ' -f3 | xargs apt-get install -y --reinstall

       所以,整体的命令是这个样子的:

       rm /etc/dpkg/dpkg.cfg.d/excludes&&apt-get update&&dpkg -l | grep ^ii | cut -d' ' -f3 | xargs apt-get install -y --reinstall&&apt-get install man&&rm -r /var/lib/apt/lists/*

      当然,如果你已经安装了man那就不用apt-get install man这部分命令了,可以根据自己的需要执行相关命令。

      关于docker上CentOS环境下该问题的解决,点击这里。

你可能感兴趣的:(docker,Ubuntu,man,No,manual,entry,for,xxx,docker)