Linuxとは何か。代表的なLinuxディストリビューション（RHEL, CentOS, Debian, Ubuntu）の比較。

# この記事を書いたきっかけ
Webアプリケーションを作成しているときに、ターミナルでコマンドを入力することがよくあります。ただ、よく使うコマンドのことは知っていても、自分が一体何をやっているのか、その行為それ自体をよくわかっていませんでした。OSとかカーネルとか、UbuntuとかDebianとか、聞いたことはあっても説明できるほど知りません。今回はLinuxとは何かについて勉強してまとめたいと思います。

### 対象者
- Linuxとは何か知りたい人
- UNIXとは何か知りたい人
- Linuxディストリビューションとは何か知りたい人
- パッケージ管理ツールについて知りたい人
# Linuxとは何か
Linuxは、オープンソースのUNIX系オペレーティングシステム（OS）です。

1991年にリーナス・トーバルズ氏によって初めて公開され、その後、全世界の開発者コミュニティによって継続的に改良されています。Linuxは、カーネル（OSの中核部分）を指すこともありますが、一般的にはLinuxカーネルを基盤としたディストリビューション（例：Ubuntu、Fedora、Debianなど）全体を指します。

# UNIXとは
UNIXとは、OS XやMicrosoft Windowsと同じくオペレーティングシステム（OS）の一つです。1969年に、アメリカのベル研究所で開発が始まりました。
同時に複数のプログラムを実行する「マルチタスク」、複数のユーザーが利用できる「マルチユーザー」といった機能をサポートしています。

昔に開発された画期的なOSという感じでしょうか。

UNIXは進化の過程で、各UNIXメーカーごとにさまざまな拡張が行われてきました。そのため、同じUNIXシステムと同士であっても互換性が乏しくなっていきました。

現在ではPOSIX（Portable Operation System Interface for UNIX：ポジックス）というUNIX系OSに関する標準仕様が制定されました。POSIXを定めているのは、エレクトロニクス分野では世界最大の学会であるIEEE（Institute of Electrical and Electronic Engineers：米国電気電子学会）です。これで、OSの互換性が保たれるようになりました。


### UNIXの特徴
1. **マルチタスク**
複数のプログラムを同時に実行できる機能を持っています。これにより、ユーザーは同時に複数の作業を効率的に行うことができます。
2. **マルチユーザー**
複数のユーザーが同時に一台のコンピュータシステムにログインし、リソースを共有しながら使用することができます。これにより、システムのリソースを効率的に利用できます。
3. **ポータビリティ**
UNIXはC言語で書かれており、異なるハードウェアプラットフォームに移植しやすい設計になっています。これにより、広範なハードウェアで動作することが可能です。
4. **ファイルシステム**
UNIXのファイルシステムは階層構造になっており、ファイルやディレクトリを効率的に管理できます。また、デバイスもファイルとして扱うことができます。
5. **ツールとユーティリティ**
UNIXはシンプルで小さなツールを組み合わせて強力な機能を実現する設計哲学を持っています。このアプローチにより、ユーザーは小さなプログラムを組み合わせて複雑なタスクを実行できます。
6. **シェル**
コマンドラインインターフェース（CLI）を提供し、ユーザーはシェルを通じてシステムと対話します。シェルスクリプトを使って、タスクの自動化やカスタマイズが可能です。

### UNIXの影響と派生OS

パソコン上で動作可能なUNIX系OSの代表を３つ挙げます。

1. **Linux**
オープンソースのUnix系OSであり、UNIXの設計哲学を継承しています。広く使用され、ディストリビューションとしてUbuntu、Fedora、Debianなどがあります。Linuxは、Linus Torvalds氏が趣味でUNIXに倣って作り始めたプログラムが元になっています。
2. **BSD系OS**
FreeBSD、OpenBSD、NetBSDなどがあり、Unixの直接の派生物として高い信頼性とセキュリティを提供します。BSD（Berkeley Software Distribution）は当時のUNIXをカリフォルニア大学バークレイ校が改良する形で始まったOSです。
3. **macOS**
AppleのデスクトップOSであり、BSD Unixを基盤としています。UNIXの安定性とパワフルなツールを提供しつつ、ユーザーフレンドリーなインターフェースを持っています。

# なぜLinuxを利用するといいのか？

1. **オープンソースと自由**
ソースコードが公開されており、誰でも自由に使用、改変、再配布が可能になっています。ユーザーは自分のニーズに合わせてシステムをカスタマイズできて便利です。
2. **セキュリティ**
ソースコードが公開されているため、多くの開発者がバグやセキュリティホールを検査・修正します。セキュリティパッチが迅速に提供されることが多いです。利用者が多いと修正してもらいやすいのでセキュリティが高まります。
3. **安定性と信頼性**
多くのサーバー、特にウェブサーバーはLinux上で動作しており、その信頼性と安定性が広く認識されています。多くの開発現場で利用されているということで、信頼できます。
4. **コスト**
無料で使用できるため、特に企業や個人にとってコスト削減が可能です。お金がかからないので、誰でも気兼ねなく利用できるます。
5. **コミュニティとサポート**
大規模なユーザーコミュニティが存在し、オンラインフォーラムやドキュメントが豊富です。商用サポートも提供されているディストリビューションもあります。

