サーバー基礎をわかりやすく解説。今回のテーマは「Linux」。サーバーには必要だけれど、コマンドが難しそうだし...RHEL、Ubuntuって何?と、どこからはじめれば良いのか迷ってしまいますよね。知りたかったアレコレを教えていただきます!

サーバーと言えばLinux、Linuxと言えばサーバーと言っても良いほど、サーバーと縁の深いOSであるLinux。
その一方で、WindowsやMacを勉強する人は少ないように、「Linuxを勉強しよう!」と思い立っても、なかなか手を付けづらいかもしれません。OSって何を勉強するのでしょうか。 今回は、Linuxについてのお話です。
代表的なサーバーOS
サーバー用のOSには、大きく分類してWindows系とUNIX(ユニックス)系の2つがあります。
Windows系は、Windows Serverのみです。Windows Serverとは、皆さんが使っているクライアント用のWindowsとは別に「サーバー用のWindows」というものがあるのです。元々WindowsNTと呼ばれていました。
UNIX系は、派生が多いです。Linuxは、UNIX系のOSであり、他にはBSD系、Solaris(ソラリス)系などがあります。UNIX系も、サーバーだけでなく、例えば、Ubuntuのようにデスクトップ版(クライアント用)が有名なOSも存在しています。
なんとなく、サーバー=UNIX、クライアント=Windowsというイメージがあるかもしれませんが、そうではなく、どちらの系統にもクライアント用とサーバー用があります。
(出典)『ゼロからわかるLinux サーバー超入門Ubuntu 対応版』p.24より
■Windows系とUNIX系、サーバーOSの特徴と違い
気になるのは、両者の違いでしょう。
ざっくりとした話ですが、大型の汎用機用に開発されたUNIXと、個人が使う目的で登場したWindowsという違いがあり、サーバー用のOSとしても両者の特徴の一つとなっています。
例えば、UNIX系のサーバーOSは、GUI(Graphical User Interface:グラフィカルな操作)をデフォルトで備えていないことがほとんどです。CLI(Command Line Interface)と呼ばれるいわゆる「黒い画面」で操作します。GUIを使う場合は、後からソフトウェアをインストールしなければなりません。これは人間が操作するよりも、ソフトウェアが自動で動いているタイプのサーバーでよく使われることから、GUIの必要性が低く、避けられる傾向にあるため、デフォルトにはしていないのでしょう。
一方、Windowsは、クライアント用のWindowsと同じように、サーバーでも、ドラッグ&ドロップで使えます。Windowsサーバーは社内のファイルサーバーなど、人間の操作を重視するような場面で活躍します。
GUIは便利なのだから、UNIX系でも入れてくれれば良いのにと、思うかもしれませんが、サーバーの基本は「最小限」です。個人のパソコンと違って、色々な人がアクセスするのが前提なので、負荷もかかりやすいですし、攻撃も受けやすいです。そのため、入れるソフトウェアや、動いているソフトウェアは最小限にして、負担や攻撃目標となる弱み(脆弱性=ぜいじゃくせい)を減らすものなのです。
Linuxのディストリビューション
Linuxは、UNIX系のOSですが、さらにいくつかの種類にわかれます。Linuxと一口に言っても、種類はさまざま。Red Hatや、SUSEのような有料のものもあれば、UbuntuやCentOSのような無料のものもあります。これらはどのように違うのでしょうか。
■LinuxOSとはどんなものか
まず、LinuxOSは、カーネルとツールやプログラムでできています。
カーネルとは、OSの中心的な機能であり、メモリやディスクの読み書き、プログラムの起動、通信など、を担う部分ですが、本当に基本的な機能しか備わっていません。そこに、外部の命令を実行するプログラムを付け加えることで、はじめてOSとして機能するようになります。
イメージとしては、エンジンやギアがあっても、ハンドルやシフトレバーのない車のようなものです。処理はできるのですが、何をして欲しいのかを伝えることができません。そこで、これらを伝えるためのパーツ(外部プログラム)がセットにして配布されているのです。
(出典)『ゼロからわかるLinux サーバー超入門Ubuntu 対応版』p.26より
■ディストリビューションとは
こうした外部プログラムは、複数あります。ひとつひとつインストールするのは大変です。そこで、Linux のカーネルが登場したときに、それぞれのコミュニティや会社が、カーネルと必要なものをまとめてインストールできるように配布しました。これがディストリビューションです。
ディストリビューションには、いくつかの系統があり、特に有名なのが、RedHat系とDebian系です。
RedHatは、有料でサポートが見込めるため、「お堅め」の現場に採用されることが多いです。
Debian系のLinuxにも、有料サポートのあるOSが存在しますが、昔からの人気なのか、日本ではRedHatが多いですね。
一方、Debian系では、Ubuntuが大きくシェアを伸ばしています。理由は、西洋での採用率が高いことと、DockerなどがUbuntuを推奨していることなどでしょうか。そのため、CI/CD*が導入されている現場などで採用率が高い印象があります。
こうしたOSは、どちらが良い悪いというものではなく、好みや、得意不得意で選ぶと良いでしょう。著者の知っている現場でも、プロジェクトによって使い分けています。
- Red Hat 系(レッドハット系) Red Hat 社が有償販売しているディストリビューションRed Hat Enterprise Linux(RHEL)を中心とした系列。サポートや、RH社によるレクチャーがあるため、堅実さを求める現場で人気がある。互換OS として、無料で導入できる「AlmaLinux(アルマリナックス)」や「Rocky Linux(ロッキーリナックス)」が存在する。 以前は、RHEL互換のCentOSが人気だったが、現在はCentOS Stream というRHEL を先取りする方針になってからは、AlmaやRockyに注目が集まっている。
- Debian 系(デビアン系) Debian というコミニュティでまとめられたディストリビューションを中心とした系列。Debian とUbuntu(ウブントゥ)が有名。Ubuntuは、Dockerなどで使用が推奨されており、年々シェアが伸びている。無料で使用できるが、Ubuntuの開発の中心となっているカノニカル社による有償のサポートも受けられる。
*継続的インティグレーション/継続的デリバリー。CI/CD は、アプリケーション開発の各ステージを常に自動でテストし、頻繁に本番環境に適用できるようにする開発手法のこと。
■Red Hat系とDebian系の違いとは
ただ、Red Hat系とDebian系とで、違う点もあるので注意が必要です。
よく言われるのが、「yum」と「apt」というパッケージ管理コマンド*の違いですが、こうした「覚えてしまえば終わり」の差異は、大したことではありません。それよりも、OSによって文化が違うように思います。
RedHatでは、管理者の権限が強く、一人の強力な管理者が管理する思想であるのに対し、Ubuntuの場合は、チームで管理するのが前提で、管理者の権限はそこまで強くない思想のように感じます。これは、あくまで個人の印象での話ですが、周囲に聞いても似たような感想を聞くので、少なくとも「文化に違いがある」という点は合っているのでしょう。
皆さんも、Linuxと深く付き合いはじめたら、こうしたことを考えてみると楽しいですよ。
*Linuxでは、ソフトウェアをインストールしたり、アップデートしたりするのに、コマンドを使う。そのときに使われるのが、RH系は「yum」、Debian系は「apt」である。
Linuxは、勉強すべき?
定期的に、SNSなどで話題になるのが、「Linuxは勉強すべきか」という問題です。
具体的には、駆け出しエンジニアの方がLinuxを知らないのにDockerやAWSを勉強していて壁に当たったり、社内の若手エンジニアの技術力を上げるために何を勉強させるか?と言ったりしたような文脈で上がりやすいトピックです。
勉強する内容としては、Linuxの仕組みや、操作のコマンド、セキュリティなどが学ぶ対象です。
サーバーとして使われることが多いので、複数のサーバーをどのように設計し、運用するかということも知らなければなりません。また、操作はアイコンをクリックするのではなく、コマンドで命令するので、命令方法を学びます。例えば、Windowsであれば、クリックで行うようなフォルダを開く操作も、CLIの場合は、コマンドで「○○ファイルを開く」と打つので、コマンドの種類も多いのです。
勉強すべきかどうかという問題ですが、これは「何を身につけたいかによる」としか言いようがありません。
例えば、インフラエンジニアになりたいのであれば、当然必須ですし、Linuxだけでなく、他のOSも勉強すべきです。コマンドも打てるようになりましょう。
一方で、プログラマーや、デザイナーであれば、自分の使う技術から近い範囲を知れば充分でしょう。DockerやAWSを操作できる程度の知識しか必要ないのであれば、そこを中心で良いと思います。特に、マネージャーやSEなど、管理や設計をしたり、営業をする役職であれば、コマンドよりも仕組みや、セキュリティについて学ぶと良いでしょう。
また、「コマンドを打てるように」と書きましたが、実は最近ではGUIで操作することも多いです。ですが、GUIならミスをしないというものではないので、それはそれでGUIの作業手順を身につける必要があります。
大学受験でも、理学部へ行きたい人は、理科や数学を重点的に勉強しますし、文学部へ行きたい人は国語や日本史が必須です。エンジニアでも同じことで、○○が大事だからやるべき!ではなく、自分の仕事にどのように必要で、どのような技術を身につけるべきなのか、という視点で考えてみてください。
サーバー用のOSには、Windows系とUNIX系があります。また、UNIX系もいくつかにわかれ、そのうちの一つがLinuxです。
Linuxにはディストリビューションがあり、それぞれ特徴があります。
自分の身につけたいスキルをよく考えて、学ぶと良いでしょう。
次回は、最近のAWSとDockerとの付き合い方について解説します。お楽しみに!
▼これまでの「ゆるく学ぶサーバー入門~イマイチわかりづらいサーバーの基礎を解説」