在研究另一个问题时,我遇到了一个我想了解更多信息的命令,

locate something | xargs -I {} bash -c "if [ -d "{}" ]; then echo {}; fi"


。因此,我运行了man xargs并获得了以下输出:给新用户。与man locateman free相比,它的字面上看起来像是胡言乱语。但是,我应该如何用它来诱导一个有效的命令呢?我在寻求帮助来解释手册页以了解复杂的命令。我想停止以Google索引的网络博客和其他人的个人帮助作为学习Linux命令的第一种方法。

评论

继续阅读手册页。 “选项”部分说明了“摘要”部分中的所有可用选项。

从男人开始

通常,直接转到底部并查找示例部分。

并且不要只扫描手册页中的关键字。真的看了!假设的奇怪行为通常会得到很好的解释。

男人读完男人介绍后。

#1 楼

嗯,这是我个人阅读手册的方式:

手册页

使用man命令打开手册页时,输出将由less显示/渲染或more命令,或将设置为pager(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

对于这里的morelessmost有什么区别(从未使用过most)有很好的答案。浏览联机帮助页时,必须具有使用Space来向后滚动和向前滚动,或者使用↓或↑来进行双向滚动的能力(也可以使用vi绑定j和k)。在使用less时,请按h键以查看可用命令的摘要。这就是为什么我建议您将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 -kapropos(它们是等效的)。如果我不知道如何查找文件: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的作用),在此示例中每个以“报告”开头的手册页。

要查找与阅读标准输入/输出处理并可能达到xargs相关的信息,请执行以下操作:开始

花些时间阅读说明。通过仅阅读DESCRIPTION命令的描述,我们将了解:xargs从STDIN读取并执行所需的命令。这也意味着您将需要了解标准输入的工作方式,以及如何通过管道操纵它来链接命令。
默认行为是像xargs一样。这给了您一些提示,如果您需要链接多个/bin/echo,则不需要使用echo进行打印。问题和参数xargs是一种通过使用空字符分隔符防止事物爆炸的方法。描述警告您,用作输入的命令也需要支持此功能,并且GNU -0也支持该功能。大。我们对find进行了很多查找。

如果达到退出状态255,xargs将停止。

一些描述非常简短,这通常是因为该软件以非常简单的方式工作。甚至不要考虑跳过联机帮助页的这一部分;)

要注意的其他事情...有很多选择,如果仅看xargs,您将不知所措。这只是冰山一角。除了findSYNOPSISNAME之外,您还将拥有以下部分: SYNOPSIS:列出任何已知的缺陷。可能仅仅是实现限制。
DESCRIPTION:可能会受到命令或将使用的变量影响的Shell方面。如果您发现此工具或其文档中的错误,将不得不与您联系。所有内容均与软件本身的许可证有关。
AUTHORS:与该命令相关的其他命令,工具或工作方面,而其他任何部分均不适用。

您将最有可能在“示例/注释”部分中找到有关所需工具方面的有趣信息。 ,因为它的概念比BUGS来解释“更简单”(一个命令查找文件,另一个处理stdin和其他命令输出的管道执行)。假设我们对此命令一无所知。

我有一个特定的问题,即:我必须在ftp服务器中查找扩展名为ENVIRONMENT,文件大小为500KiB(KiB = 1024字节,通常称为kibibyte)或更大的文件。文件夹。

首先,打开手册:EXAMPLESNOTES纤薄。让我们搜索手册中的内容:键入/加上所需的单词(REPORTING BUGS)。它将索引很多条目COPYRIGHT,这些条目将计算特定大小。卡着了。不知道如何用“大于”或“小于”给定的大小进行搜索,而这个人并没有向我显示。

让我们尝试一下,然后搜索下一个点击n找到条目。好。找到了一些有趣的东西:SEE ALSO find。也许这个例子向我们展示了使用xargs它将找到100MB或更大的文件。我该如何确认?再次转到手册页的开头并搜索其他单词。

再次尝试让单词.jpg起作用。按g键将把我们带到联机帮助页的开头。 / man find,第一个条目是:

man -k command| grep input
xargs (1)            - build and execute command lines from standard input


听起来不错。手册的这一部分似乎证实了我们的怀疑。但是,这不仅适用于文件大小。它适用于在此联机帮助页上可以找到的任何SYNOPSIS(如短语所说:“可以将数字参数指定为”)。让我们找到一种通过名称进行过滤的方法:g / size。为什么?不敏感? WTF?我们有一个假设的ftp服务器,“其他OS”用户可以在其中提供扩展名为-sizefind\( -size +100M -fprintf /root/big.txt %-10s %p\n \)的文件名。这将导致我们:

 Numeric arguments can be specified as

    +n     for **greater** than n,

    -n     for less than n,

     n      for exactly n.


但是,在搜索-size +100M之后,您会看到这只会搜索符号链接。我们需要真实的文件。下一个条目:

-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.


太好了。我什至不需要阅读有关greater的信息,就可以看到greater是此参数的不区分大小写的版本。让我们汇编命令:

命令:n

