命令與程序?

命令與程序?

我正在查找adduser和之間的區別useradd,並且一個解釋useradd是一個指令,adduser而是一個 perl 腳本。我理解 perl 腳本是什麼,但我不明白commandth​​en 到底是什麼。

我一直認為像 、 等指令ls都是lncd任何語言寫的簡單程序,只做一件事。這些「簡單程式」和 perl 腳本有什麼區別?

我當然知道(perl)腳本不是編譯的而是在運行時解釋的,但我想這不是唯一的區別?

答案1

簡單來說,指令就是電腦要執行的一條指令(或一組指令)。

獨立命令

基本的 Unix 實用程序,例如lsln等(通常)用 C 編寫並編譯為獨立的可執行文件程式不需要解釋器來執行;他們通常需要一定的圖書館要在系統上安裝的文件,但這是另一個問題的答案。

腳本

腳本是命令的集合,事實上,腳本本身也被視為命令。

APerl腳本是一系列 Perl 語句,需要perl可執行檔(獨立的和已編譯的)程式解釋 Perl 語句。

有時,大型且複雜的解釋性腳本(使用 Perl、Python 和 Ruby 等語言)也稱為解釋程式而術語腳本保留用於更短和更簡單的腳本。

A外殼腳本是其他命令(任何類型的命令)的序列,它需要 Unix shell(例如 Bash)來解釋腳本。來自 Bash 手冊頁:

Bash 是一種與 sh 相容的命令語言解釋器,它執行從標準輸入或檔案讀取的命令。

外殼內置

貝殼通常有內建命令既不是獨立程式也不是腳本。相反,它們是 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或類似的。

相關內容