最近在极客时间上学习跟着老师学习“linux性能优化”的相关课程。
其中老师在课程实验时,经常提到:

  1. “同样你们可以先实验,如果发现有问题,建议你第一时间通过自己的办法解决,如搜索引擎。如果最后无法解决再留言给我”
  2. “善于利用linux 的man /proc,可以帮助你在linux学习中很快速的知道某个结果的意义”。

linux本身是具有很强大的文档支持能力的。其实刚开始学习linux时候,第一时间是去百度,得到的结果千奇百怪,且很多错误,完全不知道man的强大。

  • 事实上,也有很多人是不知道man命令的具体作用的,或者没有充分发挥作用。它能给到的答案,是正式的(official)且快速的,比在网上搜索靠谱多了。
  • 还有最近的工作中,也是用工具产生一个图片,默认的就是png,放大后效果不好。突然有人提示,工具加参数了应该可以生成svg。一查看help手册,果然如此,所以查看手册的重要性

好了,言归正传,在linux中man这个命令到底是怎么一个概念呢:

  1. man其实是manual的缩写;
  2. man就是用来查看系统相关手册的一个方法;
  3. man可以显示手册页,上下滚动,查找页面等。

接下来,说说怎么使用,这里仅从最常用到的一些内容出发吧,毕竟庞大的文档内容,这个东西只需要知道大概,出现问题时知道从哪里找到内容即可


  1. 最简单的方法就
# man命令 + 执行命令(如write)/系统内容(如/proc)/系统API名(如fopen)
$ man program/utility/function 

这样可以直接的查看某个信息的完整文档,有的文档还有被翻译为各种语言,当该文档支持的翻译语言有主机的语言时,会直接以该主机的语言显示。

  1. 当某个名称既有命令,又有API时,有两种方法查看:
    (1)直接加上 -a参数:你可以看完一部分后,再看另外的一部分,以mount为例
$ man -a mount
#按下【enter】后,就会显示mount命令的内容:
$ MOUNT(8) System Administration MOUNT(8)
$ ...... SYNOPSIS
$ mount [-l|-h|-V]
$ ......

在显示内容的最后,会有一个提示:

# Manual page mount(8) line 1 (press h for help or q to quit)

再按下【q】后,会提示是否进入下一页:

# --Man-- 下一页: mount(2) [ 查看 (return) | 跳过 (Ctrl-D) | 退出 (Ctrl-C) ]

按下【enter】后,就显示mount 这个api的文档内容:

$ MOUNT(2) Linux Programmer's Manual MOUNT(2)
$ ...... SYNOPSIS
$ #include <sys/mount.h>
$ ......

看上面的结果,就会发现mount后面有数字,命令后面是8,api后面是2,这就是第二种方法:

$ man + 名称
# 在中间加一个数字,或者参数,如下面的命令直接查看mount这个api的文档
# -s可以省略,即man 2 mount
$ man -s 2 mount 
  1. 这里就涉及了这个-s参数的意义

-s就是section的意义,每个内容都是按照类型放在不同的section的,这里简单的解说下,知道常见的即可,平时就会用到。

section number说明1可执行文件或者shell命令1可执行文件或者shell命令2系统调用(内核提供的函数,如open)3库函数调用(程序库中的函数,如fopen,注意这是libc的api)4特殊文件(通常是/dev/下的,用到时候较少,如null)5文件格式或者约定的东西(如proc,就是对/proc下的海量参数)7其他杂项(包括宏包和约定,如ascii,是的,不用在网上找ascii码)

其实不用记住这些编号的意义,需要使用的时候再看,比如想知道这个api是不是有一个对应的系统调用。

  1. 还是来看一个比较特别的
$ man proc # process information pseudo-file system,描述进程信息的伪文件系统

这就是linux系统跑起来后,/proc目录下的各个文件目录的信息,说一些常用到的

  • /proc/[pid]/environ,某个进程[pid]的环境变量信息,获取后可以通过strings输出
    $ cat /proc/1/environ | strings (2)
  • /proc/[pid]/fd,这是个子目录,包含了该进程打开的每个文件的条目,条目由文件描述符命名
  • /proc/[pid]/maps,内存映射关系,对分析进程的内存使用很有帮助
  • /proc/[pid]/stat,进程状态信息,内容很多,可以看到进程的所有线程信息,包括优先级,线程名等
  • /proc/filesystems,查看内核支持的文件系统列表 (6)/proc/interrupts,记录了CPU的中断数
  • /proc/meminfo,/proc/cpuinfo,系统的内存信息,CPU信息

还有很多有用的东西,都可以在需要的时候,通过man查找,其实大多数信息,看名称就知道是否是自己要的东西

标签: 命令, linux, mount, proc, 文档, man, 解决问题

相关文章推荐

添加新评论,含*的栏目为必填