コマンドとプログラムの違いは?

コマンドとプログラムの違いは?

adduserとの違いを調べていたのですuseraddが、説明thatuseraddはコマンドですが、 whileadduserは Perl スクリプトです。Perl スクリプトが何であるかは理解していますが、commandthen が正確に何であるかは理解していません。

ls私は、、lnなどのコマンドはすべて、単に 1 つのことを実行する、任意の言語で記述された単純なプログラムであると考えていましたcd。これらの「単純なプログラム」と Perl スクリプトの違いは何ですか?

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

答え1

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

スタンドアロンコマンド

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

スクリプト

スクリプトはコマンドの集合であり、実際にはスクリプト自体もコマンドと見なされます。

PerlスクリプトPerl文のシーケンスであり、perl実行可能ファイル(スタンドアロンおよびコンパイル済み)が必要です。プログラムPerl ステートメントを解釈します。

大規模で複雑な解釈スクリプト(Perl、Python、Rubyなどの言語)は、解釈プログラム一方、脚本より短くてシンプルなスクリプトのために予約されています。

シェルスクリプトは他のコマンドのシーケンス(任意のタイプのコマンド)であり、スクリプトを解釈するには Bash などの Unix シェルが必要です。Bash のマニュアル ページから引用します。

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 環境にも適用されます。

答え2

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

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

http://www.gnu.org/software/bash/manual/bashref.html#Shell 組み込みコマンド

答え3

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

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

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

しかし、Photoshop をコマンドと呼ぶことはできませんが、GUI を介して Photoshop 内でコマンドを発行することはできます。

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

関連情報