BBS水木清华站∶精华区

发信人: NightOwl (Owlet), 信区: Unix        
标  题:  Man Pages的一些秘密 (转载) 
发信站: BBS 水木清华站 (Tue Apr 18 02:44:43 2000) 
 
【 以下文字转载自 Linux 讨论区 】 
【 原文由 NightOwl 所发表 】 
发信人: NightOwl (Demon&Daemon), 信区: Linux 
标  题:  Man Pages的一些秘密 
发信站: 紫 丁 香 (Mon Apr 17 13:52:30 2000), 转信 
 
                            Man Pages的一些秘密 
                                   --version1.0 
                            =================== 
                                       NightOwl 
                                      2000.4.16 
                            NightOwl2000@263.net 
                            =================== 
       这个题目也不知道过不过时。最近刚好看到又一本书上提了一下Unix下Man的格 
     式和用法,然后根据"man man"的结果和平时在BBS上看到的大虾高招,就自己总结 
     了一下。希望能对那些和我以前一样对Man Pages不大明白的朋友有些启发。;-) 
 
       Unix/Linux里最好的说明和帮助文档我认为就是那些在线帮助Manual Pages了, 
     很多时候,碰到不大明白的命令或者是一些函数的用法的时候,我就会开个man来看 
     看究竟。不过以前没有细究Man Pages里的名堂,现在才算是略知一二.下面就把我所 
     知的写下来,请各位补充未完尽或错误之处。(如有建议和意见,烦用EMail告知我一 
     声,谢谢!) 
 
        1。Unix/Linux下Man Pages的节(section)的含义说明: 
 
        Header       : 标题; 
        NAME         : 对你所Man的命令/函数的功能概述; 
        SYNOPSIS     : 对你所Man的命令/函数用法的简单描述; 
        AVAILABILITY : 可用性说明; 
        DESCRIPTION  : 对你所Man的命令/函数的详细描述; 
        OPTIONS      : 该命令的所有可选项的详细说明; 
        RETURN VALUE : 如果是函数,则列出函数返回值; 
        ERRORS       : 如果函数调用出错.则列出所有出错的值和可能引起错误的 
                       原因; 
        FILES        : 该命令/函数所用到的相关系统文件; 
        ENVIRONMENT  : 和该命令/函数相关的环境变量; 
        NOTES        : 表示不常用的用法或者是实现的细节; 
        BUGS         : 已知的错误和警告(可能附有解决办法); 
        HISTORY      : 该命令/函数的历史发展; 
        SEE ALSO     : 可以参照的其他的相关命令/函数 
        Others....   : 和一些具体命名/函数有关的特殊节 
                       比如在"man"自身的Man Pages里就有一个"CAT PAGES"节用来 
 
                       描述如何保存Man Pages当前的格式. 
 
    举例如下:(请在你的系统中试验以获得感性了解;-) 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    $man apropos 
    apropos(1)                                             apropos(1) 
    NAME 
       apropos - search the whatis database for strings 
    SYNOPSIS 
       apropos keyword ... 
    DESCRIPTION 
       apropos  searches a set of database files containing short 
       descriptions of system commands for keywords and  displays 
       the result on the standard output. 
    SEE ALSO 
       whatis(1), man(1). 
                           Jan 15, 1991 
     废话:上面大写的词就是那些"节(section)"了. 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
    2.Unix/Linux下的Man Pages的分类: 
 
     你想要通过man来得到在线帮助的主题可能会在Unix/Linux里扮演很多角色。比如 
    "write"既是一个命令同时它又是一个系统调用。那么怎么样才能得到你想要得到的� 
    个角色的帮助呢?原来,在Unix/Linux里,Man Pages已经按功能分好了8个类别了, 
    如下表所示: 
 
        ------------------------------ 
       | 类:   |           内容:    | 
        ------------------------------ 
       | 1 :    | 用户命令            | 
       | 2 :   | 系统调用            | 
       | 3 :   | C库函数             | 
       | 4 :    | 设备与网络的接口    | 
       | 5 :    | 文件格式            | 
       | 6 :    | 游戏和演示          | 
       | 7 :    | 环境、表、Troff宏   | 
       | 8 :    | 系统维护            | 
        ------------------------------ 
     <注:本表摘自本文末所注明的参考资料一> 
 
       在Unix/Linux里,可以用"man n command/fuction"来得到相关的功能说明;这 
   里"n"表示你所得到的功能的类号,比如,你想得到"write"作为命令时的man page, 
   就用"man 1 write"这个格式,如果你想得到的是"write"作为系统调用的man page时� 
   就要用"man 2 write"了。 
 
        将结果对比如下: 
         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
         WRITE(1)     Linux Programmer's Manual   WRITE(1) 
         NAME                                           ↑ 
         write - send a message to another user ← 看看这里 
         SYNOPSIS 
         write user [ttyname] 
        ++++++++++++++++++++++++++++++++++++++++++++++++++ 
         WRITE(2)     Linux Programmer's Manual   WRITE(2) 
         NAME                                           ↑ 
         write - write to a file descriptor   ← 再看看这里 
         SYNOPSIS 
         #include <unistd.h> 
         ssize_t write(int fd, const void *buf, size_t count); 
         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
     3. 和Man有关的部分常用环境变量 
 
        (与Man有关的环境变量可以在/etc/man.confl里设置,也可以通过命令行参数来 
     设置.) 
 
     MANPATH   : 如果设置了该变量,则表示man根据MANPATH指定的路径来搜索 
                 man pages; 
     MANSECT   : 如果设置了该变量,则表示指定要搜索那些节(section); 
     MANWIDTH  : 如果设置了该变量,则表示显示的宽度; 
     MANPAGER  : 该变量是用来设置显示man page的程序.如果没有设该变量,则用 
                 PAGER变量的值,如果PAGER变量也没有定义,则用默认的"/usr/bin/ 
                 less -is"程序来显示; 
 
    4.和Man Pages有关的一些技巧 
 
      Question1.如何把man显示在屏幕的内容输出到文件里以便打印出来? 
      Answer1 :大家可能都试过"man n foo >foo.txt"了,也发现了用编辑器看fo.txt 
  时会有很多的"N^HNA^HAM^HME^HE"之类的符号,这样的结果当然不能让人满意.那么怎 
  么做呢?下面的方法来自哈工大的baggio大虾: 
      "man n foo | col -b > foo.txt"。 
     这样一来,输出的结果就是你希望的了。原来,man为了能按照它的显示规则显示文 
  本的内容,在文本里加了一些控制字符。而col命令刚好可以用来消除控制字符的。通 
  过管道把man出来的结果送到col里处理一下就可以去掉那些讨厌的控制字符了。是不是 
  很方便?(感谢baggio的高招!;-) 
      Question2.怎么样才能知道某个主体有几种类别呢? 
      Answer2 : 这个问题也得靠一个和man相关的命令来解决--"whatis",比如你可 
  以用"whatis bar" 来得到bar的所有类别。"whatis bar"可以显示与bar有关的所有 
  的man page的名称和类别号。你快试试看。;-) 
      Question3....(我就知道这么多,其他的等你来补充;-) 
      Answer3.... 
 
    5.后话: 
 
      本来还想把man的命令行参数也写出来,想想好像用的人的不是很多就罢了(因为 
    我不用)关于man的详细的介绍当然要看man的man pages了.我想通过上面的简单的描 
    述 ,你应该可以很顺手的用man来看"man"的manual page了.(呵呵,一大堆"man"),我 
    就不废话了.;-). 
 
      另外,  如果你有别的有关于man的操作技巧,拜托请你告诉我呀. 
 
   6.参考资料: 
 
   (1).  <<Pratical Unix Programming, A Guide to Concurrency,Communication, 
           and Mutilthreading>> Kay A. Robbins & Steven Robbins 
         中译本:<<实用Unix编程>>  机械工业出版社1999.10第一版 
 
   (2).  Manual Pages' "Man" page ,ie. "man man" ;-) 
-- 
�       @@@@           @@@@ 
     @@@@@ @@   N   @@ @@@@@         得失随缘 
   \ @@@@ @ @@  i  @@ @ @@@@ /       心无增减 
      @@@  @@   g   @@  @@@ 
        @@@     h     @@@ 
      \         t         / 
 
 
-- 
※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.118.179.51] 

BBS水木清华站∶精华区