我正在尝试了解如何man
运作。不幸的是,man man
没有给出以下问题的答案:
- 命令的页面是随其一起安装的还是
man
从远程数据库获取的? - 如果它是从网络获取的,那么它的安全性如何?它是通过 TLS 实现的吗?
- 是否
man
在本地缓存页面?如果有的话需要定期清理吗?
答案1
在现代类 Unix 系统中文件系统层次结构标准,手册页通常存储在位于 的目录树中/usr/share/man
。较旧的类 UNIX 系统可能会使用/usr/man
。
通常man
根本不使用网络,尽管可能某个地方的某人已经实现了基于网络的实现。
roff
通常,手册页是使用最初称为(其 GNU 实现名为)的旧文档格式化系统编写的groff
。查看手册页时,该man
命令将通过格式化程序运行手册页源代码,这将生成适合您当前使用的窗口宽度的输出。格式化程序还可以从相同的源代码生成 PostScript、PDF 和可能的 HTML 版本的手册页,这不仅限于终端样式的等宽文本。
该man
命令可以将手册页的格式化文本版本缓存为cat
页面,以便更快地重新查看,通常位于/var/cache/man
(FHS)或手册页目录层次结构的单独子目录中(较旧的系统)。您可能会发现系统已经包含一个默认(通常每周一次)的 cron 作业,可以自动为您清理此缓存。
如果您的 CUPS 打印系统启用了打印到 PDF 功能,请man -t ls | lp -d <name of your PDF virtual printer>
使用任何 PDF 查看器运行并查看结果输出。或者man -Thtml ls > ls_man_page.html
获取 HTML 版本。 (这是针对 Debian 10 的命令man-db
实现man
:格式选项在其他实现中可能有所不同。)
答案2
命令的页面是否随其一起安装
是的,通常是这样,但当然您始终可以向系统添加新的自定义联机帮助页,而无需使用本地包管理系统。您可以使用系统包管理器来了解给定的联机帮助页 com 来自哪个包。基于 Linux 的系统上的联机帮助页的很大一部分来自Linux 手册页项目。
如果它是从网络获取的,那么它的安全性如何?
它没有,但正如其他人所说,有人可能已经编写了自己的实现。我猜您的困惑可能来自第一行man man
:
man - an interface to the on-line reference manuals
或者在 BSD 版本中:
man — display online manual documentation pages
看这个LQ问题 以获得解释。
为了好玩还请参阅https://explainshell.com。这是一个不错的网站,可以快速解释给定命令中选项的含义,例如 https://explainshell.com/explain?cmd=ls+-Alhtr但请记住,给定命令的本地实现可能会有所不同,或者可能不支持所有选项(在使用小型类似 Busybox 的系统时尤其如此)。
当然man
可以通过网络工作,从某种意义上说,您可以在本地安装远程目录并告诉man
在那里查找手册页,例如我可以从远程 FreeBSD 机器读取手册页,如下所示:
$ sshfs freebsd:/usr/share/man /mnt/bsd-manpages
$ MANPATH=/mnt/bsd-manpages man man
$ MAN(1)
BSD General Commands Manual MAN(1)
NAME
man — display online manual documentation pages
man 是否在本地缓存页面?如果有的话需要定期清理吗?
已经很好地解释了电信的答复。