オープンソースであることがLinuxの利用者を増やし、Linuxの利用者の多さがLinux自体にあらゆる利点を生み出しているといえます。

# Linuxディストリビューションとは？

**Linuxディストリビューション**とは、Linuxカーネルに基いて、さまざまなソフトウェアやツールを組み合わせて作られたオペレーティングシステムのパッケージのことです。

一般にオペレーティングシステムの中心部分のことをカーネルと呼びます。先ほど述べたとおり、Linuxとは厳密に言えばカーネル部分のみのことを指します。

ただ、Linuxをオペレーティングシステムとして動作させるには、カーネル以外にもユーザーが使用するためのアプリケーション、ライブラリ、システム管理ツール、デスクトップ環境、パッケージ管理システムなどが必要です。そのため、カーネルだけでなく、必要なもの全てをパッケージ化したものを使用するのが一般的です。そのパッケージ化されたLinuxのことをLinuxディストリビューションと呼びます。

Linuxディストリビューション = Linuxカーネル + いろいろ（アプリケーション、ライブラリなど）

### Linuxディストリビューションをどのように利用するのか

**1. ディストリビューションの選択**
利用目的やスキルレベルに応じて、適切なディストリビューションを選びます。例えば、初心者にはUbuntu、サーバー用途にはCentOSやDebianなどがあります。

**2. インストール**
ディストリビューションの公式サイトからISOイメージをダウンロードし、USBドライブやDVDに書き込んでインストールメディアを作成します。インストールメディアをPCに挿入し、BIOS設定でブートデバイスを変更してインストールを開始します。多くのディストリビューションはGUIベースのインストーラーを提供しており、初心者でも簡単にインストールできます。

**3. 初期設定**
インストール後、初期設定を行います。ユーザーアカウントの作成、ネットワーク設定、パッケージの更新などを行います。

**4. パッケージ管理**
各ディストリビューションは独自のパッケージ管理システム（例：apt、yum、dnf、pacmanなど）を提供しており、ソフトウェアのインストール、更新、削除を簡単に行えます。
必要なソフトウェアをインストールし、システムのカスタマイズを行います。

**5. 日常的な利用**
デスクトップ環境を使って、日常的なタスクを行います。例えば、ウェブブラウジング、メールのチェック、文書作成、プログラミングなどです。
コマンドラインを使用して、システム管理やスクリプトの実行を行うこともできます。

# 代表的なLinuxディストリビューション４選
Linuxディストリビューションを4つ紹介します。
- Red Hat Enterprise Linux
- CentOS
- Debian
- Ubuntu

## Red Hat Enterprise Linux (RHEL)

### 特徴
- **商用サポート**：Red Hatによる公式サポートと保守が提供されており、企業向けに特化したOSです。
- **安定性**：企業のミッションクリティカルなシステム向けに設計されており、高い安定性と信頼性があります。
- **長期サポート**：長期間のサポートが提供され、システムのライフサイクル管理がしやすいです。
- **エンタープライズ向け機能**：仮想化、セキュリティ、コンテナサポート（OpenShift）など、多くのエンタープライズ機能が含まれています。

### 利用される場面

- **企業のサーバー**：ミッションクリティカルな業務アプリケーションやデータベースのホスティング。
- **大規模インフラ**：データセンターやクラウド環境での使用。
- **開発とテスト**：Red Hat製品や関連技術を使用する開発環境。

## CentOS

### 特徴
- **RHEL互換**：Red Hat Enterprise Linuxとほぼ同一の機能を持ち、同じソースコードからビルドされていますが、商用サポートはありません。
- **無料**：コミュニティベースで提供されており、無料で使用できます。
- **安定性**：RHELに基づいているため、高い安定性があります。

### 利用される場面
- **企業のサーバー**：RHELと同様の安定性を求めるが、コストを抑えたい場合。
- **ウェブホスティング**：多くのウェブホスティングサービスがCentOSを利用しています。
- **開発とテスト**：RHEL環境での本番運用を見据えた開発環境。

## Debian

### 特徴
- **安定性**：安定版（Stable）は非常に信頼性が高く、長期間のサポートが提供されます。
- **豊富なパッケージ**：豊富なソフトウェアパッケージが利用可能で、多くのアーキテクチャをサポートしています。
- **コミュニティ主導**：ボランティアベースのコミュニティによって開発されており、オープンソースの原則に厳密に従っています。

### 利用される場面
- **サーバー**：高い安定性が求められるサーバー運用。
- **デスクトップ**：自由度の高いデスクトップ環境を求めるユーザー。
- **開発**：オープンソースプロジェクトや教育目的での使用。

## Ubuntu
### 特徴
- **ユーザーフレンドリー**：初心者でも使いやすいインターフェースを提供しています。
- **定期リリース**：半年ごとに新しいバージョンがリリースされ、最新のソフトウェアが利用可能です。
- **LTS版**：長期サポート（LTS）版は5年間のサポートが提供され、安定性と最新機能を両立します。
- **広範なコミュニティ**：豊富なドキュメントとサポートが利用できます。

