我一直在寻找adduser
和之间的区别useradd
,并且一个解释是,这useradd
是一个命令,同时adduser
是一个perl脚本。我了解什么是perl脚本,但我不了解的是a command
确切的含义。
我一直以为,命令一样ls
,ln
,cd
等都是写在任何语言中所有简单程序,简单地做一两件事。这些“简单程序”和perl脚本之间有什么区别?
我当然知道(perl)脚本不是编译而是在运行时解释的,但是我猜那不是唯一的区别吗?
我一直在寻找adduser
和之间的区别useradd
,并且一个解释是,这useradd
是一个命令,同时adduser
是一个perl脚本。我了解什么是perl脚本,但我不了解的是a command
确切的含义。
我一直以为,命令一样ls
,ln
,cd
等都是写在任何语言中所有简单程序,简单地做一两件事。这些“简单程序”和perl脚本之间有什么区别?
我当然知道(perl)脚本不是编译而是在运行时解释的,但是我猜那不是唯一的区别吗?
Answers:
简而言之,命令是计算机要执行的一条指令(或一组指令)。
基本Unix工具,如ls
,ln
等(通常)用C语言编写,并编译成独立的可执行程序不需要解释器来执行; 他们通常需要某些图书馆在系统上安装文件,但这是另一个问题的答案。
脚本是命令的集合,实际上,脚本本身被视为命令。
一个Perl脚本是Perl语句的顺序和需要perl
的可执行文件(单机和编译)程序来解释Perl语句。
有时,大型而复杂的解释性脚本(在Perl,Python和Ruby等语言中)也被称为解释程序,而术语“ 脚本”则保留给较短和较简单的脚本。
甲壳脚本是其他的命令序列(任何类型的命令),并且它需要一个Unix外壳诸如击解释脚本。在Bash手册页中:
Bash是sh兼容的命令语言解释器,它执行从标准输入或文件读取的命令。
Shell通常具有内置命令,这些命令既不是独立程序也不是脚本。相反,它们是Shell本身的一部分,并直接由Shell运行。cd
是此类内置命令的示例。
有时,有些命令既可以作为shell内置命令存在,也可以作为独立命令同时存在,例如,该echo
命令。
$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo
echo
它可以自行执行内置的Shell,而可以通过提供其完整路径来执行独立命令。
运行内置版本的echo:
$ echo --version
--version
运行独立echo
程序:
$ /usr/bin/echo --version
echo (GNU coreutils) 8.23
Packaged by Cygwin (8.23-4)
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
注意:上面的详细信息指的是Unix环境,但是相同的原理也适用于Windows环境。
.bat
很多年没有使用文件了)。
内置命令是外壳程序的一部分。程序由外壳执行。
内置命令包含在外壳本身内。当将内置命令的名称用作简单命令的第一个单词时(请参见Simple Commands),shell将直接执行该命令,而无需调用其他程序。内置命令对于实现使用单独的实用工具无法获得或不方便的功能是必需的。
http://www.gnu.org/software/bash/manual/bashref.html#Shell-Builtin-Commands
useradd
不是内置的shell。该网站只是说“命令”,而不是“内置命令”。这种解释与这个问题有什么关系?
命令只是一种告诉应用程序或系统做某事的方法。
应用程序通常会从GUI, stdin
但是其他方法也是可能的,例如UNIX套接字或命名管道,某种Web API,RPC连接或某些其他自定义协议。
一个只做一件事然后退出的应用程序(通常没有GUI)也可以称为命令,因为您实际上只能“给”该应用程序一个有意义的“命令”。小程序就是这样ls
工作方式,以及为什么将它们称为命令。
但是您不会将Photoshop称为命令,但是您肯定会通过GUI在其中发出命令。
但是,该术语对不同的人可能具有不同的含义。在您的示例中,命令用于描述直接运行的可执行文件,而不是需要脚本解释器才能工作的文件。区别很重要,因为当您运行Perl脚本时,/usr/bin/perl
实际上是正在运行的二进制文件(因此,如果您想杀死运行时间较长的Perl脚本,则必须在其中查找ps
)。但是,大多数外壳程序都具有“内置”命令,这些命令是对外壳程序本身的命令,不会导致外部可执行文件运行。例如,它cd
是由bash
自身处理的,它不会调用/sbin/cd
或类似。