我正在寻找adduser
和useradd
和之间的区别一个解释那useradd
是命令,而那adduser
是 perl 脚本。我知道什么是 perl 脚本,但我不明白command
then 到底是什么。
我一直认为,诸如 、 等命令ls
都是ln
用cd
任何语言编写的简单程序,只做一件事。这些“简单程序”和 perl 脚本有什么区别?
我当然知道(perl)脚本不是在编译而是在运行时解释的,但我猜这不是唯一的区别?
答案1
简单来说,命令就是计算机要执行的一条指令(或一组指令)。
独立命令
基本的 Unix 实用程序(例如ls
、ln
等)通常用 C 编写,并编译为独立可执行文件程式不需要解释器来执行;它们通常需要某些图书馆文件将被安装在系统上,但这是另一个问题的答案。
脚本
脚本是命令的集合,事实上,脚本本身也被视为命令。
APerl 脚本是一系列 Perl 语句,需要perl
可执行文件(独立和编译)程序解释 Perl 语句。
有时大型且复杂的解释性脚本(使用 Perl、Python 和 Ruby 等语言)也被称为解释型程序而术语脚本保留用于更短、更简单的脚本。
Ashell 脚本是其他命令(任何类型的命令)的序列,它需要 Unix shell(例如 Bash)来解释脚本。摘自 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 环境。
答案2
内置命令是 shell 的一部分。程序由 shell 执行。
内置命令包含在 shell 本身中。当内置命令的名称用作简单命令的第一个字时(请参阅简单命令),shell 直接执行命令,而不调用其他程序。内置命令对于实现无法或不方便通过单独的实用程序获得的功能是必不可少的。
http://www.gnu.org/software/bash/manual/bashref.html#Shell-Builtin-Commands
答案3
命令只是一种告诉应用程序或系统做某事的方式。
应用程序通常会接受许多不同的命令,要么来自 GUI,要么来自stdin
,但其他方法也是可能的,例如 UNIX 套接字或命名管道、某种 Web API、RPC 连接或某些其他自定义协议。
只执行一项操作然后退出(通常没有 GUI)的应用程序也可以称为命令,因为您实际上只能“给”此应用程序一个有意义的“命令”。这就是诸如此类的小程序的ls
工作方式,也是它们被称为命令的原因。
但是你不会将 Photoshop 称为命令,但你肯定会通过 GUI 在其中发出命令。
然而,这个词对不同的人有不同的含义。在你的例子中,命令用于描述直接运行的可执行文件,而不是需要脚本解释器才能运行的文件。这种区别很重要,因为当您运行 Perl 脚本时,/usr/bin/perl
是实际运行的二进制文件(因此,如果您想终止长时间运行的 Perl 脚本,这就是您必须在 中查找的内容ps
)。但是,大多数 shell 都有“内置”命令,这些命令是 shell 本身的命令,不会导致外部可执行文件运行。例如,cd
由其自身处理bash
,它不会调用/sbin/cd
或类似命令。