### 利用される場面
- **デスクトップ**：初心者から上級者まで、広範なユーザー層に適したデスクトップOS。
- **クラウド環境**：AWS、Azure、Google Cloudなど、多くのクラウドプロバイダーが公式にサポートしています。
- **サーバー**：ウェブサーバー、データベースサーバー、アプリケーションサーバーなど、多目的に利用可能。

***
各Linuxディストリビューションは、それぞれ特定の用途やユーザー層に最適化されています。
RHELは企業のミッションクリティカルな環境向けに、CentOSはコストを抑えつつRHEL互換を求める場合に、Debianは高い安定性と自由度を求めるユーザーに、Ubuntuはユーザーフレンドリーで広範なサポートを求めるユーザーに適しています。


# パッケージ管理ツールを使ってみよう

「パッケージ」とは、Linuxにソフトウェアを追加するために、そのソフトウェア本体に必要となる関連ライブラリや設定ファイルなどをまとめたものです。パッケージ同士の依存関係の情報も持っています。

**パッケージ形式**
パッケージ形式とは、ソフトウェアをインストール、アップデート、削除するために使用されるファイルフォーマットのことです。各Linuxディストリビューションは特定のパッケージ形式を採用しており、パッケージ管理ツールを通じてこれらのパッケージを操作します。


**パッケージ管理ツール**
パッケージ管理ツールとは、ソフトウェアのインストール、アップデート、削除を簡単に行うためのシステムです。各Linuxディストリビューションは、それぞれ異なるパッケージ管理ツールを採用しており、パッケージの形式や管理方法にも違いがあります。


あるディストリビューションを採用すれば、特定のパッケージ形式やパッケージ管理ツールを使用してソフトウェアのインストール、アップデート、削除を行うすることになります。

## Red Hat Enterprise Linux (RHEL) と CentOSの場合

### パッケージ形式

**RPM（Red Hat Package Manager）**
RHELとCentOSはRPM形式のパッケージを使用します。これらのパッケージは`.rpm`拡張子を持ちます。

### パッケージ管理ツール

**yum（Yellowdog Updater Modified）**
CentOS 7やRHEL 7以前で使用されているパッケージ管理ツール。以下は基本的なコマンドです。
- インストール：`sudo yum install <パッケージ名>`
- アップデート：`sudo yum update`
- 削除：`sudo yum remove <パッケージ名>`
- パッケージ検索：`yum search <パッケージ名>`
- リポジトリ情報：`yum repolist`

**dnf（Dandified Yum）**
CentOS 8以降、RHEL 8以降で使用されている次世代のパッケージ管理ツール。`yum`コマンドとほぼ同じ使い方ができますが、より高速で柔軟性があります。
- インストール：`sudo dnf install <パッケージ名>`
- アップデート：`sudo dnf update`
- 削除：`sudo dnf remove <パッケージ名>`
- パッケージ検索：`dnf search <パッケージ名>`
- リポジトリ情報：`dnf repolist`

## Debian と Ubuntuの場合
### パッケージ形式

**DEB（Debian Package）**
DebianとUbuntuはDEB形式のパッケージを使用します。これらのパッケージは`.deb`拡張子を持ちます。

### パッケージ管理ツール

**APT（Advanced Package Tool）**
DebianとUbuntuで最も一般的に使用されるパッケージ管理ツールです。APTは、`apt`、`apt-get`、`apt-cache`といったコマンド群から構成されており、以下はその基本的なコマンドです。
- インストール：`sudo apt install <パッケージ名>`
- アップデート：`sudo apt update`（リポジトリ情報の更新）、`sudo apt upgrade`（システム全体のアップグレード）
- 削除：`sudo apt remove <パッケージ名>`
- パッケージ検索：`apt search <パッケージ名>`
- クリーンアップ：`sudo apt autoremove`（不要なパッケージの自動削除）

**dpkg（Debian Package）**
APTの基盤となる低レベルのツールで、直接DEBパッケージの操作を行います。
- インストール：`sudo dpkg -i <パッケージ名>.deb`
- 削除：`sudo dpkg -r <パッケージ名>`
- インストール済みパッケージの一覧表示：`dpkg -l`

***
**早見表**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642333/ef405221-ceeb-8946-e03c-4eb22ac356e2.png)


# まとめ
- Linuxとは、オペレーションシステムの一つであり、UNIXというOSから派生した数あるOSの中の一つでもある。
- 「Linux」それ自体はカーネル部分を指すが、Linuxを動かすのに必要なものも含めたLinuxディストリビューションを「Linux」と言うのが一般的になっている。
- Linuxディストリビューションにはいくつか種類があり、それぞれに特徴がある。代表的なもの（Red Hat Enterprise Linux、CentOS、Debian、Ubuntu）
- Linuxディストリビューションには管理するツールである「パッケージ管理ツール」が必要である。各ディストリビューションごとに異なるパッケージ管理ツールが必要となる。