
言葉指示Linux における 2 つの異なる概念を指します。
- 実行可能プログラム、例えばグレップ(またはシェル組み込み、例えばCD使用例: 「学ぶべき Linux コマンドのトップ 10 を紹介します。」
- 実行のためにシェルに送られる完全なテキスト文字列。例:grep com /etc/hosts使用例: 「Linux コマンドを入力して Enter キーを押します。」
Linux コマンドに関する文章を書くときに、この曖昧さを避けるためのベスト プラクティスを持っている人はいますか? すでに却下したいくつかの試みを以下に示します。
- 単語の使用プログラムまたは実行可能意味 #1 の場合。シェル組み込みの場合は不正確です。
- フレーズを使うコマンドライン意味 #2 については、「コマンド ライン」は「シェル」の同義語でもあるため、混乱を招きます。
- フレーズを使うコマンド文字列意味 #2 です。#1 と #2 は両方とも文字列なので不正確です。
アドバイスをいただければ幸いです。
答え1
POSIXgrep
「のようcd
な」ものを指すユーティリティ「、 そして準備金」指示「手順についてはこれらの用語は一貫して使用されるため、曖昧さがありません。
あなたのケースを順番に解決するために
「grep などの実行可能プログラム (または cd などのシェル組み込みプログラム)」はユーティリティ:
ユーティリティプログラム(除く)特別な組み込みユーティリティシェル コマンド言語の一部として提供され、シェルから名前で呼び出して特定のタスクまたは関連するタスク セットを実行できます。
それはさらに明確に:
システムは、特定のユーティリティをシェル関数または組み込みユーティリティとして実装する場合があります。
明確に言うと、これには
true
シェルの組み込みとしてよく見られるような通常のユーティリティが組み込まれています。正式には、「特別な組み込みユーティリティ
break
「」は、それ以上指定されていないユーティリティとは区別されます。これらは、、、、、、.
などeval
のものでset
、trap
シェルの内部状態に影響しますが、しないでください通常の組み込み関数である が含まれますcd
。仕様の微妙な要件 (特定の変数割り当て動作が異なり、 では利用できないexecvp
) を除けば、「ユーティリティ」はユーザー レベルで両方のカテゴリをカバーするのに十分です。 や などのシェル構文の項目はif
、while
ユーティリティではありません。「実行のためにシェルに送信される完全なテキスト文字列、例:
grep com /etc/hosts
"は指示:指示特定のタスクを実行するためのシェルへの指示。
コマンドには、 、パイプラインなどの単純なコマンドや、を使用した構文やグループ化コマンド
grep com /etc/hosts
などの複合コマンドが含まれますが、「コマンド」という言葉がユーティリティ自体を指すことはありません。コマンド内では、if
( ... )
コマンド名ユーティリティまたは関数を識別する が表示される場合があります。 のコマンド名はgrep com /etc/hosts
でありgrep
、grepユーティリティ。
「コマンド」をユーティリティや機能の意味で日常的に使用する場合、文脈によって曖昧さが解消される可能性がありますが、正式な意味は指示のみです。曖昧さを完全に回避する必要がある場合は、「ユーティリティ」と「コマンド」を一貫して使用できますこれら 2 つの役割について。
ただし、ユーザーが自分でその区別をすることはおそらく期待できないため、検索エンジンに最適化された「Linux コマンドのトップ 10」の記事は、ユーザーのインセンティブにとって適切な選択であると考えられます。
答え2
まとめ
ここであなたが言及している曖昧さは、次のような用語を使用することで最もよく解決されます。プログラム、実行可能ファイル、または単に実行可能道がある/道であるものに対してシェルコマンドあるいはコマンドライン 入力した内容を参照したいときはコマンドインタープリタ。
歴史的背景
初期の印刷物の索引Cプログラミング言語(「K&R」、プレンティス・ホール)には、この単語は1回だけ言及されている。指示、特にその単語のためではなく、コマンドライン引数この小さな意味の核が、その後のあらゆる用途に芽生え、広がった重要な種子を提供します。1978 年版の 111 ページから引用:
5.11 コマンドライン引数
C をサポートする環境では、プログラムの実行開始時にコマンドライン引数またはパラメータをプログラムに渡す方法があります。
つまり、指示シェルコンテキストでのみ使用されます(シェルは定義上コマンドインタープリタ) は、インタラクティブな使用でもスクリプトプログラミングでも使用できます。著者は、この例を続けます。
必要な宣言と使用法の最も簡単な例は、プログラムである
echo
。これは、単にコマンドライン引数を空白で区切って1行にエコーするものである。つまり、コマンドecho hello, world
が与えられた場合、出力は
hello, world
K&Rがプログラムとコマンドラインについてどのように語っているかに注目してください。言い換えれば、それはIEEEのPOSIX 1003.2すべては、ない何POSIX 1003.1一般的に言えば、Dot-1 は C プログラミングをカバーし、Dot-2 はシェル プログラミングをカバーします。
ここで本当に話題にしているのはCプログラミングではなくシェルプログラミングです。Unix プログラマーズ マニュアルのセクション 1関数呼び出しではなくコマンドについて言及しています:
名前
intro — 一般的なコマンド(ツールとユーティリティ)の紹介
説明
セクション 1 のマニュアル ページには、BSD ユーザー環境を構成するコマンドのほとんどが含まれています。セクション 1 に含まれるコマンドには、テキスト エディター、コマンド シェル インタープリター、検索およびソート ツール、ファイル操作コマンド、システム ステータス コマンド、リモート ファイル コピー コマンド、メール コマンド、コンパイラおよびコンパイラ ツール、フォーマットされた出力ツール、およびライン プリンター コマンドなどがあります。
すべてのコマンドは終了時にステータス値を設定し、その値をテストしてコマンドが正常に完了したかどうかを確認できます。終了値とその意味については、各マニュアルで説明されています。通常、値 0 はコマンドが正常に完了したことを示します。
1003.1の用語で言えば、文字列引数と呼ぶかもしれません。のシステムCライブラリの関数これはシステムコールそのものではなく、さまざまなシステムコールを裏で利用するライブラリ関数であり、その1つが
execve
このシステムコールは、最初の引数として定数
char *
引数を取ります。これは、ファイルシステム内の実行可能ファイルへのパスです。
公開されたソリューション
公開されているソリューションの 1 つでは、一貫して次の定義が使用されています。
実行可能ファイル
あファイル特別にマークされているのはオペレーティング·システムこのファイルをプログラムとして実行しても問題ないことを示します。通常は「実行可能」と短縮されます。
指示
でシェルプログラミングとは、プログラム名とその引数の構文上の組み合わせのことです。もっと大まかに言えば、シェル (コマンド インタープリタ) に入力して何かを開始させるものすべてです。[...]
コマンドライン引数
プログラム名と一緒に指定する値は、 シェル実行する指示。 [...]
コマンド名
の名前プログラム現在実行中、入力したとおりコマンドライン。 [...]
第4版よりPerlプログラミング(O'Reilly)、ここではその本の著者の許可を得て使用しています。 :)。
運が良ければ、シェルにこの簡単なコマンドラインを入力して、男実行可能ファイル/プログラム:
man perlglossary
しかし、もし運が悪ければ、ここでも見つけることができます。
シェルコマンド
これはシェルコマンドになります:
exec 2>errs.out
そこには何も変更されていないことに注意してくださいexec
。ファイル記述子を再配置しただけです。
私も同じです:
exec 5<&0 # save old stdin
exec 0<&3 # read some_var
exec 0<&4 # read another_var
exec 0<&5 # restore it
execve
したがって、ここでもスクリプトの各行は「コマンド」です (ここでは、完全に実行した場合に実際にいくつのシステム コールが生成されるかは読者の課題として残しておきます)。
#!/bin/sh
device=/dev/rmt8
dd_noise='^[0-9]+\+[0-9]+ records (in|out)$'
exec 3>&1
status=`((dd if=$device ibs=64k 2>&1 1>&3 3>&- 4>&-; echo $? >&4) | egrep -v "$dd_noise" 1>&2 3>&- 4>&-) 4>&1`
exit $status
由緒あるジェレミアドよりCshプログラミングは有害であると考えられる、ここでも親切な許可を得て使用しています、などなど。:)
答え3
かなり単純な解決策(そして、哲学的、言語的な回避策)は、使用言葉指示、 そして言及言葉指示たとえば、普通の英語でも、特定の単語はアクションを実行しますが、その使用方法はその実行方法です。適切な状況で「I do」と言うと、たとえば結婚することになります。しかし、他の人の発言を引用する場合はそうではありません。引用されたものはすべて言及であり、使用ではありません。
したがって、最初のコマンドのリストはコマンドの使用ではなく、コマンドの言及です。
2番目の例は私のお気に入りの
$ rev wordlist | sort | rev > speculum
(これは の逆アルファベット順のコピーを生成しますwordlist
)
実際に何かを行うので、間違いなく Use です。
答え4
私は検討しますする必要はありません答えとしては、説明されている曖昧さが害を及ぼすことはありません。
私が見たすべての文脈において、「コマンド」という言葉が実行可能プログラムを指す場合、それは常にエンドユーザーがシェルに入力して実行させるものです。私は「コマンドinit
" または "コマンドld-linux.so
「」。
「コマンド」がコマンドラインプログラムを指す場合、それは常に「そのプログラムで始まるコマンドのファミリー」を指します。たとえば、「コマンドgrep
「プログラムで実行できるすべてのことgrep
、つまり「コマンドのファミリー」について話していることになります。これは部分的なコマンドにも当てはまります。たとえば、「このapt install
コマンドはパッケージをインストールするためのものです完全なコマンドを実行してもapt install
通常は何も役に立ちません。