Linux — 世界中で育てる、無料の土台

概要 — まず全体をつかむ

初級ではLinuxを「無料で自由な、みんなで育てるOS」と捉えました。中級では、その中で 何がどう役割分担しているか(カーネル・プロセス・ファイル・権限・シェル)を見ます。

詳細 — 1段階ずつ追う

これは何をする係?

Linuxの世界は、大きく 2つの空間 に分かれています。

  • カーネル空間 — ハードウェアを直接管理する中心。CPU・メモリ・ディスクの割り当てはここが仕切る
  • ユーザー空間 — アプリやシェル ※1 が動く場所。ハードを使いたいときは、自分で触らず カーネルにお願い する

なぜ分けるのか。アプリが直接ハードを触れると、1つのアプリの暴走が全体を壊しかねません。カーネルという管理役を必ず通す ことで、安全と安定を守っているのです。

アニメーション『ユーザー空間とカーネル空間(境界の関所)』を開く
ユーザー空間とカーネル空間 — 境界の関所ユーザー空間(アプリの世界)アプリブラウザ・エディタ等シェルコマンドの窓口ライブラリ共通部品システムコール(お願いを通す関所)アプリの「これをやって」は、必ずここを通ってカーネルに届くカーネル空間(ハードウェアの管理役)プロセス管理誰を走らせるかメモリ管理机の割り当てファイルシステム保管の整理デバイスドライバ機器との通訳ハードウェア(CPU・メモリ・ディスク・ネットワーク機器)アプリは直接ハードを触れない。必ずカーネルにお願い(システムコール)して動かしてもらう

橋渡し役が シェル ※1。あなたが打ったコマンドを受け取り、カーネルへの依頼に変えて実行してくれる「対話の窓口」です。

登場人物メモ:

  • ※1 シェル — コマンドを受け付け、実行してくれる対話の窓口(bash など)
  • ※2 プロセス — 実行中のプログラム1つ分。メモリや権限をひとまとまりで持つ
  • ※3 ファイルシステム — データを木の形に整理してしまう仕組み
