无法完全理解Unix的“查找”命令手册

我发现查找手册的概要很难阅读替代文字http://files.getdropbox.com/u/175564/syntax_manual.png

假设您正在查找具有777权限的目录。 Pixelbeat的build议是

find -type d ! -perm -777 

我的OS / X给出了以下内容

 find: illegal option -- t find: illegal option -- y find: illegal option -- p find: illegal option -- e find: d: No such file or directory 

使用简介作为帮助时,我不确定的事情

  • 无法看到哪里把选项-type我可以清楚地testing这个,但我想学习阅读手册更好,使我不需要帮助。
  • 不明白为什么我们需要两行来概要说明 :似乎强调许多PATH是可选的
  • 为什么Pixelbeat在命令中使用感叹号?

我们再来看一个Grep手册的例子。

替代文字http://files.getdropbox.com/u/175564/grep_manual.png

它有一个明确的概要,虽然我只是用一条线。 我可以直接看到,我们可以通过

 grep -r "masi" . 

您如何阅读与查找手册类似的手册?

首先要意识到的是并不是所有的查找命令都是相同的。 在Linux系统上find的发现不同于那些基于BSD的系统(如OSX)。 你要引用的是Linux。

对于find命令,“-type”选项是一个expression式,并且必须位于path之后。 如果你进一步阅读手册页,它将描述哪些选项是expression式。

感叹号是否定的。 这是它返回除了权限为777的东西之外的所有东西。

命令“ find -type d!-perm -777 ”是无效的,因为在expression式之前没有包含path。 你可以使用一个path 如果想要当前目录。

回到主要问题。 有时仅仅阅读手册页的摘要是不够的,其实你必须阅读其余部分。 有些命令非常强大,除非您阅读或至less浏览整个文档,否则您将无法了解如何使用该命令。 如果存在这些例子,或者如果他们不在线上去查找一些例子,这也是有帮助的。

你没有指定目录

 find . -type d ! -perm -777 

您引用的手册页指出, path名应该在expression之前。 所以在这种情况下,点“。” 出现在“ -type d … ”之前。 后者本身不是select。 实际上, -type-perm是布尔expression式的一部分,它会查找每个文件。

无法看到在哪里放置选项types

-type不是一个选项,它是一个expression式。 所以它在参数列表的末尾。 如果向下滚动手册页,则会find一个标题为“expression式”的部分,其中详细介绍了此参数的所有可用选项。

不明白为什么我们需要两行来概要说明:似乎强调许多PATH是可选的

程序可以用参数pathname-f pathname来调用。 根据经验,方括号内的任何参数都是可选的。 但那些不是,是强制性的。 这就是为什么你的查找命令不起作用 – 因为它有任何“path名”之前的“expression式”。 这些圆点表示可以使用多于一个的path名参数。

为什么Pixelbeat在命令中使用感叹号?

我看不到你给的链接中的指定命令。 但..

感叹号可以用来否定下面的expression式。 所以命令find . -type d find . -type d会查找目录并find . ! -type d find . ! -type d find . ! -type d会查找除目录外的所有内容。 尽pipe用前面的反斜杠来避开感叹号是可取的,所以你的shell不会解释它。 它也可以与-not交换。

在概要中,括号内的项目是可选的,替代项由pipe道字符(竖线)分隔。 如果选项是可选的,它们将出现在由pipe道分隔的双方括号中。 强制性参数不带任何括号。 可能重复的参数后跟椭圆( ... )。

有时概要太复杂,不能合并成一行。 而且,有时一个版本的结果与另一个版本的结果明显不同,或者是相互排斥的。 所以在你的grep的例子中:

grep [OPTIONS] PATTERN [FILE …]

grep [OPTIONS] [-e PATTERN | -f文件] [文件…]

OPTIONSFILE是可选的。 第一个版本是比较常见的。 第二个版本适用于( -e )需要保护以模式开始的模式或-f模式在文件中的特殊情况。 正如你所看到的,这些不同于更基本的第一个版本。 简介可能是这样的:

grep [OPTIONS] [PATTERN | -e PATTERN | -f文件] [文件…]

但是,阅读起来比较困难,这只是一个简单的例子。 想象一下,比如mount更复杂。 而且,当然,还有没有概要的man页,因为它几乎是不可能的(例如bash )。

当我阅读一个man页时,我会寻找一个与我正在寻找的内容最相似的摘要。 如果有一个是明显的,那么我将扫描( vgrep )或者从简介或从我所知道的要完成的事情中search术语或关键词。 我作为我的读者less ,所以我使用/命令来启动search。 有时 ,我发现info文档是更完整或有用的,我用类似的方式。

是的我的Mac OS X安装find的手册页有点误导。 简介列出了expression式的结尾,但逻辑上以“expression式”开头的部分被分成两部分,以“主体”和“运算符”开头。 我总是阅读“说明”的前几行,所以应该注意的是他们在这里澄清了这个问题:

 DESCRIPTION The find utility recursively descends the directory tree for each pathname listed, evaluating an expression (composed of the ``primaries'' and ``operands'' listed below) in terms of each file in the tree. 

这最终应该会让你觉得很奇怪,因为它是以“ – ”开始的非选项参数,实际上是必须在path前面的expression式。

我对man page的最有帮助的build议是学习你的寻呼机的命令。 默认情况下似乎less ,在这里你可以用<去开始>去结束,和/? 向前或向后search模式(如“/ -type”)。 Control-fspace前进一页, Control-b备份页面。 还有一个xman ,你可以inputControl-s来search你的标题为find的manpage。 我也喜欢apropos命令。