Linuxターミナルプログラムの8つのタイプ: あなたはそれらすべてを知っていますか?
LinuxはUnix設計の強い原則に基づく精神から恩恵を受けています。プログラムはテキストを介してコミュニケーションを取り、パイプラインを介して組み合わせることができ、一つのことをうまく処理します。ただし、それ以上に、プログラムは非常に異なる動作をし、多くの異なる挙動を示すことができます。
バックグラウンドプロセス
Linuxのようなマルチタスクオペレーティングシステムは、さまざまなプログラムを同時に実行します。ユーザーが直接制御せずに実行されるものは、バックグラウンドプロセスとして知られています。バックグラウンドプロセスには実際には「デーモン」と呼ばれる一種類のものしかありません。
1. デーモン
「デーモン」という用語は奇妙ですが、それは単に「バックグラウンドプロセス」を意味します。デーモンは通常、システム上で他に何が起こっても自分自身を実行し続けるためのトリックを使用します。たとえば、シェルとは独立して実行される自身のコピーをフォークします。inetdやlaunchdのようなサービスは、プログラムの代わりにこれを行うことができ、彼ら自身もデーモンです。
デーモンの名前はしばしば「d」で終わります。例えば、httpd(Apacheウェブサーバー)、inetd(インターネットサービスデーモン)、systemdなどです。
外部プログラムやユーザーがデーモンと通信する必要がある場合、通常はデーモンに再起動や設定の再読み込みを指示する信号を送信します。システム上で実行されているデーモンを発見するには、psツールを使用できます。
コマンドラインインターフェース
ほとんどのLinuxプログラムはコマンドラインインターフェースを持っており、テキストコマンドを入力することで使用します。これらは最も一般的で、通常は使いやすいターミナルプログラムです。これらのプログラムは通常、起動してすぐに実行し、完了すると停止します。
2. カントリップ
最も単純なタイプのプログラム—非公式に「カントリップ」と呼ばれる—は、入力や出力なしで単に動作します。これらのプログラムはしばしばファイルを操作したり、関連するシステム管理タスクを実行します。ファイルを削除する rm プログラムは、典型的な例です:
rm myfile.txt
ファイルが存在する場合、rmはそれを削除し、あなたのターミナルは次の行にプロンプトを表示し、次のプログラムやコマンドを待ちます:
rmコマンドには動作を制御するいくつかのオプションがありますが、そのシンプルさは入力と出力がないことにあります。
3. フィルター
多くのLinuxプログラムはその完全に逆で、入力を必要とし、出力を生成します。これらのプログラムはしばしば入力を何らかの方法で変更し、そのようなプログラムはたくさんあります:cut、head、sort、uniqなど。
grepコマンドはフィルタの意味を特によく示しています。これは、入力の各行をスキャンし、特定の条件を満たす場合に出力として再現します。grepの場合、条件は特定のテキストパターンに一致する正規表現です:
フィルターはデータを操作するのに優れており、複数のコマンドを連結して複雑な作業を実行するパイプラインで一般的に使用されます。これらのツールを組み合わせて、基本的なデータベースを構築することもできます。
4. シンク
フィルターと対照的に、シンクは非常に少ないです。このタイプのプログラムは入力を受け取りますが、出力を作成しません—少なくとも、ターミナルの画面上には出力しません。一例としては、ファイルや標準入力を紙に印刷する行プリンタのlprがあります。
シンクはしばしば画面以外のメディアに出力します。例えば、テキストを音声に変換するespeakプログラムのように。
5. ソース
シンクの反対語は「ソース」です。これは、入力を処理することなく出力を生成するプログラムのことです。ソースプログラムは、環境や引数として指定されたファイルなど、他の場所からデータを取得します。
lsプログラムはファイルをリストするために様々なアプローチを使用しますが、スタンダード入力を処理することはありません。最も単純な場合、lsは引数すら必要ありません。
ls
デフォルトでは、lsは現在のディレクトリで動作し、その内容を表示します。コマンドライン引数を渡すことで、別のディレクトリ、ファイル、またはファイルのセットの詳細を表示できます。
ls /tmp
ls /etc/passwd
ls ~/.*
6. コンパイラ
コンパイラは、CLIプログラムの中で最も複雑なタイプであり、通常はプログラミングに使用されます。コンパイラは他のプログラムのように実行されますが、その作業が非常に複雑な場合があるため、完了するまでに時間がかかることがあります。
彼らの名前はしばしば「c」で終わります。「コンパイラ」用のもので、例えばcc、javac、あるいはrustcです。コンパイラはちょっとした魔法のようなもので、ファイルを扱い、ある種類のデータを別の種類に変換します。
Cコンパイラであるccは、コンパイラの典型的な動作を示しています。
cc file1.c file2.c -o program
このコマンドは、コンパイラを二つのファイル—file1.cとfile2.c—に対して実行し、プログラムという名前の三番目のファイルを生成します。ここで、「-o」引数は「出力ファイル」を意味します。
コンパイラは、そのタスクや基盤となる言語に応じて、追加のファイルをソースする場合があることに注意することが重要です。ファイル名が明示的にコマンド実行時に指定されていなくても、ファイル1.cのようなCプログラムは、ヘッダーファイル(例:file1.h)を含むことができ、コンパイラはそれを見つけて最終的なプログラムを生成するために使用します。
これがコンパイラを非常に複雑にしている要因の一部です。コンパイラは、直接指示を受けることなく、背景で多くのことを行うことができます。
インタラクティブプログラム
前のプログラムはすべて非対話式で実行されます。それらを実行すると、どのように動作するかを直接制御することはできません。最後の2つのタイプのプログラムは非常に異なります。
7. 行ごとに
最も単純なインタラクションの形は、一度に一行です。Unixの歴史の初めでは、これらのコマンドは非常に一般的で、テレタイプで動作していたためです。それは、一度に一行だけ操作する美化されたタイプライターでした。
今日では、これらのプログラムは本当に「名ばかりのインタラクティブ」であるように感じますが、1960年代には非常に革新的でした。もし勇気があるなら、元のテキストエディタであるedを使って昔の日々を再体験することができます。
このedのトランスクリプトは、テキスト「hello world」をfoo.txtという名前のファイルに書き込むコマンドを示しています。その中のいくつかの行はユーザーによって入力されています。「a」はバッファにテキストを追加するコマンドであり、「,p」は現在のバッファを表示し、「w」はバッファをファイルに書き込みます。書き込んだ後、edは書き込まれたバイト数を報告し、この場合は13バイトです。
edについて一つだけ覚えておくべきことがあるとすれば、それはプログラムを終了する「q」コマンドです。入力した新しいテキストは保存されませんが、もし誤ってedを実行してしまった場合、「q」と入力してEnterを押すことで、できるだけ早く退出できます!
ご覧のとおり、行ごとのテキスト編集は骨の折れるプロセスで、エラーが発生しやすいです。edプログラムは緊急時には役立ちますが、行ごとのプログラムは一般的に時代遅れです。
8. TUI
対話型プログラム、特にテキストエディタにとって、はるかに優れた代替手段はTUIスタイル:テキストユーザーインターフェースです。この名前は、グラフィックスを使用してほぼ同じタイプの結果を達成するGUIアプリからこれらのプログラムを区別します:真の対話型プログラムです。
テキストエディタのvimは依然としてコマンドベースですが、テキストファイル内を移動したり、テキストを検索したり、大きな部分を削除したり、画面上でリアルタイムにすべての作業を確認するために使用できます。現代のTUIは、グラフィカルインターフェースを近似するために色やボックス描画文字を広範囲に使用しています。
これらの種類のプログラムに対する言及を常に見ることはないかもしれませんが、それらが存在し、何をするのかを理解することは有益です。各種類には特定の強みがあり、特定の文脈で使用してさまざまなタスクを達成することができます。