这里隐含的含义是:通配符insensitive表示“单个位置的任何字符”,而.jpg表示“任何字符的零个或多个”的知识。 .JPG参数将为您提供这一知识的摘要。

适用于所有命令的提示

一些选项,助记符和“语法样式”遍历所有命令,使您购买完全不必打开联机帮助页。这些是通过实践学习的,最常见的是:通常,.JpG表示冗长。 lname是某些软件上的“非常冗长”的变体。
按照POSIX标准,通常可以堆叠一个破折号参数。例如:-name-iname
通常find /ftp/dir/ -size +500k -iname "*.jpg"和/或?表示递归。
几乎所有命令都对*选项有简要的帮助。 。

-name,在复制或移动实用程序上表示“保留权限”。

-v表示是,或在大多数情况下“未经确认进行”。

请注意,以上内容并非总是如此。例如,对于不同的软件,-vvv开关可能具有不同的含义。检查并确保命令何时有危险总是一个好主意,但这是常见的默认设置。

命令的默认值。

在此答案的寻呼机块中,我们看到tar -xzvfcp -Rv的寻呼机。命令的默认行为并不总是显示在手册页上的单独部分或显示在最顶部的部分。

您将必须阅读选项以找出默认值,或者幸运的是,输入/ -R将带您前往该信息。这还需要您了解分页器(滚动手册页的软件)的概念,这是在阅读大量手册页之后才需要了解的内容。

为什么这么重要?如果您在阅读Linux(-r传呼机)或FreeBSD --help上的--version时发现滚动和颜色行为的差异,这将打开您的认知。 br />获得执行命令所需的所有信息之后,可以内联组合选项,选项参数和操作数以完成工作。概念概述:


选项是指示命令行为的开关。 “执行此操作”
“请勿执行此操作”或“以这种方式操作”。通常称为开关。
在大多数情况下,如果选项不是二进制文件(如打开的-p)的二进制(开/关),则使用选项参数,它指定文件系统的类型(-y-r)。 “闭眼做”或
“喂动物,但只喂狮子”。也称为参数。
操作数是您希望该命令对其执行的操作。如果使用
less -is,则操作数是当前
目录中的文件,其内容将显示在man上。 pager
命令,其中操作数是可选的。操作数
后面的三个点暗示您man(1)可同时作用于多个操作数(文件)。您可能会注意到,某些命令已设置它将使用的
operand类型。示例:less -is

相关的提要内容:


理解手册页中的提要

何时该方法不起作用?


没有示例的联机帮助页
选项简短说明的联机帮助页
在联机帮助页中使用man(1)SYNOPSIS-t之类的通用关键字时已安装。这似乎很明显,但是,如果您没有安装-t iso9660(及其手册页),则无法通过运行-t ext2知道它是否是更高级的ftp客户端的合适选项。 >在某些情况下,示例将非常简单,并且您将必须对命令进行一些执行以进行测试,或者在最坏的情况下,请使用Google进行测试。

其他:编程语言及其模块:

如果您正在编程或仅创建脚本,请记住,某些语言拥有自己的联机帮助系统,例如cat file.txtSTDOUT),python(ls)等,其中包含有关方法/函数的特定信息,有关您要尝试使用和学习的模块的变量,行为和其他重要信息。当我创建脚本以使用cat模块下载未读的IMAP电子邮件时,这对我很有用。

您必须使用cat [OPTION] [FILE]...或在线搜索来找出那些特定的手册页。示例:

   -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.


...这里还有很多其他内容,包括常规手册页等部分...

使用python:

[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 shell中的and函数:

[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...


奖金:to命令可以为您提供首字母缩写词,如果在其数据库上未找到首字母缩写词,则它可以作为for起作用,但是您要搜索的内容是man数据库的一部分。在Debian上,此命令是lftp软件包的一部分。示例:

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.


评论


您也可以找人| grep ....我喜欢man命令| sed -n'/ ^ [[:space:]] *-/,/ ^ $ / p'

–mikeserv
2015年4月1日14:48在

对。您可以。我只是假设操作员是“菜鸟”,并试图开始使用手册页:)

–user34720
2015年4月1日在14:49

这个答案应该是“我如何有效地使用人?”的最高结果。谢谢你,做得好。

–user1717828
2015年4月1日14:58



@nwildner,您应该得到如此庞大且格式正确的答案之后的糖果。做得好!

– Willian Paixao
2015年4月2日在4:10

我认为这应该添加到Linux中。作为手册页。

–myaut
2015年4月6日在22:26

#2 楼

man man中对此进行了很好的解释:一旦您知道命令的工作原理,该提要就会很有用。它可以帮助您刷新记忆。为了了解该命令的工作原理,您应该阅读手册页。特别是选项和示例部分的描述。

有时概要就足够了。例如,在man ls中:

   The following conventions apply to the SYNOPSIS section and can be used
   as a guide in other sections.

   bold text          type exactly as shown.
   italic text        replace with appropriate argument.
   [-abc]             any or all arguments within [ ] are optional.
   -a|-b              options delimited by | cannot be used together.

   argument ...       argument is repeatable.
   [expression] ...   entire expression within [ ] is repeatable.


在其他情况下,它是无用的,除非您已经知道如何使用该命令。例如,man dd

SYNOPSIS
       ls [OPTION]... [FILE]...


因此,总而言之,不要担心没有得到摘要。那很正常阅读手册页本身。

评论


谢谢您的建议,特别是“关于如何...”段。

–user1717828
2015年4月1日在14:59

#3 楼

了解摘要的一些基础知识


每个[foo]表示可选参数或参数。
使用[foo [ bar ] ]语法时,可以使用foo,并且可以添加bar。
强制选项参数以这种方式使用[ -S size ],它告诉-S参数正在等待强制大小。例如,foo [-S size ] filename ...

均值>
命令是foo

可选参数-S可以使用,您必须告诉size(名称给您一个提示)
强制性参数是filename(这也给您一个提示,请参阅man mkdir)。省略号...告诉您可以使用多个文件。

您仍然必须深入手册页以了解选项(在上面的示例中,-S size是关于什么的)

#4 楼

如今,通常以man显示less页。这样就可以搜索它们。我不会打扰您的提要,特别是不会因为您要理解的特定命令行而感到烦恼。简介中将显示第一个匹配项,第二个匹配项(下一步使用n)将为您提供-I的详细说明。

#5 楼

要记住的一件事是,对于执行其他命令的命令,您不能只查看一个命令的手册。

对于您的示例命令

locate something | xargs -I {} bash -c "if [ -d "{}" ]; then echo {}; fi"


您不仅需要有关xargs的信息,还需要有关bash[的信息(可能在test联机帮助页中)。由于命令中包含复杂的带引号的字符串,因此您可能还需要在Shell上获取有关引用规则的信息(可能还包括bash)。我已经可以告诉您引号引起来的参数是错误的(而且这种错误仅在遇到名称中带有空格的文件时才会显示)。内部的"{}"可能应该是'{}'

因此,首先您应该参考xargs联机帮助页,并参阅[-I replace-str]了解-I {}的含义,以及[command [initial-arguments]]了解bash的含义以及其后的所有含义。然后,请参考bash的联机帮助页,了解-c的功能,等等。

#6 楼

添加到已经给出的重要答案上:

1)如果您对gnu实用程序特别是sedgrep等实用程序感兴趣,有时使用info命令将显示一个大大扩展的。命令信息。例如,sed的一章详细介绍了如何编写正则表达式,另一章则包含一些非常复杂的用法示例。手册的主要目的是帮助您记住已经理解的细节。它的设计使您可以快速获取所需的详细信息并下车。 (而且太多的人没有用法示例,或者只是琐碎的示例。)

当我需要学习新知识时,即使是我不清楚的命令的一个小功能,我也会去网络并使用我能想到的最佳关键字进行搜索(例如Linux xargs),并添加单词howtoexamplestutorial

我通常使用duckduckgo是因为它可以保护我的隐私,但是如果我需要对搜索进行更多控制,则可以使用Google,因为我可以告诉它只在一个网站或只返回上一年的结果。 (它还有许多其他高级搜索选项。您可以使用它们进行搜索。文件

man bash > bashman.txt


并将该文件加载到我的文本编辑器中的另一个窗口中,这样我就可以来回翻转,复制和粘贴等。通常,我会读取文件只是,所以我不会最终无意中修改它,但是由于它是我的个人副本,因此我可以按照自己想要的任何方式对其进行编辑,添加标签,这样我可以更轻松地找到一个部分,甚至添加自己的注释或示例。

唯一的缺点是原始手册页可能已更新并且我的副本是静态的。

#7 楼

要获得有关特定命令的快速帮助,可以使用Explain Shell。例如。您的命令。在初步了解其工作原理后,应按照其他答案的建议继续进行联机帮助页。

#8 楼

有两种有用的工具可用于了解有关linux命令的更多信息:cheat将显示命令行的常用选项。您也可以添加自己的command + option,以便通过cheat显示特定命令。通过bropages获取验证码后。必须投票的命令将出现在bro thanks页面的顶部。


#9 楼

我建议使用tldr作为全面的类似工具。简化且由社区驱动的手册页。在Ubuntu中,您可以通过snap安装它,但是它也具有其他发行版的版本。它还为您提供了几种常见的示例用法。推荐100%。

#10 楼

>我正在寻求帮助来解释手册页以理解复杂的命令。

我认为这是一种误解。使Linux / UNIX如此强大的原因是,您可以通过例如以下命令构造非常长且有效的命令通过管道(locate)将一个命令(此处为xargs)的标准输出重定向到另一命令(此处为|)的标准输入。因此,正如Random832正确地说的那样,您不会找到一个单独的联机帮助页来解释示例命令的作用。 《高级Bash脚本指南》是一份出色的文档。请不要被它吓倒;精通Linux需要数年的时间,并且是一个永无止境的过程,但是您可以在合理的时间内学习基础知识。

一旦掌握了要点,Commandlinefu和Bash One-Liners也值得一读,以获取良好的示例。

#11 楼

要在手册页中搜索命令中的某些特定内容,可以使用:方式:

man echo | grep output.