Linux Essentials for Web Developers
第2話:システム概要とアーキテクチャ
(最終更新日:2023.12.17)
(絵が小さい場合はスマホを横に)
「Linuxのシステムを知ろう」
前回は、Linux全般の概要について学んだ。
今回は、もう少し踏み込んで、システムの概要やアーキテクチャについて説明したいと思う。
このあたりのことを少しでも知っていると、実際開発で使ったときに、Linuxの理解が深まると思う。
ぜひ、どんなものかを学んでみよう。
1.システムの概要
■カーネル
カーネルはLinuxシステムの中核をなす部分で、ハードウェアとソフトウェアの間の通信を司る。
この部分はシステムの最も基本的な機能を担い、リソース管理、メモリ管理、デバイス管理などを行う。
タイプとして、Linuxカーネルはモノリシック型で、多くの機能が一つの大きなブロックとして組み込まれているが、
モジュール式のアプローチも取り入れており、必要に応じて機能を追加・削除できる。
■シェル
シェルはユーザーがカーネルと対話するためのインターフェースを提供する。
コマンドラインからの入力を受け取り、カーネルに命令を伝え、結果をユーザーに返す。
代表的なシェルにはbash、zsh、fishなどがあり、それぞれ特徴がある。
例えば、bashは非常に一般的で、多くのLinuxシステムのデフォルトシェルになる。
■ファイルシステム
Linuxではすべてがファイルとして扱われる。これには通常のデータファイルだけでなく、ディレクトリ、ハードウェアデバイス、さらにはプロセスも含まれる。
Linuxのファイルシステムは階層的な構造を持ち、ルートディレクトリ(/)から始まり、さまざまなサブディレクトリが展開される。
例えば、/etcには設定ファイル、/homeにはユーザーの個人ファイルになる。
■ユーザーとグループ
Linuxでは、システムリソースへのアクセスを制御するためにユーザーアカウントが使用される。
各ユーザーには一意の識別子(UID)が割り当てられる。
ユーザーは一つまたは複数のグループに属することができる。
グループは特定のリソースへのアクセスを管理するために使用され、グループごとにグループ識別子(GID)が割り当てられる。
■パッケージ管理システム
パッケージ管理システムを使って、ソフトウェアのインストール、更新、削除を行う。
これにより、システムの整合性を保ちつつ、ソフトウェアの管理を容易にする。
例えば、Debianベースのディストリビューションではapt、Red Hatベースではyumが使用される。
このように、Linuxシステムはカーネル、シェル、ファイルシステム、ユーザーとグループ、パッケージ管理システムなどの要素から構成され、
これらが統合して動作する。この基本的な理解は、Linuxシステムのより高度な操作やトラブルシューティングに進む前の重要なステップである。
シェル(コマンド)による操作が基本
2.アーキテクチャ
■モジュラー設計
Linuxカーネルはモジュラー設計を採用しており、必要に応じて機能を追加または削除することが可能だ。
これにより、システムをカスタマイズし、特定のニーズに合わせて調整することができる。
カーネルの機能はモジュールとして組み込まれており、これらは必要に応じてロードまたはアンロードすることができる。
例えば、新しいハードウェアサポートを追加したり、不要なドライバを無効化することができる。
■ユーザー空間とカーネル空間
Linuxシステムはユーザー空間とカーネル空間という二つの主要な部分に分かれる。
カーネル空間はシステムの核心的な操作を担当し、ユーザー空間はアプリケーションの実行環境を提供する。
この分離はセキュリティとシステムの安定性を高めるために重要だ。
不適切なアプリケーションがカーネルの操作を誤って変更することを防ぎ、システムの信頼性を保持する。
■プロセス管理
Linuxは複数のプロセスを効率的に管理し、マルチタスキングを実現する。プロセスはシステム上で実行されるプログラムのインスタンスだ。
カーネルはCPUリソースをプロセス間で適切に配分するためのスケジューリング機構を備えている。これにより、各プロセスが平等にCPU時間を得られるようにする。
■デバイスドライバ
Linuxカーネルはさまざまなハードウェアデバイスをサポートするためのデバイスドライバを含んでいる。これにより、様々なハードウェアとの互換性が確保される。
デバイスドライバはカーネルに統合されるか、モジュールとして動的にロードできる。これにより、新しいハードウェアのサポートを追加する際の柔軟性が提供される。
■ファイルシステム
Linuxは複数のファイルシステムをサポートし、これらをシームレスに統合する。
例えば、ext4(第4拡張ファイルシステム)、btrfs(B-treeファイルシステム)、XFSなどがある。
Linuxは仮想ファイルシステム(VFS)を使用して、異なるファイルシステム間で一貫したインターフェースを提供する。
現在はどのシステムも成熟しており、どれを選んでも大きな違いはないだろう。ちなみに、RedhatはXFS、Ubuntuはext4になる。
■ネットワーク
Linuxカーネルはネットワーキングのための強力な機能を備えており、様々なネットワークプロトコルとの互換性がある。
ネットワークセキュリティのための機能も組み込まれており、ファイアウォール、ルーティング、トラフィック制御などの機能がサポートされている。
これらのアーキテクチャ要素は、Linuxの柔軟性、効率性、セキュリティを支える基礎となっている。
モジュラー設計、ユーザー空間とカーネル空間の分離、効率的なプロセス管理、多様なハードウェアサポート、そして強力なネットワーク機能は、
Linuxを多目的で高度にカスタマイズ可能なオペレーティングシステムにしている。
プロセスを効率的に管理し、マルチタスクを可能にする
3.カーネルとは何か
カーネルはLinuxオペレーティングシステムの中核部分で、システムとハードウェアの間のコミュニケーションを管理する。
カーネルはオペレーティングシステムの基本的な機能を提供し、システムの効率性、安定性、セキュリティを決定する。
カーネルの主な役割は、リソースの割り当て、スケジューリング、プロセス間通信を行うプロセス管理や、
システムメモリの割り当てと管理、ハードウェアとソフトウェア間のインターフェースを提供するデバイスドライバ、
ユーザー空間のアプリケーションがシステムリソースを安全に使用できるようにするシステムコール、
データの読み書き、ストレージの管理を行うファイルシステム管理などがある。
ディストリビューションだけでなく、その中核のカーネルもオープンソースであり、世界中の開発者によって開発と改善が進められている。
モジュラー構造をとることで、柔軟なカスタマイズが可能で、特定のニーズに合わせることもできる。
高い効率性と安定性を提供し、サーバー、デスクトップ、組み込みシステムなど、幅広い環境で使用できる。
カーネルはLinuxシステムの基盤を形成し、システムの性能と機能性を大きく左右する重要なコンポーネントである。
中心的な役割を果たすkernel
4.ディストリビューションの違いと選び方
■違い
Linuxディストリビューションは、Linuxカーネルに加えて、様々なアプリケーションやライブラリ、管理ツールが組み込まれたオペレーティングシステムだ。
各ディストリビューションは特定のニーズや用途に合わせてカスタマイズされている。
各ディストリビューションの違いとして、ユーザーインターフェース(GNOME, KDE, XFCE)が異なり、特にデスクトップ環境(GUI)の使い勝手がかなり違ってくる。
また、パッケージ管理システムやリリースサイクル(サポート期間含め)、コミュニティも異なる。もちろん、事前にインストールされているソフトウェアも異なる。
■選び方
サーバー用途、デスクトップ用途、開発用途、教育用途など、使用目的に最適なディストリビューションを選ぶことが重要だ。
Linuxはこれらの用途に合わせて使えるだけの機能を持ち合わせている。
初心者はUbuntuやLinux Mintなどのユーザーフレンドリーなディストリビューションが適している。
上級者向けにはDebianやArch Linuxなど、よりカスタマイズ性が高く複雑なディストリビューションがある。
加えて、ハードウェアの互換性やセキュリティとサポートの長さなども選定要因になる。
企業がサーバーとして用いる場合は、サポート期限の長い(約10年)Red Hat Enterprise Linux(RHEL)が良いだろう。
Linuxディストリビューションは非常に多様で、各々が独自の特徴と強みを持っている。
個々のニーズと好みに最適なディストリビューションを選ぶことが重要である。
味付け次第で色んなディストリビューションができる(Linuxのイメージ)
5.まとめ
今回はLinuxのシステムに関して、一歩踏み込んで説明した。 参考図書に挙げた書籍を見れば、さらにシステムに関して詳しくしることができる。 Linuxは使っているけど、中身に関しては詳しくない、もう一歩知ってみたいと言う方にはおすすめである。 仕組みを理解したうえで、今までよりも、より良い使い方ができるようになるはずだ。
▼参考図書、サイト
「スーパーユーザーなら知っておくべきLinuxシステムの仕組み」 インプレス Brian Ward, 柴田 芳樹
「Linux再入門―カーネル、シェル、ファイルといった基本概念を理解してトラブルシューティング力を高めよう」 Udemy しま