man命令过程

在linux下,要想查看某一个命令的具体用法,我们可以使用man来查看,例如:man ls;

然后系统就会显示该命令的详细使用信息了。那么,这个过程中,man做了哪些操作呢?

首先,man要去manpath中查找命令说明文档的存放位置:

[root@zabbix-server dmm]# manpath

/usr/local/share/man:/usr/share/man/en:/usr/share/man

一般情况下,命令的说明文档是存放在/usr/share/man的。

cd /usr/share/man ,看到该目录下有man[1-9]这些目录,每个目录存放的内容不一样。

说明:

1 用户级命令和应用程序

2 系统调用和内核出错代码

3 库调用

4 设备驱动程序和网络协议

5 标准文件格式

6 游戏和演示

7 各种文件和文档

8 系统管理命令

9 少见隐秘的内和规范和接口


ls是一个用户命令,所以我们去man1目录中看一下

看到有一个文件:ls.1.gz。

在man命令执行时,man会随需要格式化对应的gzip文件,并将格式化后的文件存放到缓存:/var/cache/man/catX中。

我们cd /var/cache/man/cat1

man ls ,过后,cat1中多了一个ls.1.lzma

man tar,过后,cat1中多了一个tar.1.lzma

这个lzma格式的文件,就是被man把gzip格式化后的文件,它也是一种压缩文件,压缩率:gzip<bzip2<lzma

高压缩保证了该文件占用较小的空间。

解压ls.1.lzma

[root@zabbix-server cat1]# lzma -d ls.1.lzma

[root@zabbix-server cat1]# ls

ls.1 tar.1.lzma

查看ls.1的内容,发现和man ls的内容完全一致。

好了,以上就是man的解析过程。

从manpath中查找命令的gzip文件,格式化成lzma文件到对应的缓存中,之后显示出来。


这里有一个小小的问题,既然命令的文档是gzip文件,我们直接gunzip呢?出来的内容是什么呢?为什么?