Linuxの仕組みの考え方を整理してLinuxを見通しよく理解できるようにします。
記事の目次
システムの入出力はファイルに抽象化していく!
コンピュータシステムの処理は、基本的に「入力」→「処理」→「出力」に抽象化できます。そして、Linuxでは、「入力」と「出力」は、ファイルに抽象化します。
標準入力/標準出力/標準エラー出力をファイルに抽象化する!
標準入力/標準出力/標準エラー出力は、ファイルではありませんが、ファイルと見立てて処理を行うことができます。
デバイスをファイルに抽象化する!
デバイスは、ファイルではなく機器ですが、機器の動作も「入力」→「処理」→「出力」に抽象化できます。Linuxでは、デバイスファイルでデバイスを表現して抽象化します。
仮想的な入出力をデバイスとして扱って抽象化する!
ログイン用の端末や、乱数生成器など仮想的な機器をデバイスとして扱って、可能な限りファイルに抽象化しています。
ネットワークをファイルとして扱って抽象化する!
ネットワークも「入力」→「処理」→「出力」に抽象化できます。こちらは、デバイスファイルのようにコマンドラインで自由にあつかうことはできませんが、プログラムからはソケットとして扱い、ファイルと同じ用にオープン、クローズや読み書きを行う形で抽象化しています。
管理対象は階層構造(木構造)にまとめていく!
多数の管理対象は、階層構造(木構造)にまとめていきます。
ファイルシステムは階層構造で管理する!
入出力で使用するファイルは、ファイルシステムで管理します。ファイルシステムは、「/」ディレクトリを頂点とする階層構造で構成し管理します。
プロセスは階層構造で管理する!
処理を担うプロセスは、プロセス番号「1」のLinuxの管理プロセスから、子プロセスとして生成していきます。新たにプロセスを生成する場合は、子プロセスを生成するプロセスを親として、親プロセスをコピーする形で子プロセスを生成し、木構造を構成します。
システム管理全体を階層構造で管理する!
最近のLinuxは、Systemdを使用してシステム全体を管理します。Systemdは、管理対象をカテゴリー分けし、階層化してシステムを管理します。
処理の構造化は・・・
処理の制御は、システムの起動と停止については、Systemdで階層化が行うことができるようになりました。ただ、その他のケースでは、Linux単体では基本的にシェルスクリプト組んで、処理の階層化を行うしかありません。処理をモジュール化して階層化する場合は、ジョブ管理ソフトウェアなどを使用する必要があります。
おわりに
Linuxでは、コマンドラインを中心とした操作だけでもかなりの処理を容易に行うことができます。その範囲を超えた場合には、独自のプログラムを作成したり、外部のソフトウェアの導入を検討します。
関連記事