Linux 终端命令中带有 -(破折号)的选项是什么意思?

What are the options with - (dash) on Linux terminal command mean?

我知道存在很多选项,但在 Linux 命令中,例如

chmod -R 777 user

-R 是什么意思,我知道如何使用它们中的几个,但所有这些都是我从教程中学到的,因此如果我想学习这一部分,我真的不知道要搜索什么终端命令。如果有人在他们对终端命令还很陌生的时候有任何帮助他们的资源,我将不胜感激。

与 chmod 一起使用时的 -R 标志意味着:递归应用。 这是一个非常有用的命令。

如果您想了解有关 chmod 命令的更多信息,您可以通过键入 man chmod 访问手册页,例如:

来自 chmod 手册页:

-R, --recursive
change files and directories recursively

例如,假设您有一个目录 mozilla - 其中包含子目录和文件:

/home/user/mozilla/
├── extensions
│   └── profiles.ini
└── firefox
    └── Crash Reports
        ├── events
        ├── InstallTime20140410211200
        ├── InstallTime20150112203352
        └── InstallTime20150125222008

你运行命令

chmod -R -v 777 /home/user/mozilla/

-R 标志会将 所有 文件和 mozilla 文件夹中包含的子文件夹的权限更改为 777 文件权限。

  • 添加 -v 标志只是为了向您显示发生了什么变化。

每个 U*x 系统都带有 手册页,,它们也很容易在网上找到。

man chmod documents the chmod command, including its options; man man 记录 man 命令本身等

GNU 在称为 Info 的系统中提供文档,该系统不太普遍但功能更强大(交叉引用、脚注等的可点击链接)。通常,您会找到一个简短的手册页,它将您引导至 Info 以获得完整的文档。

在 Linux 系统上,man intro 是一个更温和的介绍,可以帮助您开始使用该系统。 (没有 intro 命令;手册页只是对 Linux 中 Life 的介绍。)

如果您查阅的教程没有提到系统本身存在标准的、高质量的在线文档,那么它们似乎不太令人信服。

每个命令都有自己的参数集、选项集(只是特殊参数)和概要。因此内置*资源的重要性,如联机帮助页(@michael-coleman 和@tripleee 在他们各自的答案中已经提到)和 info pages.

但是,有一些约定,很多(但不是全部!)命令共享。 (有些只是部分。):

  • 大小写 通常很重要。
  • 正确的参数(那些不被解释为选项的)不以破折号开头(-)。它们通常用于告诉程序要操作哪些文件,为此许多交互式 shell 默认提供制表符补全。
    • 值得注意的例外:许多程序使用独立的单破折号 (-) 而不是输入或输出文件来表示标准输入(将某些内容通过管道输入程序或以交互方式输入)或标准输出(在终端上打印输出或通过管道将其输出到某处)应该改用。
  • Options(用作标志(on/off)或用作键值对的键的参数)有两种形式:
    • 短选项 以单个破折号开头,然后仅以单个字母继续(如示例中的 -R)。不允许选项值的短选项(见下文)通常可以链接:-a -R -c 可以写得更短,如 -aRc.
    • 长选项 以两个破折号开头,然后是一个或几个单词,由单个破折号连接,(如 chmod--recursivegit diff--color-words).
  • 选项值表示键为选项的键值对的值。
    • 允许一个值的短选项通常必须在同一参数中后跟该值,即它们之间没有任何 space,例如ld -lc 其中 -l 是键,c 是值。
    • 允许一个值的长选项通常必须紧跟该值作为紧接的下一个参数,即它们之间只有白色space。许多命令使用的另一个约定是在选项和值 (ld --library=c) 之间使用等号 (=)。对于某些命令,两者都可以。
  • 子命令 指定当命令具有多种功能时要执行的操作。对于某些命令,它们看起来像选项,对于其他命令(例如 git),它们看起来像适当的参数(git diffdiff 部分)。

其中一些约定甚至已经编纂成文,但有许多(而且相当重要的)命令 don't follow 它们。

虽然一般来说,不仅可用选项,而且 'same' 选项的语义都取决于特定的命令,一些选项具有商定的语义:-R almost always表示--recursive,表示要处理的文件是一个目录,所有直接和间接(在子目录中)包含的文件和目录也应该被处理。当然,这不会阻止某些命令使用 -r 表示该含义而不知道 -R,或者(可能更罕见或更晦涩)使用 -R 表示完全不同的语义。

*在网络上相互连接的计算机普及之前称为 'on-line'。我想这指的是终端(屏幕键盘组合)和实际计算机之间的 'lines'(电缆),并用于与 'off-line'(纸质)文档中的电子对比。