命令与程序?

kra*_*r65 20 linux bash perl command-line

我正在查找adduserand之间的区别useradd解释是这useradd是一个命令,adduser而是一个 perl 脚本。我了解 perl 脚本是什么,但我不明白的是commandthen 到底是什么。

我一直以为,命令一样lslncd等都是写在任何语言中所有简单程序,简单地做一两件事。这些“简单程序”和 perl 脚本有什么区别?

我当然知道(perl)脚本不是编译而是在运行时解释,但我想这不是唯一的区别吗?

Ant*_*gan 33

简单来说,命令是计算机要执行的一条指令(或一组指令)。

独立命令

基本的 Unix 实用程序,如lsln等(通常)是用 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
Run Code Online (Sandbox Code Playgroud)

echo 它自己执行内置的 shell,而独立命令可以通过提供其完整路径来执行。

运行内置版本的 echo:

$ echo --version
--version
Run Code Online (Sandbox Code Playgroud)

运行独立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.
Run Code Online (Sandbox Code Playgroud)

注意:以上细节指的是 Unix 环境,但同样的原则适用于 Windows 环境。