【Linux】man手册

man手册


(一)什么是man手册

man手册就是linux下提供给用户查看linux语法的一本书,当用户遇到一些不懂的命令/函数的时候,不用刻意地去记住命令/函数是什么,只需要记住怎么在man手册中查询即可。


(二)语法 :man 要查询的东西

1. man man 用man手册查询man如何使用

2. man 命令/函数

man 命令 :命令功能、命令参数、命令使用方法

man 函数 :函数功能、函数头文件、函数原型、函数参数、函数返回值


(三)手册数(页数)

手册数 手册上存放的内容

有不懂的命令,第1个手册查询

1 Executable programs or shell commands // 可执行程序 或者shell命令

不懂的系统调用函数,第二个手册中查询

2 System calls (functions provided by the kernel) // 系统调用函数 (这些函数都是由内核来提供)

不懂的库调用函数时,第三个手册中查询

3 Library calls (functions within program libraries) // 库调用函数 (这些函数是由库提供


问1:怎么知道某一个函数是库调用,还是系统调用?

1)通过调用函数次数经验去记住。

2)man手册的 -k选项 来查询得到

cpp 复制代码
[root@iZwz97o5q2ldlqackxisklZ ~]# man -k printf
printf (1)           - format and print data             由于第1手册是存放命令的,所以printf函数肯定不是第1手册。
printf (1posix)      - write formatted output
printf (3)           - formatted output conversion       printf函数是第3个手册。
printf (3posix)      - print formatted output

3)你先man一下第2手册,如果行,那么就是系统调用,那么不行,就是库调用。


问2:系统调用与库调用都不需要写实现过程,只需要直接调用即可,那么它们有什么区别?

  • 系统调用 这些函数都是由内核 提供,也就是说这些函数本身就是存在于linux系统中
  • 库调用 这些函数都是第三方移植进行 ,也就是说这些函数本身不属于linux系统中,而是移植进来才可以使用,即包含库文件

(四)内容分析

以函数open举例

man -k 要查询的东西

由于函数是分为系统调用与库调用,首先第一步就是先查询这个函数究竟是哪一个?

cpp 复制代码
[root@iZwz97o5q2ldlqackxisklZ ~]# man -k open
open (1)             - start a program on a new virtual terminal (VT).
open (3pm)           - perl pragma to set default PerlIO layers for input and output

man 手册页数 要查询的东西

根据经验直接查询对应手册即可

cpp 复制代码
[root@iZwz97o5q2ldlqackxisklZ ~]# man 1 open

(1)NAME -->对函数进行简单的描述

cpp 复制代码
NAME
       openvt - start a program on a new virtual terminal (VT).    //创建并打开文件  

(2)SYNOPSIS --> 使用格式(包含了头文件和函数原型)

cpp 复制代码
SYNOPSIS
       openvt [-c vtnumber] [OPTIONS] [--] command   //使用的语法格式
cpp 复制代码
//只要程序中使用open函数,就要包含以下的三个头文件。
       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>
cpp 复制代码
 //函数原型
       int open(const char *pathname, int flags);

函数原型,你要马上得到以下几个结论:

  1. 参数个数: 看逗号 如果有n个逗号,那么就有n+1个参数 。 2

  2. 参数名字: 看下划线 。 pathname flags

  3. 参数类型: 看除了名字之外的部分 。 const char* int

  4. 返回值类型: 看函数名字前面的部分 。 int

(3)DESCRIPTION --> 查找参数

参数的名字(下划线划住的那个名字)

pathname --> 需要打开的那个文件的路径

Given a pathname for a file

//提供一个文件的路径

flags --> 操作文件的权限

The argument flags must include one of the following access modes: O_RDONLY, O_WRONLY, or O_RDWR.

//flags参数必须包含以下的几个模式其中的一个: O_RDONLY, O_WRONLY, or O_RDWR.

//只读 只写 可读可写

(4)RETURN VALUE --> 查找函数的返回值

cpp 复制代码
open() return the new file descriptor, or -1 if an error occurred 

  成功: 新的文件描述符  (int)
  失败: -1  

上机实例

cpp 复制代码
 open("/home/gec/xxx.txt",O_RDONLY);
      //以只读的方式来打开家目录下xxx.txt这个文件

安装中文man手册。

1、中文man手册资源文件: manpages-zh-1.5.1.tar.gz

2、先把资源文件放置到共享目录中:

windows: D:\GZ2180\02 linux基础\03

linux: /mnt/hgfs/GZ2180/02 linux基础/03

3、切换到资源文件所在的路径下

gec@ubuntu:~$ cd /mnt/hgfs/GZ2180/02\ linux基础/03

4、在linux下解压资源文件,最好解压在linux独有的目录下(家目录)

gec@ubuntu:/mnt/hgfs/GZ2180/02 linux基础/03$ tar zxvf manpages-zh-1.5.1.tar.gz -C /home/gec

5、切换到家目录下,看看有没有新的东西。

gec@ubuntu:/mnt/hgfs/GZ2180/02 linux基础/03$ cd

gec@ubuntu:~$ ls

manpages-zh-1.5.1/

6、为中文手册创建一个新的安装目录。

gec@ubuntu:~$ sudo mkdir /usr/local/cman

gec@ubuntu:~$ sudo chmod 777 /usr/local/cman

7、切换到解压之后的目录下,看看有什么内容?

gec@ubuntu:~/manpages-zh-1.5.1$ ls

aclocal.m4 ChangeLog configure.in DOCS/ install-sh Makefile.in NEWS src/

AUTHORS configure --> 每一个安装包中肯定有一个configure文件

COPYING INSTALL Makefile.am missing README utils/

8、了解configure文件安装参数。

gec@ubuntu:~/manpages-zh-1.5.1$ ./configure -h

Usage: ./configure OPTION... VAR=VALUE...

//使用格式:./configure 选项... 变量=值...

--prefix=PREFIX install architecture-independent files in PREFIX //指定想安装的路径

/usr/local

例如: 我想安装到/usr/local/cman

--prefix=/usr/local/cman

--disable-zhtw do not generate manpages for zh_TW --> 禁用繁体字,最终得到的结果是简体字。

--disable-zhcn do not generate manpage for zh_CN --> 禁用简体字,最终得到的结果是繁体字。

9、配置

gec@ubuntu:~/manpages-zh-1.5.1$ ./configure --prefix=/usr/local/cman --disable-zhtw

10、编译

gec@ubuntu:~/manpages-zh-1.5.1$ make

11、安装

gec@ubuntu:~/manpages-zh-1.5.1$ make install

12、查看安装的结果。

gec@ubuntu:/usr/local/cman/share/man/zh_CN$ ls

man1/ man2/ man3/ man4/ man5/ man6/ man7/ man8/ --> 如果看到这八个目录,说明已经成功了。

例子: 查看ls用法。

gec@ubuntu:~$ man ls

-M path

gec@ubuntu:~$ man -M /usr/local/cman/share/man/zh_CN/ ls

man ls -> 查英文

cman ls -> 查中文

思路: man -M /usr/local/cman/share/man/zh_CN/ 取一个新的别名叫 cman

1>. 打开脚本文件。

gedit ~/.bashrc

2>. 将以下这句话写入到脚本中。

alias cman='man -M /usr/local/cman/share/man/zh_CN/'

3>. 重启终端生效脚本。

4>. 就可以在任意路径下使用cman ls

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言