我已经使用、研究和开发 Linux 好几年了,随着时间的推移,我成功地说服了一些人加入事业,并切换到 Linux。
然而,当这些人去发现这个全新的世界时,他们每个人最终都来找我,询问执行这个或那个操作的命令是什么:
- 安装软件的命令是什么?
- 列出当前目录内容的命令是什么?
- 打开网络浏览器的命令是什么?
- ...
但对我来说,感觉他们问了错误的问题。事实上,我实际上希望他们会问:
- 我们使用什么程序来管理系统上安装的软件?
- 什么程序可以列出当前目录内容?
- 有哪些可用的网页浏览程序?
- ...
在我看来,这个词命令是一个非常抽象的词,用于描述您在 shell 提示符后键入的几乎所有内容。带着这样的想法,我带来的几个新人开始相信:
- Linux 由大量命令组成。
- 每件事都有一个命令,每个命令专门做一件事。
- 通过学习更多命令,我将变得更有能力作为 Linux 用户/管理员。
- 通过运行,
./something
我不运行命令,而是运行存储在当前目录中的程序,可能是我自己编译的东西。 - ...
因此,我倾向于不使用这个词命令,并且更喜欢使用程序或者可执行文件。我还解释说,由于该$PATH
机制,可以自动找到这些可执行文件,而无需输入其绝对路径。多亏了这一点,输入ls
执行/bin/ls
,这是一个程序存储在变量/bin
中注册的目录中$PATH
。
尽管如此,我还是遇到了这个词命令在许多书籍、教程、指南中……最终让我想到了这个问题:这个词是吗?命令实际上在 UNIX/Linux 词汇中有意义吗?它是否指的是除“无论你在终端中输入什么”?
答案1
这POSIX shell 规范指的是简单的命令,复合命令,指挥位置,以及命令 command
。
前两个参考 shell 如何/何时命令被解析并执行。例如:
#one compound command
{ simple command; simple command && simple command; }
这复合命令是 shell 在评估和执行其组成部分之前必须读入的输入量简单的命令。
指挥位置是每个单词中的第一个单词简单的命令它具有特殊的意义,因为它决定了其余部分如何命令是要解析的。肯定保留字,(例如if
和while
),当在指挥位置,可以向解析器指示接下来的内容应该被解释为复合命令而不仅仅是一个简单的命令。
这命令 command
可以用来移动命令在......之外指挥位置。例如,这两个执行方式相同,但解析方式可能不同:
command simple command
simple command
答案2
A命令行是您在 shell 中键入的整行,它告诉系统执行某些操作。这命令通常是命令行的第一个单词。它通常标识要运行的程序,但它也可以是用于控制流的关键字(例如if
或while
)或用于 shell 特定操作的内置命令(例如read
,set
或export
)。有时命令用于指代整个命令行;上下文已经清楚地表明了其含义。
如今,命令和应用程序之间存在一个常见的区别。在 GUI 环境中,应用程序是使用图形 shell 启动的程序——通过在 shell 中键入命令来调用。
您给出的示例问题的答案是:
- 安装软件的命令是什么?就像是
apt-get install
。 - 列出当前目录内容的命令是什么?
ls
- 打开网络浏览器的命令是什么?
firefox &
或者chrome &
,最有可能的是。尽管如果您使用的是窗口系统,则可能有一个菜单可供您选择浏览器,因此您不会使用命令来执行此操作。