帮你精通Linux:从Manual手册中获得全局掌控感

当今可能我们很多人已经不频繁使用man命令了,取而代之的是更加友好简单的tldr。

$ tldr du |head 
du
Disk usage: estimate and summarize file and directory space usage.

 - List the sizes of a directory and any subdirectories, in the given unit (B/KB/MB):
   du -{{b|k|m}} {{path/to/directory}}
 - List the sizes of a directory and any subdirectories, in human-readable form (i.e. auto-selecting the appropriate unit for each size):
   du -h {{path/to/directory}}r
 - Show the size of a single directory, in human readable units:

然而,man命令始终是我个人的最爱。每当心情低落时候,我就会中用man命令信步由缰的做各种查询。从中慢慢获得秩序感,全局的掌控感,低落的心情也慢慢疗愈。

man命令让我们与计算机对话沟通,又仿佛促使我们与计算机融为一体,人机合一。

1.man的9个章节

man可能是唯一一个可以自我陈述的命令。我们先从最直觉的使用方法开始。

man man
帮你精通Linux:从Manual手册中获得全局掌控感

从结果中,我们看到Manual手册共分为9个章节(sections)。似乎有点多,我们将归类为4个部分。

2.存放地址

Linux系统中一切皆为文件,我们首先感兴趣的是,这些manual手册存放在哪里。根据前文 帮你精通Linux:透彻解析Linux的目录树结构 可以简单推测,

/etc和/var是linux系统下的最重要的两个目录。

man文件本身存储在/usr/share目录下,/usr/share/man

如何查看特定命令的存储位置呢?需要 -w选项(对应长选项--where)

$ man -w time
/usr/share/man/man1/time.1.gz

加上选-a(对应--all)则能查到time在所有章节中的位置。

$ man -aw time
/usr/share/man/man1/time.1.gz
/usr/share/man/man2/time.2.gz
/usr/share/man/man7/time.7.gz

从结果中看到,在man1(shell commands), man2(system calls)和man7(Miscellaneous)中都有time这个命令。

作为补充,我们也可以用-f选项查看命令所属的sections。

$ man -f man
man (7)              - macros to format man pages
man (1)              - an interface to the on-line reference manuals
​
$ man -f time
time (7)             - overview of time and timers
time (1)             - run programs and summarize system resource usage
time (2)             - get time in seconds 

此处的 -f 等价于--whatis

whatis (1)           - display one-line manual page descriptions

3.指定查询章节

从 -w 选项中看到了命令的地址,便可以指定章节查询。

man -s 1 time # 或者 man 1 time 
帮你精通Linux:从Manual手册中获得全局掌控感


man  7 time
帮你精通Linux:从Manual手册中获得全局掌控感

4.正则查询

man命令最有意思的就是正则查询,心情不好的时候,可以玩上一整天。

从正则查询中,能够获得对全局的掌控感,比如查询systemd有多少个命令:

$ man -k ^systemd |nl |tail 
   158  systemd.service (5)  - Service unit configuration
   159  systemd.slice (5)    - Slice unit configuration
   160  systemd.socket (5)   - Socket unit configuration
   161  systemd.special (7)  - Special systemd units
   162  systemd.swap (5)     - Swap unit configuration
   163  systemd.syntax (7)   - General syntax of systemd configuration files
   164  systemd.target (5)   - Target unit configuration
   165  systemd.time (7)     - Time and date specifications
   166  systemd.timer (5)    - Timer unit configuration
   167  systemd.unit (5)     - Unit configuration

从结果中国马上获知167这个结果。

或者查询有多少与calendar相关的命令:

$ man -k calendar |nl
     1  cal (1)              - displays a calendar and the date of Easter
     2  calendar (1)         - reminder service
     3  ncal (1)             - displays a calendar and the date of Easter

又或者查询全部的ls命令:

$ man -k ^ls |nl
     1  ls (1)               - list directory contents
     2  lsar (1)             - list archive file contents
     3  lsattr (1)           - list file attributes on a Linux second extended file system
     4  lsb_release (1)      - print distribution-specific information
     5  lsblk (8)            - list block devices
     6  lscpu (1)            - display information about the CPU architecture
     7  lsearch (3)          - linear search of an array
     8  lseek (2)            - reposition read/write file offset
     9  lseek64 (3)          - reposition 64-bit read/write file offset
    10  lsetxattr (2)        - set an extended attribute value
    11  lshw (1)             - list hardware
    12  lsinitramfs (8)      - list content of an initramfs image
    13  lsipc (1)            - show information on IPC facilities currently employed in ...
    14  lslocks (8)          - list local system locks
    15  lslogins (1)         - display information about known users in the system
    16  lsmem (1)            - list the ranges of available memory with their online status
    17  lsmod (8)            - Show the status of modules in the Linux Kernel
    18  lsns (8)             - list namespaces
    19  lsof (8)             - list open files
    20  lspci (8)            - list all PCI devices
    21  lspcmcia (8)         - display extended PCMCIA debugging information
    22  lspgpot (1)          - extracts the ownertrust values from PGP keyrings and list...
    23  lstat (2)            - get file status
    24  lstat64 (2)          - get file status
    25  lsusb (8)            - list USB devices

5.全局掌控

文章开头就介绍过section 2 中是system-calls命令。我们不免心生好奇,哪些是system-calls呢?

