杂货铺

杂货铺中囤杂货

👉 所有文章
技术 理解 HTML 中的 pre 标签 使用 prismjs 代码高亮库 理解 sitemap.xml 解决 Intellij IDEA 右下角不显示 git 分支的问题 并发与并行的区别 ASCII码对照表 理解字符编码、Unicode、UTF-8、UTF-16 认证与鉴权的区别
工具 DBeaver: 跨平台的数据库管理工具 Snipaste: 一个非常好用的截图、贴图工具 常见的网页版流程图、UML建模工具 实用 Chrome 谷歌浏览器插件 低多边形图片生成工具 一些好用的 Markdown 编辑器 Windows 下好用的软件 使用 Genymotion 模拟 Android 环境 实用工具整理 实用网站整理 calibre - 电子书管理软件
其他 试用Atom编辑器 解决谷歌索引404网页的问题 解决论文编译后没有参考文献 思维导图,认清自己,制定目标 想法若干——关于地图 man2:一个快速查找命令使用示例的工具 浅入浅出CouchDB:CouchDB安装 浅入浅出CouchDB:使用curl管理CouchDB 如何修改自己在github中的项目 对c++指向数组指针的一些理解 升级wordpress出现错误:Request exceeded the limit of 10 internal redirects The spirit of softwares 方法链 一些不错的网站 苹果的swift 如何现代化院系的网站 事前、事中、事后 关于选择的一些思考 重要紧急矩阵 二八定律 真相 如何在电脑上使用微信读书 ? 如何关闭微信读书的「看一看」? 从零开始Docker化Ghost博客系统 ghost博客添加多说评论 以生产模式运行Ghost博客系统 Ghost博客主题制作简明教程 将Ghost打造成一个本地APP 重置Ghost博客中的用户密码 在Ubuntu中安装Ghost博客系统 为Ghost博客添加标签云
已迁移 【已迁移】故事: 2020 【已迁移】故事: 2019-nCoV 肺炎

man2:一个快速查找命令使用示例的工具


2017-11-18

话说,在UNIX系操作系统中(Linux、macOS、FreeBSD等),有一个man命令用于获取帮助手册。man的帮助手册是分章节的,其中最常用的是默认的第1章节中的命令手册。例如,查看grep命令的使用方法:

$ man grep
GREP(1)                     General Commands Manual                    GREP(1)

NAME
       grep, egrep, fgrep, rgrep - print lines matching a pattern

SYNOPSIS
       grep [OPTIONS] PATTERN [FILE...]
       grep [OPTIONS] [-e PATTERN]...  [-f FILE]...  [FILE...]

DESCRIPTION
       grep searches the named input FILEs for lines containing a match to the
       given PATTERN.  If no files are specified, or if the file “-” is given,
       grep  searches  standard  input.   By default, grep prints the matching
       lines.

       In addition, the variant programs egrep, fgrep and rgrep are  the  same
       as  grep -E,  grep -F,  and  grep -r, respectively.  These variants are
       deprecated, but are provided for backward compatibility.

OPTIONS
   Generic Program Information
       --help Output a usage message and exit.
// .... 省略 ....

关于 man 命令的章节区分,可以看下 Linux man命令的使用方法

man很实用,但过于“学术化”,缺乏使用示例以帮助更好地理解。 所以,tldr出现了,这个工具很好用,但是有几个小问题:

  1. 公司开发机器中我没有成功把命令示例文档下载下来。
  2. 文档布局稍繁琐。
  3. 命令示例文档与工具强绑定。

所以,这里造一个名为man2的轮子用于快速查看命令示例。

1. 实现思路

1.1 文档形式与布局

文档采用markdown编写,以.md为后缀,命令名称作为后缀,例如git.md。如果要为子命令/命令选项编写一个单独的文档,例如为git clone编写一个文档,则文档命名为git clone.md,注意两个单词之间只有一个空格。

默认支持多语言,以locale(区域)作目录划分,例如简体中文的文档放在zh_CN目录下。

如何识别使用哪个locale呢?

  • 方法1:直接用操作系统的locale
  • 方法2:通过配置文件读取
  • 方法3:优先配置文件,若为设置,则使用配置系统locale

方法3更合适。

于是,文档布局如下:

├── config.json         # 配置locale
├── en_US               # 英文文档目录
└── zh_CN               # 简体中文文档目录
    ├── convert.md
    ├── find.md
    ├── git clone.md
    ├── grep.md
    └── ls.md

然后,约定上面的文档和配置放在~/.man2-docs目录下。

1.2 man2 命令的实现

  1. 获取命令行参数,得到用户要查询的命令
  2. 得到locale
  3. 从locale对应的目录中寻找文档,找到则打印出来,否则报错

基于上面的思路,挑一个编程语言实现就行了。我这里用的Nodejs。

因为是在终端(Terminal)中输出 markdown 文档,有高亮效果自然更好。 Nodejs 中的 marked-terminal 库,可以实现高亮效果。

2. 如何使用 man2

安装man2命令:

$ npm install man2 -g

下载文档(当然,也可以用自己整理的文档):

$ git clone https://github.com/letiantian/man2-docs.git ~/.man2-docs

使用示例:

$ man2 grep

## 当前目录中查找含有 ls 的文件

    grep "ls" -r .

## 高亮命中的内容

    grep --color=auto "ls" -r .

## 高亮命中的内容,并给出行号

    grep --color=auto "ls" -n -r .

## 高亮命中的内容,并给出行号

    grep --exclude-dir={.bzr,CVS,.git,.hg,.svn,node_modules} "ls" -n -r .

( 本文完 )

文章目录