【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

相关推荐
小糖学代码5 小时前
LLM系列:1.python入门:3.布尔型对象
linux·开发语言·python
shizhan_cloud5 小时前
Shell 函数的知识与实践
linux·运维
Deng8723473485 小时前
代码语法检查工具
linux·服务器·windows
霍夫曼7 小时前
UTC时间与本地时间转换问题
java·linux·服务器·前端·javascript
月熊8 小时前
在root无法通过登录界面进去时,通过原本的普通用户qiujian如何把它修改为自己指定的用户名
linux·运维·服务器
大江东去浪淘尽千古风流人物9 小时前
【DSP】向量化操作的误差来源分析及其经典解决方案
linux·运维·人工智能·算法·vr·dsp开发·mr
赖small强10 小时前
【Linux驱动开发】NOR Flash 技术原理与 Linux 系统应用全解析
linux·驱动开发·nor flash·芯片内执行
IT运维爱好者11 小时前
【Linux】LVM理论介绍、实战操作
linux·磁盘扩容·lvm
LEEE@FPGA11 小时前
ZYNQ MPSOC linux hello world
linux·运维·服务器
郝学胜-神的一滴11 小时前
Linux定时器编程:深入理解setitimer函数
linux·服务器·开发语言·c++·程序人生