コマンド対プログラム?


19

私は、違いを探していたadduseruseraddし、説明はそれがあるuseradd一方で、コマンドでadduserのperlスクリプトです。私はperlスクリプトが何であるかを理解していますが、私が理解していないのはcommand正確にその時のものです。

、などのコマンドはls、すべて1つのことを行う言語で書かれたシンプルなプログラムだといつも思っていました。これらの「単純なプログラム」とperlスクリプトの違いは何ですか?lncd

もちろん、(perl)スクリプトはコンパイルされず、実行時に解釈されることを知っていますが、それだけが違いではないと思いますか?


1
この場合、コンパイルされたものと解釈されたものにあまり焦点を合わせないでください。解釈されたシェルを使用できます(ただし、なぜシェルが必要なのかは疑問です)。代わりに、コマンドアクションのコードがシェルのソースコードの静的な部分であるのに対し、スクリプトは外部であるという事実に焦点を当てる必要があります。必ずしもすべての依存関係が満たされているわけでもありません。スクリプトはより柔軟性があり、そのため、一般的に信頼性が低くなりますが、コマンドはシェルのどこでも機能します。
フランクトーマス

簡単に言うと、コマンドは実行可能なものであり、プログラムは実行可能なバイナリです。
ピチコス

回答:


32

簡単に言えば、コマンドはコンピューターによって実行される命令(または命令のセット)です。

スタンドアロンのコマンド

などの基本的なUnixユーティリティlsln等は、(通常は)Cで書かれ、スタンドアロンの実行可能にコンパイルされたプログラム実行するインタプリタを必要としません。通常、特定のライブラリファイルをシステムにインストールする必要がありますが、それは別の質問に対する答えです。

スクリプト

スクリプトはコマンドのコレクションであり、実際、スクリプト自体はコマンドと見なされます。

A のPerlスクリプトは、 Perlの一連の文で、必要としperl、実行可能(スタンドアローンおよびコンパイル)プログラムのPerl文を解釈するが。

大きくて複雑な解釈スクリプト(Perl、Python、Rubyなどの言語)は、解釈されたプログラムと呼ばれることもありますが、スクリプトという用語は短く単純なスクリプトに予約されています。

シェルスクリプトは、他のコマンドのシーケンス(コマンドの任意の型)であり、それは、スクリプトを解釈するようバッシュとしてUnixシェルを必要とします。Bashのmanページから:

Bashは、標準入力またはファイルから読み取ったコマンドを実行するsh互換のコマンド言語インタープリターです。

シェルビルトイン

シェルには通常、スタンドアロンプ​​ログラムでもスクリプトでもない組み込みコマンドがあります。代わりに、シェル自体の一部であり、シェルによって直接実行されます。cdこのような組み込みコマンドの例です。

シェル組み込みコマンドとスタンドアロンコマンドとして同時に存在するコマンド(コマンドなど)がありますecho

$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo

echo 単独でシェル組み込みコマンドを実行しますが、スタンドアロンコマンドはそのフルパスを指定して実行できます。

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環境にも同じ原則が適用されます。


Windowsで参照するエコーは、Cygwinをインストールした場合のみです。それは純粋にCMDシェルコマンドであるため、windowsにはecho。*が見つかりません(powershellのエコーはwrite-objectにエイリアスされます)
ジムB

@JimBそれは本当です。最後の行を編集して、意味を明確にしました。偶然にも、今週、PowerShellを習い始めたばかりです(ありがたいことに.bat、何年もファイルを操作する必要はありませんでした)。
アンソニーG-モニカの正義

2

組み込みコマンドはシェルの一部です。プログラムはシェルによって実行されます。

組み込みコマンドはシェル自体に含まれています。組み込みコマンドの名前が単純なコマンドの最初の単語として使用される場合(「単純なコマンド」を参照)、シェルは別のプログラムを呼び出さずにコマンドを直接実行します。組み込みのコマンドは、個別のユーティリティで取得することが不可能または不便な機能を実装するために必要です。

http://www.gnu.org/software/bash/manual/bashref.html#Shell-Builtin-Commands


しかしuseradd、組み込みのシェルではありません。ウェブサイトは「ビルトインコマンド」ではなく「コマンド」と言っただけです。この説明はこの質問にどのように関連していますか?
バーマー

1

コマンドとは、アプリケーションまたはシステムに何かをするよう指示する方法を意味します。

通常、アプリケーションはGUIからfromのさまざまなコマンドを受け入れますがstdin、UNIXソケットまたは名前付きパイプ、ある種のWeb API、RPC接続、または他のカスタムプロトコルなど、他の方法も可能です。

1つのことだけを実行し、通常GUIなしで終了するアプリケーションは、コマンドと呼ぶこともできます。これは、このアプリケーションに意味のある「コマンド」を1つだけ「与える」ことができるためです。これは、どのような小さなプログラムが好きでlsあり、そのように機能するか、そしてそれらがコマンドと呼ばれる理由です。

ただし、Photoshopをコマンドとは呼びませんが、GUIを使用してPhotoshop内でコマンドを発行することは確かです。

ただし、この用語は人によって異なることを意味します。この例では、コマンドを使用して、直接実行される実行可能ファイルと、スクリプトインタープリターが動作する必要があるファイルを記述しています。Perlスクリプトを実行しているとき、/usr/bin/perl実際に実行されているバイナリであるため、区別が重要になる可能性があります(したがって、長時間実行されているPerlスクリプトを強制終了する場合は、それを探す必要がありますps)。ただし、ほとんどのシェルには、シェル自体に対するコマンドである「組み込み」コマンドがあり、外部の実行可能ファイルは実行されません。たとえば、cdbash単独で処理され、呼び出し/sbin/cdなどはしません。


興味深い視点。あなたがこれを表示している抽象化のレベルで、私はそれを「呼び出し」または「ジェスチャー」と呼び、あるいはアンドロイドの用語を「意図」と呼びたいとさえ思っています。つまり、コンパイルされた基準と解釈された基準を作成するというアイデアが好きかどうかはわかりません。たとえば、Powershellはハイブリッド解釈(、Net)ですが、シェルとして、コードベース内にコマンドがあります。ただし、外部のコンパイル済み(マシンコード)実行可能ファイルがスクリプトだけでなく、コマンドとも異なる点については重要です。私が言ったように、興味深い視点。
フランクトーマス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.