好吧,这是我阅读手册的非常个人的方式:
手册页
当您使用man
命令打开联机帮助页时,输出将通过less
或more
命令或将被设置为您的传呼器(manpager)的任何其他命令显示/渲染。
如果您使用的是Linux,则可能已将您的man基础结构配置为使用/usr/bin/less -is
,除非您已安装了一些最低发行版man(1)
,否则请在“选项”部分中进行解释:
-P pager
Specify which pager to use. This option overrides the MANPAGER environment variable,
which in turn overrides the PAGER variable. By default, man uses /usr/bin/less -is.
在FreeBSD和OpenBSD上,只需编辑MANPAGER
环境变量即可,因为它们大多会使用more
,而某些功能(例如搜索和文本突出显示)可能会丢失。
有一个很好的回答了什么分歧的问题more
,less
并most
已经在这里(从来没有使用过most
)。在浏览联机帮助页时,必不可少的功能是使用或(也使用绑定和)Space,↓或者↑使用行或行(同时使用vi
绑定j和k)来向后滚动和向前滚动。h在使用时按less
可查看可用命令的摘要。
这就是为什么我建议您less
用作寻呼机的原因。less
具有一些基本功能,将在此答案中使用。
命令的格式如何?
实用程序约定:开放组基本规范第7版-IEEE Std 1003.1,2013版。在尝试理解联机帮助页之前,您应该访问该链接。此在线参考描述了标准实用程序的参数语法,并介绍了整个POSIX.1-2017使用的术语,用于描述实用程序处理的参数。这也将间接使您了解诸如参数,参数,参数选项之类的单词的真实含义。
在理解了实用程序约定的概念后,任何联机帮助页的标题对您来说都显得不太神秘:
utility_name[-a][-b][-c option_argument]
[-d|-e][-f[option_argument]][operand...]
请记住您要做什么。
在进行有关您的研究xargs
时,是出于目的,对吗?您有一个特殊的需求,那就是读取标准输出并基于该输出执行命令。
但是,当我不知道要哪个命令时?
使用man -k
或apropos
(它们等效)。如果我不知道如何查找文件:man -k file | grep search
。阅读说明并找到最适合您需求的说明。例:
apropos -r '^report'
bashbug (1) - report a bug in bash
df (1) - report file system disk space usage
e2freefrag (8) - report free space fragmentation information
filefrag (8) - report on file fragmentation
iwgetid (8) - Report ESSID, NWID or AP/Cell Address of wireless network
kbd_mode (1) - report or set the keyboard mode
lastlog (8) - reports the most recent login of all users or of a given user
pmap (1) - report memory map of a process
ps (1) - report a snapshot of the current processes.
pwdx (1) - report current working directory of a process
uniq (1) - report or omit repeated lines
vmstat (8) - Report virtual memory statistics
Apropos默认情况下使用正则表达式(man apropos
,请阅读说明并找出结果-r
),在本示例中,我正在寻找说明以“ report”开头的每个联机帮助页。
要查找与读取标准输入/输出处理和达成xargs
可能的选项有关的信息:
man -k command| grep input
xargs (1) - build and execute command lines from standard input
DESCRIPTION
开始之前请务必阅读
花一些时间阅读说明。通过仅阅读xargs
命令的描述,我们将了解到:
xargs
从STDIN读取并执行所需的命令。这也意味着您将需要了解标准输入的工作方式,以及如何通过管道操作以链接命令
- 默认行为是
/bin/echo
。这给您一些提示,如果您需要链接多个xargs
,则不需要使用echo即可打印。
- 我们还了解到,unix文件名可以包含空格和换行符,这可能是一个问题,并且该参数
-0
是通过使用空字符分隔符防止事物爆炸的一种方法。该描述警告您,用作输入的命令也需要支持此功能,并且GNU也支持该功能find
。大。我们在中使用了很多查找功能xargs
。
xargs
如果达到退出状态255,将停止。
一些描述非常简短,通常是因为该软件以非常简单的方式工作。甚至不要考虑跳过手册页的这一部分 ;)
其他注意事项...
您知道可以使用来搜索文件find
。这里有很多选择,如果您只看一下SYNOPSIS
,您会被那些淹没。这只是冰山一角。不包括NAME
,SYNOPSIS
和DESCRIPTION
,您将拥有以下部分:
AUTHORS
:创建或协助创建命令的人员。
BUGS
:列出任何已知的缺陷。可能仅仅是实现限制。
ENVIRONMENT
:shell的各个方面可能会受到命令或将要使用的变量的影响。
EXAMPLES
或NOTES
:不言自明。
REPORTING BUGS
:如果您在此工具或其文档中发现错误,则必须与谁联系。
COPYRIGHT
:创建和免责声明有关该软件的人。所有与软件本身的许可证有关。
SEE ALSO
:与该命令相关的其他命令,工具或工作方面,其他任何部分均不适用。
您很可能会在示例/注释部分中找到有关所需工具方面的有趣信息。
例
在下面的步骤中,我将find
以其为例,因为它的概念比xargs
解释的“更简单” (一个命令查找文件,另一个处理stdin和其他命令输出的流水线执行)。假设我们对此命令一无所知。
我有一个特定的问题:我必须.jpg
在ftp服务器文件夹中查找每个扩展名为500KiB(KiB = 1024字节,通常称为kibibyte)或更大的文件。
首先,打开手册:man find
。该SYNOPSIS
是渺茫。让我们搜索手册中的内容:键入/所需的单词(size
)。它将索引很多条目-size
,这些条目将计算特定的大小。被困。不知道如何用“大于”或“小于”给定的大小进行搜索,而那个人没有向我显示。
让我们尝试一下,然后点击来搜索找到的下一个条目n。好。发现了一些有趣的东西:find
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)
。也许此示例向我们表明,-size +100M
它将找到100MB或更大的文件。我该如何确认?转到手册页的开头并搜索其他单词。
再次,让我们尝试一下这个词greater
。按下g将把我们带到联机帮助页的开头。/greater
,第一个条目是:
Numeric arguments can be specified as
+n for **greater** than n,
-n for less than n,
n for exactly n.
听起来不错。手册的这一部分似乎证实了我们的怀疑。但是,这不仅适用于文件大小。它适用于n
在此联机帮助页上可以找到的任何内容(如短语所说:“可以将数字参数指定为”)。
好。让我们找到一种按名称过滤的方法:g /insensitive
。为什么?不敏感?WTF?我们有一个假设的FTP服务器,其中“其他OS”的人可以给一个文件名以扩展为.jpg
,.JPG
,.JpG
。这将导致我们:
-ilname pattern
Like -lname, but the match is case insensitive. If the -L
option or the -follow option is in effect, this test returns
false unless the symbolic link is broken.
但是,在搜索之后,lname
您会看到这只会搜索符号链接。我们需要真实的文件。下一个条目:
-iname pattern
Like -name, but the match is case insensitive. For example, the
patterns `fo*' and `F??' match the file names `Foo', `FOO',
`foo', `fOo', etc. In these patterns, unlike filename expan‐
sion by the shell, an initial '.' can be matched by `*'. That
is, find -name *bar will match the file `.foobar'. Please note
that you should quote patterns as a matter of course, otherwise
the shell will expand any wildcard characters in them.
大。我甚至都不需要阅读有关-name
一看就知道-iname
是这种说法的不区分大小写版本。让我们汇编命令:
命令: find /ftp/dir/ -size +500k -iname "*.jpg"
这是隐含的内容:知道通配符?
表示“单个位置的任何字符”,并且*
表示“零个或多个任何字符”。该-name
参数将为您提供这一知识的摘要。
适用于所有命令的提示
某些选项,助记符和“语法样式”遍历所有命令,从而使您不必完全打开联机帮助页就能花些时间。这些是通过实践学习的,最常见的是:
- 通常,
-v
表示冗长。-vvv
是某些软件上的“非常详细”变体。
- 遵循POSIX标准,通常可以堆叠一个破折号参数。范例:
tar -xzvf
, cp -Rv
。
- 通常
-R
和/或-r
意味着递归。
- 几乎所有命令都对该
--help
选项有简要帮助。
--version
显示软件的版本。
-p
,在复制或移动实用程序上表示“保留权限”。
-y
表示是,或在大多数情况下“未经确认进行”。
请注意,以上内容并不总是正确的。例如,对于不同的软件,-r
切换可能意味着完全不同的事物。检查并确保命令何时有危险总是一个好主意,但这是常见的默认设置。
命令的默认值。
在此答案的寻呼机块中,我们看到的less -is
是的寻呼机man
。命令的默认行为并不总是显示在手册页上的单独部分或最顶部的部分。
您将必须阅读选项以找出默认值,或者,如果幸运的话,键入/pager
将带您进入该信息。这也需要您了解传呼机(滚动手册页的软件)的概念,这是在阅读大量手册页之后才需要了解的内容。
为什么这么重要?如果您在例如man(1)
Linux(less -is
pager)或FreeBSD 上阅读时发现滚动和颜色行为上的差异,这将打开您的感知man(1)
。
那SYNOPSIS
语法呢?
在获得执行命令所需的所有信息之后,您可以内联组合选项,选项参数和操作数以完成工作。概念概述:
- 选项是决定命令行为的开关。“ 不要这样 ”,“ 不这样做 ”或“ 这样的行为。” 通常称为开关。
- 在大多数情况下,当选项不是二进制文件(打开/关闭)(如
-t
在安装时)时,都会使用选项参数,该选项指定文件系统的类型(-t iso9660
,-t ext2
)。“ 闭眼做这件事 ”或“ 喂动物,但只喂狮子 ”。也称为参数。
- 操作数是您希望命令执行操作的对象。如果使用
cat file.txt
,则操作数是当前目录内的文件,其内容将显示在上STDOUT
。ls
是一个操作数为可选的命令。操作数后面的三个点隐式告诉您cat
可以同时作用于多个操作数(文件)。您可能会注意到,某些命令设置了它将使用的操作数类型。例:cat [OPTION] [FILE]...
相关内容简介:
什么时候该方法不起作用?
- 没有示例的联机帮助页
- 选项简短说明的联机帮助页
- 当您使用通用的关键字,例如
and
,to
,for
联机帮助页内
- 未安装的联机帮助页。这似乎很明显,但是,如果您没有安装
lftp
(及其手册页),则无法通过运行以下命令来确定它是否是更复杂的ftp客户端的合适选择man -k ftp
在某些情况下,示例将非常简单,并且您必须对命令进行一些执行以进行测试,或者在最坏的情况下,必须使用Google进行测试。
其他:编程语言及其模块:
如果您正在编程或仅创建脚本,请记住,某些语言拥有它自己的联机帮助页系统,例如perl
(perldocs
),python(pydocs
)等,其中包含有关方法/功能,变量,行为的特定信息以及有关模块的其他重要信息您正在尝试使用和学习。当我创建脚本以使用该perl Mail::IMAPClient
模块下载未读的IMAP电子邮件时,这对我很有用。
您将不得不通过使用man -k
或在线搜索来找出那些特定的联机帮助页。例子:
[root@host ~]# man -k doc | grep perl
perldoc (1) - Look up Perl documentation in Pod format
[root@host ~]# perldoc Mail::IMAPClient
IMAPCLIENT(1) User Contributed Perl Documentation IMAPCLIENT(1)
NAME
Mail::IMAPClient - An IMAP Client API
SYNOPSIS
use Mail::IMAPClient;
my $imap = Mail::IMAPClient->new(
Server => ’localhost’,
User => ’username’,
Password => ’password’,
Ssl => 1,
Uid => 1,
);
...这里还有很多其他内容,例如常规手册页...
使用python:
[root@host ~]# pydoc sys
Help on built-in module sys:
NAME
sys
FILE
(built-in)
MODULE DOCS
http://www.python.org/doc/current/lib/module-sys.html
DESCRIPTION
This module provides access to some objects used or maintained by the
interpreter and to functions that interact strongly with the interpreter.
...again, another full-featured manpage with interesting info...
或者,help()
如果您想阅读某些对象的更多详细信息,请在python shell中使用funcion:
nwildner@host:~$ python3.6
Python 3.6.7 (default, Oct 21 2018, 08:08:16)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> help(round)
Help on built-in function round in module builtins:
round(...)
round(number[, ndigits]) -> number
Round a number to a given precision in decimal digits (default 0 digits).
This returns an int when called with one argument, otherwise the
same type as the number. ndigits may be negative.
奖励:该wtf
命令可以为您提供首字母缩写词,并且whatis
好像在其数据库上未找到首字母缩写词一样起作用,但是您要搜索的内容是man数据库的一部分。在Debian上,此命令是bsdgames
软件包的一部分。例子:
nwildner@host:~$ wtf rtfm
RTFM: read the fine/fucking manual
nwildner@host:~$ wtf afaik
AFAIK: as far as I know
nwildner@host:~$ wtf afak
Gee... I don't know what afak means...
nwildner@host:~$ wtf tcp
tcp: tcp (7) - TCP protocol.
nwildner@host:~$ wtf systemd
systemd: systemd (1) - systemd system and service manager