ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 6.45\. Man-DB-2.4.3 Man-DB 包含查找和显示 man 手册页的程序。 **预计编译时间:** 0.2 SBU**所需磁盘空间:** 9 MB ## 6.45.1\. 安装 Man-DB 对 Man-DB 的源码需要做三个调整。 第一,改变已翻译的 Man-DB 带的 manual 页的位置,使其在传统和 UTF-8 的 locale 环境下均能使用: ``` mv man/de{_DE.88591,} && mv man/es{_ES.88591,} && mv man/it{_IT.88591,} && mv man/ja{_JP.eucJP,} && sed -i 's,\*_\*,??,' man/Makefile.in ``` 第二,使用 `sed` 的替换功能来删除 `man_db.conf` 文件中的 "/usr/man" 行, 来避免在使用像 `whatis` 这样的命令时的冗余结果: ``` sed -i '/\t\/usr\/man/d' src/man_db.conf.in ``` 第三,改变 Man-DB 在运行时应该能够发现的程序的记录,但它们还没有安装: ``` cat >>include/manconfig.h.in <<"EOF" #define WEB_BROWSER "exec /usr/bin/lynx" #define COL "/usr/bin/col" #define VGRIND "/usr/bin/vgrind" #define GRAP "/usr/bin/grap" EOF ``` `col` 是 Util-linux 的一部分, `lynx` 基于文本的浏览器(参见 BLFS 的安装说明), `vgrind` 把程序源码转换为 Groff 的输入,`grap` 在 Groff 文档中对图表排版非常有用。 `vgrind` 和 `grap` 不是查看 manual 页所必须的。它们不是 LFS 的一部分,也不是 BLFS 的一部分,但是在完成 LFS 之后,你应该能够自己安装。 为编译 Man-DB 做准备: ``` ./configure --prefix=/usr --enable-mb-groff --disable-setuid ``` **配置选项的含义:** _`--enable-mb-groff`_ 通知 `man` 在格式化非ISO-8859-1格式的 manual 页时,使用 "ascii8" 和 "nippon" Groff 设备。 _`--disable-setuid`_ 使 `man` 不能给用户 `man` 设置uid位。 编译软件包: ``` make ``` 这个软件包没有附带测试程序。 安装软件包: ``` make install ``` 一些软件包提供这个版本 `man` 无法显示的 UTF-8 编码的 man 手册页。 下面的脚本将会允许它们中的一些转换成为下面表中的编码格式。Man-DB 期望 manual 页的编码格式是下面表中的一项。在显示它们的时 候,可以根据需要转换成实际的 locale 编码,因此它们能够在传统的和 UTF-8 的locale下显示。因为脚本是在系统构建和对公共数据 中限制使用的,所以,我们不必担心错误检测和使用非预期的临时文件名。 ``` cat >>convert-mans <<"EOF" #!/bin/sh -e FROM="$1" TO="$2" shift ; shift while [ $# -gt 0 ] do FILE="$1" shift iconv -f "$FROM" -t "$TO" "$FILE" >.tmp.iconv mv .tmp.iconv "$FILE" done EOF install -m755 convert-mans /usr/bin ``` 一些关于 man 和 info 页的压缩可以在 BLFS 手册中找到([_http://www.linuxfromscratch.org/blfs/view/cvs/postlfs/compressdoc.html_](http://www.linuxfromscratch.org/blfs/view/cvs/postlfs/compressdoc.html))。 ## 6.45.2\. Non-English Manual Pages in LFS 每一种 Linux 的发行版在存储 manual 页的字符编码方面都有自己的方法。比如,RedHat 以 UTF-8 编码存储所有的 manual 页;然而 Debian 使用不同的语言编码(通常是8位的)。这 就导致包在为不同发行版设置 manual 页时不兼容。 LFS采用跟 Debian 一样的方法。这是因为 Man-DB 不能够理解 UTF-8 存储的 man 手册页。Man-DB 比 Man 好在在任意的 locale 下不需要额外的配置就可以使用。最后,我们没有选用 RedHat 的方法,因为它的`groff`文本格式组织的不好。 语言跟字符编码的关联已经列在下面的表中。Man-DB 会在查看的时候自动的将它们转变为 locale 的编码。 **Table 6.1\. manual 页的字符编码表 pages** | Language (code) | Encoding | | --- | --- | | Danish (da) | ISO-8859-1 | | German (de) | ISO-8859-1 | | English (en) | ISO-8859-1 | | Spanish (es) | ISO-8859-1 | | Finnish (fi) | ISO-8859-1 | | French (fr) | ISO-8859-1 | | Irish (ga) | ISO-8859-1 | | Galician (gl) | ISO-8859-1 | | Indonesian (id) | ISO-8859-1 | | Icelandic (is) | ISO-8859-1 | | Italian (it) | ISO-8859-1 | | Dutch (nl) | ISO-8859-1 | | Norwegian (no) | ISO-8859-1 | | Portuguese (pt) | ISO-8859-1 | | Swedish (sv) | ISO-8859-1 | | Czech (cs) | ISO-8859-2 | | Croatian (hr) | ISO-8859-2 | | Hungarian (hu) | ISO-8859-2 | | Japanese (ja) | EUC-JP | | Korean (ko) | EUC-KR | | Polish (pl) | ISO-8859-2 | | Russian (ru) | KOI8-R | | Slovak (sk) | ISO-8859-2 | | Turkish (tr) | ISO-8859-9 | ### 注意 不在上面列表中的语言的 Manual 页是不支持的。挪威语无法使用,因为从 no_NO 到 nb_NO 的locale转变。韩语因为不完整的 patch 也是功能不全的。 of the incomplete Groff patch. 如果 manual 页的编码是 Man-DB 所预期的,manual 页就会被拷贝到 `/usr/share/man/<language code>`。例如,法语的 manual 页([_http://ccb.club.fr/man/man-fr-1.58.0.tar.bz2_](http://ccb.club.fr/man/man-fr-1.58.0.tar.bz2)) 可以使用下面的命令安装: ``` mkdir -p /usr/share/man/fr && cp -rv man? /usr/share/man/fr ``` 如果 manual 页是 UTF-8 编码的(例如,针对 "RedHat" 的) ,而不是上面列表中的。它们不得不在安装之前从 UTF-8 转变为列表中的编码。这可以通过 `convert-mans` 来实现。比如,西班牙的 manual 页 ([_http://ditec.um.es/~piernas/manpages-es/man-pages-es-1.55.tar.bz2_](http://ditec.um.es/~piernas/manpages-es/man-pages-es-1.55.tar.bz2)) 可以通过下面的命令来安装: ``` mv man7/iso_8859-7.7{,X} convert-mans UTF-8 ISO-8859-1 man?/*.? mv man7/iso_8859-7.7{X,} make install ``` ### 注意 在转换的过程中需要除去 `man7/iso_8859-7.7` 文件,因为它已经存在于ISO-8859-1中,这是 man-pages-es-1.55 的一个bug。下一个版本可能就不会需要了。 ## 6.45.3\. Man-DB 的内容 **安装的程序:** accessdb, apropos, catman, convert-mans,lexgrog, man, mandb, manpath, whatis, zsoelim ### 简要描述 | | | | --- | --- | | `accessdb` | 将 `whatis` 数据库的内容转储为人类可读形式 | | `apropos` | 搜索 `whatis` 数据库,显示包含给定字符串的系统命令的简短描述。 | | `catman` | 创建或更新预格式化的 manual 页 | | `convert-mans` | 重新格式化 man 手册页,以使 Man-DB 能够显示它们 | | `lexgrog` | 显示一行给定 manual 页的摘要信息。 | | `man` | 格式化并显示请求的 manual 页 | | `mandb` | 创建或更新 `whatis` 数据库 | | `manpath` | 显示 $MANPATH 的内容或在man.conf中设置的搜索路径(如果 $MANPATH 没有设置),以及用户的环境变量。 | | `whatis` | 搜索 `whatis` 数据库,显示包含给定关键字的系统命令的简短描述。 | | `zsoelim` | 读取文件并用提到的 _file_ 的内容来替换 _.so file_ 格式的行。 |