1. Linuxの基礎知識
1.1. UNIXとLinux
1.2.1 UNIXの誕生
UNIXは1969年にアメリカのAT&T社ベル研究所において誕生した。 ベル研究所ではMulticsという大規模で複雑なOSの開発に関わっていたが、そのプロジェクトは進行が遅れていた。 そこで新たなアイディアをもとに小規模なOSであるUNIXを開発することを決意した。 UNIXはKen ThompsonやDennis Ritchieらが中心となりUNIXは開発されていく。
UNIXの設計はシンプルで、モジュール性に富んでいた。 コンパクトなコードと柔軟なデザインにより、異なるハードウェア上で移植が容易であった。 この特性が、UNIXの広がりと進化を支える要因となった。
UNIXは次第に多くの機能やツールが追加されていき、大学や研究機関で広く使われるようになった。 その後、AT&Tは商用ライセンスを提供し、商業利用も広がっていった。 一方で、研究者や技術者たちはUNIXのソースコードを入手し、独自のバージョンを開発することで、新たな機能や改良を加えるようになった。
この中で、System VとBSD(Berkeley Software Distribution)が注目を集めた。 System VはAT&Tが開発した商用UNIXであり、商業的な成功を収めた。 一方で、BSDはカリフォルニア大学バークレー校で開発され、OSSのUNIXとして広まった。 BSDはネットワーキング機能やセキュリティの改良に力を入れ、後のUNIX系OSに多くの影響を与えた。
1.2.2. Linuxの誕生
1980年代初頭、UNIXは主に大学や研究機関で使用されコンピュータの世界において高度な操作性と柔軟性を提供していた。 しかし、商業的なUNIXバリエーションは高価であり一般のユーザーには手が届かない状況であった。
そんな中1991年フィンランドの学生であるLinus Torvaldsは、個人用コンピュータにUNIXのようなOSを作成するアイデアを抱きそれを実現するプロジェクトを開始した。 彼はそのプロジェクトにLinuxと名付け、その最初のバージョンを公開した。この行動は、自身のものだけでなく、世界中の開発者が協力して進めるOSSの哲学を採用していた。
Linus TorvaldsはGPL(GNU General Public License)と呼ばれるライセンスを採用しソースコードを公開することで、誰もがLinuxの開発に参加できる環境を提供した。 これにより世界中の開発者がLinuxの改善に貢献し、その成長を支えることができるようになった。 GPLはソフトウェアの自由な共有と改変を促進するものであり、Linuxコミュニティの発展に大いに寄与した。
Linuxはその後急速に進化し、多くのハードウェアプラットフォームや用途に対応するようになった。 こうして、Linus TorvaldsがLinuxを生み出し、GPLというライセンスによって世界中の人々が共同で育て上げることで、UNIXを踏まえた新たなOSの誕生が実現した。
1.2. ディストリビューション
1.2.1. ディストリビューションとパッケージ
LinuxはOSSのOSで、さまざまなディストリビューションが存在する。 ディストリビューションはLinuxカーネルをベースにして独自の特徴を持ち、さまざまな用途に合わせてカスタマイズされている。 Linuxは多くの場合、高いセキュリティ、安定性、カスタマイズ可能性を提供し、さまざまなデバイスや用途に利用されている。
ディストリビューションはたくさんのパッケージと呼ばれるソフトウェアコンポーネントをまとめて提供するもの。 これらのパッケージには、アプリケーション、ライブラリ、ドライバーなどが含まれている。
パッケージはソフトウェアのインストール、アップデート、削除を簡単かつ効率的に管理するための仕組みである。
ディストリビューションごとに異なるパッケージマネージャが使われていることがある。 パッケージマネージャは、たくさんのパッケージを管理するためのツールであり、新しいソフトウェアの導入や既存ソフトウェアのアップデートを容易にする。 代表的なパッケージマネージャとしては、Debianベースのディストリビューションで使われるAPT(Advanced Package Tool)や、Red Hatベースのディストリビューションで使われるRPM(Red Hat Package Manager)などがある。
ディストリビューションは、さまざまなユーザー層やニーズに合わせて提供されており、デスクトップ、サーバー、組み込みシステム、セキュリティテストなどの用途に特化したものが存在する。 また、ディストリビューションごとに独自のユーザーインターフェース、設定ツール、サポート体制が提供されており、ユーザーは自身の好みや目的に応じて選択できる。
1.2.2. 代表的なディストリビューション
以下にいくつかの有名なLinuxディストリビューションを含む表をまとめて表示する。
ディストリビューション | 特徴 | 代表的なパッケージマネージャ |
---|---|---|
Red Hat Enterprise Linux (RHEL) | 企業向けに設計された堅牢なディストリビューション。商用サポート提供。 | RPM (yum/dnf) |
CentOS | RHELをベースにした無料のOSSディストリビューション。 | RPM (yum/dnf) |
AlmaLinux | CentOS 8の終了に伴い代替として注目されているディストリビューション | RPM (yum/dnf) |
Fedora | 新機能の実験場としての役割を持つ、コミュニティ駆動型のディストリビューション。 | RPM (dnf) |
Debian | OSS志向で安定性を重視するディストリビューション。 | APT (apt) |
Ubuntu | 初心者にも使いやすいデスクトップディストリビューション。 | APT (apt) |
Linux Mint | Ubuntuベースで、使いやすさと美しいデスクトップ環境に特化。 | APT (apt) |
openSUSE | ユーザーと開発者の共同作業を重視し、堅牢なシステムを提供。 | Zypper |
Arch Linux | ユーザーカスタマイズと最新ソフトウェアに重点を置くローリングリリース。 | Pacman |
Manjaro | Arch Linuxベースで使いやすいデスクトップ環境を提供するディストリビューション。 | Pacman |
Slackware | 歴史あるオリジナルなディストリビューション。堅牢でカスタマイズ性高い。 | 手動インストール |
Kali Linux | セキュリティテストとペネトレーションテスト向けに特化したディストリビューション。 | APT (apt) |
Tails | プライバシーと匿名性を重視し、セキュアなOSを提供。 | APT (apt) |
Qubes OS | セキュリティ重視のディストリビューション。仮想化基盤にXenを用いている。 | APT (apt) |
1.3. Linuxの特徴とシェル
1.3.1 カーネルとユーザランド
OSはカーネルとユーザランドという領域に分かれる。
カーネル
カーネルはOSの中核となる部分で、ハードウェアと直接やりとりするなどもっとも中心的な機能を受け持つ部分。 カーネルはハードウェアの違いを吸収して、プログラムがどのようなハードウェア上でも同じように動作する役割がある。
Linuxにおいてのカーネルはアプリケーションが動作するための基本環境を提供する。
具体的には「メモリ管理」「CPUリソースの配分」「ハードウェアにおける処理順序の割り振り」など、ユーザが意識しないバックグラウンドで動く基本機能を行う。
ユーザランド
OSが動作するのに必要なカーネル以外の部分のこと。 ファイルシステムやファイル操作コマンド、シェルなどの基本的なソフトウェア群を指す。
1.3.2. Linuxカーネルの基本動作
Linuxカーネルが提供する基本的なカーネルの機能の一部を記載する。
割り込み管理
コンピュータに接続されているさまざまな周辺機器の入出力処理の割り込みを管理するもの。
割り込み処理はプロセッサが処理を行っている最中でも,特定の信号があると処理を中断して別の処理を行わせる処理のことを指す。Linuxカーネルでは割り込みをうまく利用してさまざまな処理を効率的に処理することが可能となっている。
メモリ管理
Linuxカーネルでは、物理メモリと仮想メモリを用いてデータを管理している。プロセス一つ一つに対して、実際に物理メモリのアドレスをそのまま割り当てるのではなく、物理メモリに対応した仮想アドレスを割り当てることで、実際の物理メモリの容量よりもはるかに大きな容量のメモリを利用可能にしている。
また、各プロセスに対して固有の仮想アドレスを割り振ることで、それぞれのプロセスのメモリ空間は独立させています。そのためプロセスのメモリを犯さないようになっている。
ファイルシステム
保存されているデータに対してファイルという形でアクセスできるように提供しているもの。
全てのデータをファイルと言う形で管理しています。/(root)
(ルートディレクトリ)を頂点としたツリー状の構造をしており、カーネル自体もファイル、ディレクトリの集合体として存在する。
1.3.3. シェル
シェルとシェルスクリプト
Linux にはシェルという対話型のコマンド入力環境が用意されている。
シェル自体には大きく2 つの機能があり、1つはコマンド入力を受け付けること、もう 1 つはシェルスクリプトの実行がある。 シェルスクリプトとは、「コマンドの入力を自動化する」ためのもので1 つのファイルにコマンドを 1 行ずつ記述して作成する。 作成したシェルスクリプトを実行することで、コマンドの実行を自動化することができる。
また作成したシェルスクリプトをサーバーの起動時に実行したり、数時間毎に実行したりすることも可能。
シェルの種類
以下にいくつかの一般的なシェルとそれらの特徴を表で示す。
シェル名 | 特徴と説明 |
---|---|
Bash | Bourne Again SHellの略。Linuxシステムで広く使用されるデフォルトのシェル。豊富なコマンドとスクリプト機能を提供。 |
Zsh | オープンソースの拡張可能なシェル。Bashの拡張版で、カスタマイズ性が高く、タブ補完などの便利な機能を備えている。 |
Fish | ユーザーフレンドリーな対話型シェル。自動補完やシンタックスハイライトなど、新しいユーザーにも親しみやすい特徴がある。 |
Csh | Cシェルの略。Unixの初期から存在するシェルで、C言語に似た構文を持つ。カスタマイズ性は低いが、一部のユーザーには好まれる。 |
Ksh | Korn SHellの略。Bourne Shellの拡張版で、シェルスクリプトの開発をサポートする高度な機能を提供。 |
Dash | Debian Almquist SHellの略。軽量なシェルで、起動が速く、システムの基本的なタスクを処理するのに適している。 |