【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

相关推荐
学Linux的语莫37 分钟前
Ansible使用简介和基础使用
linux·运维·服务器·nginx·云计算·ansible
踏雪Vernon1 小时前
[OpenHarmony5.0][Docker][环境]OpenHarmony5.0 Docker编译环境镜像下载以及使用方式
linux·docker·容器·harmonyos
学Linux的语莫1 小时前
搭建服务器VPN,Linux客户端连接WireGuard,Windows客户端连接WireGuard
linux·运维·服务器
legend_jz1 小时前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法
Komorebi.py1 小时前
【Linux】-学习笔记04
linux·笔记·学习
黑牛先生1 小时前
【Linux】进程-PCB
linux·运维·服务器
友友马1 小时前
『 Linux 』网络层 - IP协议(一)
linux·网络·tcp/ip
猿java2 小时前
Linux Shell和Shell脚本详解!
java·linux·shell
A.A呐3 小时前
【Linux第一章】Linux介绍与指令
linux
Gui林3 小时前
【GL004】Linux
linux