派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

ゆるく学ぶサーバー入門~イマイチわかりづらいサーバーの基礎を解説:Linuxはどのくらい勉強すればいいの?

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

【筆者】小笠原種高さん(ニャゴロウ先生)
技術ライター、イラストレーター。システム開発のかたわら、雑誌や書籍などで、データベースやサーバー、マネジメントについて執筆。図を多く用いた易しい解説に定評がある。主な著書に『なぜ?がわかるデータベース』(翔泳社)、『これからはじめる MySQL入門』『図解即戦力 Amazon Web Serviceのしくみと技術がこれ1冊でしっかりわかる教科書』、最新刊には『ゼロからわかるLinuxサーバー超入門 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は、どちらが良い悪いというものではなく、好みや、得意不得意で選ぶと良いでしょう。著者の知っている現場でも、プロジェクトによって使い分けています。

代表的なディストリビューション
    1. Red Hat 系(レッドハット系)
    2. Red Hat 社が有償販売しているディストリビューションRed Hat Enterprise Linux(RHEL)を中心とした系列。サポートや、RH社によるレクチャーがあるため、堅実さを求める現場で人気がある。互換OS として、無料で導入できる「AlmaLinux(アルマリナックス)」や「Rocky Linux(ロッキーリナックス)」が存在する。 以前は、RHEL互換のCentOSが人気だったが、現在はCentOS Stream というRHEL を先取りする方針になってからは、AlmaやRockyに注目が集まっている。
    3. Debian 系(デビアン系)
    4. 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との付き合い方について解説します。お楽しみに!

▼これまでの「ゆるく学ぶサーバー入門~イマイチわかりづらいサーバーの基礎を解説」

サーバーとは何者なのか