$ man -s 2 -k . |nl |tail
   484  vm86old (2)          - enter virtual 8086 mode
   485  vmsplice (2)         - splice user pages to/from a pipe
   486  vserver (2)          - unimplemented system calls
   487  wait (2)             - wait for process to change state
   488  wait3 (2)            - wait for process to change state, BSD style
   489  wait4 (2)            - wait for process to change state, BSD style
   490  waitid (2)           - wait for process to change state
   491  waitpid (2)          - wait for process to change state
   492  write (2)            - write to a file descriptor
   493  writev (2)           - read or write data into multiple buffers

由上可知,系统中共有493个system-calls。我们分析下这一行命令:

man -s 2 -k . 

短选代表的是长选项--section,-k 是 keyword,等价于 apropos命令,最后的 dot 点 乃是正则表达式里的任意字符的表达方式。

于是,仅仅通过上面的简单命令获得对整个文档乃至整台计算机,整个计算机科学的全局掌控感。我们迅速掠览一遍这9个sections。

Section 1 Shell Commands系统命令:

$ man -s 1 -k . |nl| tail -n 5
  2451  zless (1)            - file perusal filter for crt viewing of compressed text
  2452  zlib_decompress (1)  - decompress mysqlpump ZLIB-compressed output
  2453  zmore (1)            - file perusal filter for crt viewing of compressed text
  2454  znew (1)             - recompress .Z files to .gz files
  2455  zsoelim (1)          - satisfy .so requests in roff input

Section 2 Syetem Calls系统调用

$ man -s 2 -k . |nl| tail -n 5
   489  wait4 (2)            - wait for process to change state, BSD style
   490  waitid (2)           - wait for process to change state
   491  waitpid (2)          - wait for process to change state
   492  write (2)            - write to a file descriptor
   493  writev (2)           - read or write data into multiple buffers

Section 3 C LIbraries C语库

$ man -s 3 -k . |nl| tail -n 5
  1899  y1l (3)              - Bessel functions of the second kind
  1900  yn (3)               - Bessel functions of the second kind
  1901  ynf (3)              - Bessel functions of the second kind
  1902  ynl (3)              - Bessel functions of the second kind
  1903  zlib (3)             - compression/decompression library

Section 4 Special Files 特殊文件

$ man -s 4 -k . |nl| tail -n 5
    48  veth (4)             - Virtual Ethernet Device
    49  vmware (4)           - VMware SVGA video driver
    50  wacom (4)            - Wacom input driver
    51  wavelan (4)          - AT&T GIS WaveLAN ISA device driver
    52  zero (4)             - data sink

Secion 5 File Format and conventions 文件格式及惯例

$ man -s 5 -k . |nl| tail -n 5
   424  xorg.conf (5)        - configuration files for Xorg X server
   425  xorg.conf.d (5)      - configuration files for Xorg X server
   426  Xsession (5)         - initialize X session
   427  Xsession.options (5) - configuration options for Xsession (5)
   428  Xwrapper.config (5)  - Xorg X server binary wrapper

Secion 6 Games 游戏

$ man -s 6 -k . |nl| tail -n 5
     1  intro (6)            - introduction to games
     2  kmahjongg (6)        - Mahjongg game for KDE
     3  kmines (6)           - KDE mine sweeper game
     4  kpat (6)             - A highly addictive card game.
     5  ksudoku (6)          - KDE Sudoku games

Section 7 Miscellaneous (including macro packages and conventions)杂项

$ man -s 7 -k . |nl| tail -n 5
   470  XConsortium (7)      - X Consortium information
   471  xkeyboard-config (7) - XKB data description files
   472  XOrgFoundation (7)   - X.Org Foundation information
   473  Xsecurity (7)        - X display access control
   474  XStandards (7)       - X Window System Standards and Specifications

Section 8 System administration commands (usually only for root)系统管理命令

$ man -s 8 -k . |nl| tail -n 5
   890  xtables-nft-multi (8) - iptables using nftables kernel api
   891  xtables-translate (8) - translation tool to migrate from iptables to nftables
   892  zdump (8)            - timezone dumper
   893  zic (8)              - timezone compiler
   894  zramctl (8)          - set up and control zram devices

Section 9 Kernel routines [Non standard] 内核函数

➜  ~ man -s 9 -k .
vmxnet (9)           - vmware kernel module


掌控全局还有另外一种方法,就是intro命令:

$ man -f intro
intro (8)            - introduction to administration and privileged commands
intro (7)            - introduction to overview and miscellany section
intro (3)            - introduction to library functions
intro (4)            - introduction to special files
intro (1)            - introduction to user commands
intro (5)            - introduction to file formats and filesystems
intro (6)            - introduction to games
intro (2)            - introduction to system calls

我们看到每个section都有一个intro。

比如我们查看section 2的intro:

帮你精通Linux:从Manual手册中获得全局掌控感

6.游戏

man命令有良好的疗愈功效,不妨来看看Kubuntu自带的四个游戏。

$ man -s 6 -k . |nl
     1  intro (6)            - introduction to games
     2  kmahjongg (6)        - Mahjongg game for KDE
     3   (6)           - KDE mine sweeper game
     4  kpat (6)             - A highly addictive card game.
     5  ksudoku (6)          - KDE Sudoku games


7.收尾总结

man命令是我们最好的陪伴,帮助满血复活对工作和生活的掌控感。

展开阅读全文

页面更新:2024-05-19

标签:前文   全局   手册   正则   低落   选项   命令   位置   简单   计算机   文件   心情   章节   系统   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top