情景
互联网的高速发展给我们的工作和生活都带来了极大的便利。比如,工作中,当你在linux系统上,遇到一个难题,不知道用什么命令时,借助网络就可以轻松解决。
这是每个IT人都具备的能力了(搜索也是有方法论的,此处不做讨论)。
如果没有网络,该怎么办?或许,你还可以翻阅工具书,请教别人,等等。
但是,如果你只能借助你登录的系统本身,又该怎么办?
再或者,即便有网络,怎样更快地找到你想要的命令呢?
方案
linux有两个命令,支持通过关键字来搜索命令。
man -k
apropos
$ man man
...(省略)...
-k Equivalent to apropos.
...(省略)...
由此可见,man -k
是完全等价于apropos
的。
$ man apropos
NAME
apropos - search the whatis database for strings
SYNOPSIS
apropos keyword ...
DESCRIPTION
apropos searches a set of database files containing short descriptions of system commands for keywords and displays the result on the standard output.
...(省略)...
由man手册可知,apropos命令将在whatis database中查询keyword,并把结果出来。
所以,在不借助网络的情况下,使用apropos可以缩小你锁定的范围,甚至直接帮助你确定命令。‘
实例
以曾经写过的两篇文章为例:
既然想要获取UUID,那我们不妨以UUID来搜索一下:
$ apropos UUID
abrt-action-analyze-oops (1) - Calculate and save UUID and duplicate hash for an oops dump directory DIR
dbus-uuidgen (1) - Utility to generate UUIDs
findfs (8) - Find a filesystem by label or UUID
uuidgen (1) - command-line utility to create a new UUID value
你看,文章中提到的uuidgen
、dbus-uuidgen
命令就在结果中呢。
BTW:一般情况下,apropos的结果中只看第二列为(1)的命令即可。
由文章可知,相关的关键字有“进程”、“运行目录”等,所以不妨使用process、working等关键字尝试。
$ apropos process | fgrep "(1)"
...(省略)...
procmail (1) - autonomous mail processor
ps (1) - report a snapshot of the current processes
pstree (1) - display a tree of processes
pwdx (1) - report current working directory of a process
refer (1) - preprocess bibliographic references for groff
renice (1) - alter priority of running processes
skill (1) - send a signal or report process status
...(省略)...
pwdx命中!根据pwdx的简介可知,apropos working
也可以定位到它。
总结
其实,apropos的使用包含但不局限于上面的使用场景。
在我看来,apropos好处多多,简直就是单机版命令搜索引擎:
- 在孤立无援(不能借助网络、请教别人、翻阅工具书的情况)时,它能给你指明方向,缩小范围。
- 即使有网络,当你遇到问题时,顺手就可以使用下它,有益无害。
- 给它一个关键字,它给你返回包含这个关键字的相关命令。比起漫无目的地学习命令,有针对性地学习命令效果会更好。
- 使你更加关注命令的英文描述,不仅可以帮助你精准地知道命令的含义,还无形地帮助你提高英文。
- 忘记了怎么拼写的命令,不妨用它来帮你锁定下范围。
- 以极小的成本让你增长见识。
实不相瞒,我在知道了这个命令后,经常有意无意地使用它,在有意无意中解决了许多实际问题,也在有意无意中掌握了很多极为实用的命令。
一点经验:
- 返回结果过多时,可以调整关键字,也可以借助grep和正则表达式进一步过滤。
- 锁定命令的范围后,结合man命令,效果更佳。