この部分をもっと深く(上級

ユーザー空間のアプリは、ハードを直接触れません。ファイルを開く・メモリを増やす・プロセスを作る——これらはすべて システムコール ※1 でカーネルに依頼します。

  • アプリが open() read() fork() のような 依頼 を出す
  • CPUが カーネルモード ※2 に切り替わり、カーネルが代わりに実行する
  • 結果を持って ユーザーモード に戻る

この切り替えには小さなコストがあります。だから、細かい依頼を連発するより まとめて頼む 方が速い、という設計判断が生まれます。境界を「必ず通す」ことが安全の要であり、同時に性能の勘所でもあるのです。

登場人物メモ:

  • ※1 システムコール — ユーザー空間からカーネルへ処理を依頼する境界の入口
  • ※2 ユーザーモード/カーネルモード — CPUの特権レベル。カーネルだけがハードを操作できる
  • ※3 root — すべての権限を持つ管理者。制限を受けない特別な存在
  • ※4 namespace/cgroups — 見える範囲を分ける仕組みと・資源の使用量を制限する仕組み
やさしく言うと(初級

Linuxは OSの一種 です。Windows や macOS と同じ「土台」の仲間ですが、大きな違いが2つあります。

  • 無料 — お金を払わずに使える
  • オープンソース ※1 — 中身(設計図)が公開され、世界中の人が共同で直し続けている

だから Linux は「誰か1社の持ち物」ではなく、世界中の人が一緒に育てている土台 といえます。ふだん目立ちませんが、Webサーバの多くや、スマホの Android の土台としても動いています。

登場人物メモ:

  • ※1 オープンソース — 中身が公開され、誰でも見て・直して・配ってよいソフトのこと
  • ※2 ディストリビューション — Linux本体に道具をひとまとめにした「配り方」の種類(Ubuntu など)

プロセスとファイルシステム

Linuxが動くとき、中では2つの考え方が働いています。

  1. プロセス ※2 — プログラムを起動すると「実行中の1つ分」=プロセスになる。それぞれが独立した箱を持ち、カーネルが順番に走らせる
  2. すべてをファイルとして扱う — Linuxは、書類だけでなく、機器(キーボードやディスク)まで「ファイル」として同じように扱う思想を持つ
  3. ディレクトリの木 — ファイルは根(ルート /)から枝分かれする 1本の木 に整理される。フォルダ(ディレクトリ)の中にフォルダ、という入れ子

「機器もファイル」という割り切りのおかげで、同じ道具(コマンド)で書類も機器も扱えます。これがLinuxの見通しのよさの正体です。

この部分をもっと深く(上級

Linuxのプロセス生成は、2段構えの発想が独特です。

  1. fork — 今のプロセスを まるごと複製 し、親子2つにする。中身は最初そっくり同じ
  2. exec — 子プロセスの中身を 別のプログラムに置き換える
  3. 親は子の終了を待ち受け、後始末をする

「複製してから中身を差し替える」。この単純な2部品の組み合わせだけで、シェルはあらゆるコマンドを起動できます。fork直後はメモリを実際にはコピーせず共有し、書き込む瞬間に初めて複製する(コピーオンライト)ので、複製は見た目ほど重くありません。

やさしく言うと(初級

パソコンは、絵やボタンをマウスで押す GUI で操作するのが普通です。Linux でもそれはできますが、Linux が得意とするのは CUI(コマンドで指示する操作)です。

  1. 黒い画面(ターミナル)に 文字で命令 を打つ
  2. Linux がその通りに動く
  3. ボタンを探さず キーワードでズバッと 指示できる

絵のボタンがなくても、文字だけで操作できる。だからボタンを表示するための飾りが要らず、軽く 動きます。この身軽さがサーバ向きです。

パーミッション — 誰が何をできるか

1本の木に全部を入れると、心配なのが「誰が触ってよいか」です。そこで各ファイルに パーミッション(許可)が付いています。

対象を3つに分けます。

  • 所有者 — そのファイルを持つ本人
  • グループ — 同じチームの人
  • その他 — それ以外の全員

そのそれぞれに、読む(r)・書く(w)・実行(x) の可否を決めます。-rwxr-xr-- のような文字列が、その一覧表です。

アニメーション『パーミッション(誰が何をできるか)』を開く
パーミッション — 誰が・何を・できるか-rwxr-xr-- → 数字にすると 754種別所有者グループその他-rwxr-xr--- はファイルd はフォルダ74 + 2 + 1読む・書く・実行 すべて可54 + 0 + 1読む・実行(書き込み不可)44 + 0 + 0読むだけr(読む)=4  w(書く)=2  x(実行)=13つを足すと、各ブロックが1ケタの数字になる

設計の勘所

  • 役割分担 — カーネルが管理・ユーザー空間が利用。境界を守るから安定する
  • 最小限だけ許す — パーミッションは「必要な人に必要な分だけ」。むやみに全許可しない
  • プロセスは隔離が基本 — それぞれ独立。1つが落ちても他へ波及しにくい
  • 文字で操作できる強み — コマンドは記録・再実行しやすく、自動化に向く
この部分をもっと深く(上級

パーミッションは文字だけでなく 数値 でも表します。r=4 w=2 x=1 を足すだけです。

  • 7 = 4+2+1(読む・書く・実行 すべて)
  • 5 = 4+0+1(読む・実行)
  • 755 = 所有者7・グループ5・その他5

root ※3 はこの制限をすべて飛び越えられる管理者です。強力ですが、間違えば全体を壊せます。だから普段はrootを使わず、必要な権限だけを持つ のが鉄則(最小権限)。

もう1つの思想が 標準入出力とパイプ です。各コマンドは「入口(標準入力)から受け取り・出口(標準出力)へ流す」よう作られ、|(パイプ)で 出口を次の入口へつなぐ。小さな道具を数珠つなぎにして大きな仕事をする——これがUNIX由来の設計哲学です。

やさしく言うと(初級

「Linuxをインストールする」とき、実際に入れるのは ディストリビューション ※2 という配り方の1つです。中身の土台(カーネル)は同じでも、付属の道具や見た目が違います。

  • Ubuntu — 初心者にやさしい定番
  • Debian — 堅実で安定重視
  • CentOS/Rocky — 企業のサーバでよく使われる系統

同じ材料でも、盛り付けが違うお弁当のようなもの。目的に合わせて選びます。

⚠️ うまくいかないとき

  • 権限エラー(Permission denied) — パーミッションが足りず、読めない・実行できない
  • 全許可のやりすぎ — 面倒だからと誰でも書き込み可にすると、改ざんの入り口になる
  • プロセスの暴走 — 1つのプロセスがメモリを食いつぶす。カーネルが監視・制限する
  • 木の迷子 — ディレクトリの深い階層で、今どこにいるか分からなくなる
この部分をもっと深く(上級
  • システムコール連発で遅い — 境界越えのコストが積もる。まとめて頼む工夫が要る
  • rootの乱用 — 何でもできる分、事故も全体に及ぶ。最小権限を徹底する
  • fork爆弾 — 自分を無限に複製し、資源を食いつぶす。cgroupsで上限を設ける
  • 隔離の穴 — namespaceの設定を誤ると、コンテナから外が見えてしまうことがある
やさしく言うと(初級
  • アプリがそのまま動かない — Windows用アプリは、そのままではLinuxで動かないことが多い
  • コマンドに慣れが要る — 最初はCUIに戸惑う。少しずつ覚えれば強力な道具になる
  • 種類が多くて迷う — ディストリビューションが多いので、まずは定番のUbuntuから始めると安心

理解度チェック

そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。

1. Linuxで「ハードウェアの管理役」と「アプリが動く場所」を正しく説明しているのは?

2. パーミッション -rwxr-xr-- のうち「その他(r--)」が意味するのは?

3. Linuxのシェル(bashなど)の役割として正しいのは?

4. Linuxの「すべてをファイルとして扱う」という思想の説明として正しいのは?

5. 「実行中のプログラム1つ分」で、メモリや権限をひとまとまりで持つものを何と呼ぶ?

6. Linuxのパーミッションで、許可の対象を分ける3つの区分はどれ?

7. コマンドを受け付けて実行してくれる対話の窓口(bashなど)を何と呼ぶか、カタカナで答えてください。

8. Linuxのディレクトリの木で、根(いちばん上)を表す記号1文字を答えてください。