📚 連載:Ansibleが理解できない理由はLinuxにあった
Linuxの仕組みからAnsibleを理解するシリーズです。
0️⃣ Ansibleの仕組み
1️⃣ Linuxの構造(Kernel / Shell / Filesystem)
2️⃣ command not foundの原因:PATH
3️⃣ SSH接続できない理由:鍵認証とポート
4️⃣ Permission deniedの原因:ユーザーと権限
5️⃣ サービスが起動しない理由:systemd
6️⃣ cronが動かない理由:PATH問題
7️⃣ ディスク満杯になる理由
8️⃣ サーバーが遅くなる理由
📚 このシリーズ全体のまとめはこちら
→ 👉 Ansibleが理解できない理由はLinuxにあった【OS編】まとめ
この記事はシリーズの一部です。
📚 前の記事
→ 👉第0回:【なぜAnsibleは理解できないのか】仕組みを分解してみる
📚 次の記事
→ 👉第2回:【Ansibleでハマる】command not foundの原因はPATHだった(環境変数の正体)
📚 💡 初めての方はこちらから
→ 👉第0回:【なぜAnsibleは理解できないのか】仕組みを分解してみる
📚 💡 エラーからすぐに原因を調べたい方は「逆引き辞典(エラー一覧)」も用意しています。
→ 👉:Ansibleが理解できない理由はLinuxにあった :【保存版】Ansibleトラブル逆引き辞典|エラー別の原因と解決フローまとめ
シリーズ全体構造(学習 × 問題解決)
👉 本シリーズは
「理解(各記事)」と「問題解決(逆引き辞典)」を行き来しながら
スキルを身につける構成になっています。
👉 この図は、どこから学び、どこに進めばよいかを示した“ロードマップ”です。
📍 現在の位置
👉 現在はこの図の「OS編 第1回」になります
「Ansibleのエラーが全く理解できない…」
- command not found
- Permission denied
- サービス起動失敗
これらのエラーはすべてバラバラに見えます。
しかし実は
すべて同じ原因
です。
それが
Linuxの構造を理解していない
という問題です。
インフラエンジニアとしてLinuxを触り始めると、次のような疑問にぶつかります。
- Linuxって結局何をしているOSなのか?
- なぜコマンドを打つと処理が実行されるのか?
- サービスやプロセスはどうやって動いているのか?
そしてAnsibleを使うようになると、さらに疑問が増えます。
- なぜAnsibleでサーバー操作ができるのか?
- なぜSSH経由でLinuxを操作できるのか?
- なぜAnsibleエラーの原因がLinuxにあることが多いのか?
その答えはシンプルです。
AnsibleはLinux操作を自動化しているだけだからです。
「第0回:【なぜAnsibleは理解できないのか】仕組みを分解してみる」 で説明した通り、Ansibleの仕組みは次の構造になっています。
Ansible → SSH → Shell → Linux
つまり、Ansibleを理解するためにはLinuxの仕組みを理解する必要があります。
しかしLinuxを学び始めると、多くの人が「知識がバラバラで、全体像が分からない」という問題にぶつかります。
そこでこの記事ではまず、Linuxを次の4つの要素で整理します。
- Kernel
- Shell
- Filesystem
- Process
この4つを理解すると、Linuxの全体像(OSの地図) が見えてきます。
前回の振り返り(第0回)
前回の記事では、Ansibleの仕組みについて解説しました。
Ansibleは魔法のツールではなく、次の構造で動いています。
Ansible
↓
SSH
↓
Shell
↓
Linux
つまり、Ansibleは Linux操作を自動化するツールです。
そのため、Ansibleを理解するためには
Linuxの仕組みを理解することが重要になります。
今回の記事では、その土台となる Linuxの基本構造 を解説します。
📋 目次
- Linuxとは何か
- Linuxの4つの基本構造
- Kernel(カーネル)
- Shell(シェル)
- Filesystem(ファイルシステム)
- AnsibleとLinux構造の関係
- Process(プロセス)
- なぜこの構造がAnsible理解につながるのか
- 実務でよくあるミス3選(Linux構造編)
- まとめ
- 次回予告
- 連載一覧:Ansibleが理解できない理由はLinuxにあった
1. Linuxとは何か
Linuxは一言で言うと 「コンピュータの資源を管理するOS(Operating System)」 です。
コンピュータには次のような資源があります。
- CPU
- メモリ
- ディスク
- ネットワーク
これらを管理しているのが OS(Linux) です。
例えば「nginxを起動する」という操作の裏側では、Linuxが次のような処理をしています。
プロセスを生成 → メモリを割り当て → CPUを使って実行 → ネットワークポートを開く
つまりLinuxは、コンピュータ資源を管理しながらプログラムを動かす仕組みなのです。
2. Linuxの4つの基本構造
Linuxは非常に多機能なOSですが、基本構造は次の4つで整理できます。
| 要素 | 役割 |
|---|---|
| Kernel | ハードウェアを管理する |
| Shell | ユーザーの命令を受け取る |
| Filesystem | データを管理する |
| Process | 実行中のプログラム |
この4つを理解すると、Linuxのほとんどの動作を説明できます。
👉 この4つを理解するとLinuxの全体像が見えます
※以降では、それぞれの要素がどのように動いているかをもう少し具体的に見ていきます。
3. Kernel(カーネル)
Kernel(カーネル)はLinuxの中心であり、役割は 「ハードウェアを管理すること」 です。
ただし、それだけではありません。
- CPUスケジューリング
- メモリ管理
- ファイル操作
- ネットワーク通信
などを担い、
👉 Linuxのすべての機能の基盤を提供する存在です。
👉 ユーザープログラムは直接ハードウェアを操作できない
👉 必ずKernelを経由して処理が行われる
例えば touch file.txt の場合:
- Shellがユーザーの入力を解釈する。
- touchコマンド(プロセス) が新たに起動する。
- プロセスがKernelに 「システムコール」 で書き込みを依頼する(ユーザープログラムは直接ハードウェアに触れないため)。
- Kernelが依頼を受け取り、実際の ハードウェア(ディスク) へデータを書き込む。
ユーザー(Ansible)
↓
Shell(コマンド解釈)
↓
プロセス(ls や touch など)
↓
[ システムコール(依頼) ] ← ここが最重要!
↓
Kernel(特権的な管理・処理)
↓
ハードウェア(ディスク・メモリ)
4. Shell(シェル)
Shellは 「ユーザーとLinuxをつなぐインターフェース」 です。
コマンドを解釈し、実行のための処理を行います。
👉 コマンドを解釈し、プロセスとして実行する司令塔の役割
[!IMPORTANT]
ココが重要!
シェル自体がすべての命令を処理しているわけではありません。シェルはあくまで 「別のプログラムを起動する司令塔」 です。
※実際にはシェルは fork(自分をコピーして分身を作る)/ exec(分身が別のプログラムに着替える) という仕組みを用いてプロセスを生成します。
例えば ls(外部コマンド)の場合:
- Shellがユーザーの「ls」という入力を解釈する。
- Shellが新しいプロセスを生成する(fork/exec)。
- lsプロセスが誕生し、実行される。
- Kernelがそのプロセスの実行を管理する。
Shell = 実行する本体ではない
↓
プロセスを「起動」し、橋渡しをする司令塔
一方で cd のような「内部コマンド」もあります
すべてのコマンドが新しいプロセスを作るわけではありません。
例えば、シェルの設定を変更したり、作業ディレクトリを移動する cd などの命令は、内部コマンド(ビルトイン) と呼ばれます。
これらはシェル自身が直接処理するため、新しいプロセスを作らずにその場で実行されるのが特徴です。
5. Filesystem(ファイルシステム)
Linuxでは 「すべてがファイルとして扱われる」 という特徴があります。
- 設定ファイル
-
/dev(デバイス) -
/proc(プロセス情報)
インフラ運用では設定ファイル(例:/etc/nginx/nginx.conf)を頻繁に操作します。
Ansibleでも copy, template, lineinfile などの主要なモジュールはファイルを操作するためのものです。
つまり、Ansibleの多くの処理はファイル操作と言い換えることができます。
6. AnsibleとLinux構造の関係
ここで重要なポイントです。
Ansibleの構造を思い出してください。
Ansible
↓
SSH
↓
Shell
↓
Linux
つまり
Shell = Linux操作の入口
です。
そしてLinux内部では
ユーザー操作
↓
Shell
↓
プロセス
↓
Kernel
↓
ハードウェア
という流れで処理されます。
👉 Ansibleのエラーは、このどこかで発生しています
※すべての処理がShell経由とは限りませんが、
多くのトラブルはこの経路上で発生します。
7. Process(プロセス)
Linuxは 「プロセスを管理するOS」 です。
プロセスとは、実行中のプログラムのことです。
例えば
- nginx(Webサーバー)
- sshd(SSH接続)
- cron(定期実行)
などはすべてプロセスとして動作しています。
ここで重要なポイントです。
👉 コマンド実行もプロセスとして動いている
例えば ls を実行すると、
- Shellがコマンドを解釈
- 新しいプロセス(ls)が生成される
- Kernelがそのプロセスを実行・管理する
つまり
コマンド実行
↓
プロセス生成
↓
Kernelが管理
という流れになります。
Kernelはプロセスに対して
-
CPUの割り当て(スケジューリング)
-
メモリの割り当て
-
実行の切り替え
などを行っています。
👉 複数のプロセスを同時に動かしているように見えるのは、この仕組みのおかげです
サーバー運用の多くは
-
起動
-
停止
-
監視
といったプロセス管理です。
Ansibleでも
-
service / systemd
-
プロセス監視
-
再起動
などを頻繁に行います。
👉インフラ運用 = プロセス管理
とも言えます。
👉Ansibleもプロセスを操作していると考えると理解しやすくなります。
※プロセスは親子関係(親プロセス・子プロセス)を持つことも特徴です。
8. なぜこの構造がAnsible理解につながるのか
ここまでの内容をまとめると、構造は次のようになります。
ユーザー / Ansible
↓
SSH
↓
Shell
↓
プロセス
↓
Kernel
↓
ハードウェア / 資源
👉すべての処理はこの流れで実行されています
ここで重要なのは
エラー
↓
どの層で起きているか
を考えることです。
例えば
-
command not found → Shell / 環境の問題
-
Permission denied → Kernel / 権限の問題
-
SSH接続失敗 → ネットワーク / SSHの問題
👉エラーはバラバラに見えても、すべてこの構造のどこかで発生しています
AnsibleはLinux操作を自動化しているだけです。
つまり
👉この構造を理解することが、そのままAnsible理解につながるのです。
9. 実務でよくあるミス3選(Linux構造編)
❌ ミス①:コマンドで覚える
とりあえずコマンド暗記
この状態だと
応用が効かない
👉 例えば
-
ls がなぜ動くのか
-
systemctl が何をしているのか
を理解していないと、
環境が変わると使えない
という状態になります。
❌ ミス②:エラーを個別に覚える
- Permission denied
- command not found
を別物として扱うと
理解がバラバラになる
👉 実際にはこれらは
Shell / Kernel / 環境(PATH・権限)
といった 異なるレイヤーの問題 です。
例えば
-
command not found → Shellの解決(PATH問題)
-
Permission denied → Kernelの権限制御
-
実行されない → プロセス生成や実行環境の問題
👉「どの層の問題か」で整理することが重要です
❌ ミス③:Ansibleの問題だと思う
Ansibleが悪い
と考えがちですが
Linuxの構造の問題
であることがほとんどです。
Ansibleは内部で
SSH → Shell → プロセス実行 → Kernel処理
という流れで動いています。
👉 つまり
Ansibleのエラー
↓
どの層で起きているか?
を考える必要があります。
✅ 正しい考え方
エラー
↓
どの層で起きているか考える
👉 「構造で考える」が最重要です
👉 エラーからすぐに原因を調べたい方は
「逆引き辞典(エラー一覧)」も用意しています。
10. まとめ
Linuxは次のような構造で動いています。
ユーザー操作 / Ansible
↓
Shell(コマンド解釈・プロセス起動)
↓
Process(プログラム実行)
↓
Kernel(資源管理・システムコール)
↓
ハードウェア(CPU / メモリ / ディスク)
それぞれの役割を整理すると次の通りです。
| 要素 | 役割 |
|---|---|
| Kernel | CPU・メモリ・ファイル・ネットワークなどの資源管理とシステムコールの提供 |
| Shell | コマンド解釈・プロセス生成(外部コマンド)・内部コマンドの実行 |
| Filesystem | データや設定の保存・管理(「すべてはファイル」) |
| Process | 実行中のプログラムの単位(Kernelから資源を割り当てられる対象) |
そしてAnsibleは、この流れの上で動いています。
Ansible
↓
SSH
↓
Shell
↓
Process
↓
Kernel
↓
ハードウェア
👉 Ansibleのエラーは、このどこかの層で発生しています
エラー
↓
どの層で起きているかを考える
(Shell / Process / Kernel / 環境)
👉 「構造で理解すること」が、トラブル解決の最短ルートです
Linuxを理解することが、インフラ自動化(Ansible)の基礎になります。
📚 シリーズを順番に読む
このシリーズでは Linuxの仕組みからAnsibleを理解する ことを目的にしています。
| 回 | 内容 |
|---|---|
| 第0回 | Ansibleの仕組み |
| 第1回 | Linuxの構造(Kernel / Shell / Filesystem) |
| 第2回 | command not foundの原因:PATH |
| 第3回 | SSH |
| 第4回 | Permission deniedの原因 |
| 第5回 | systemd |
| 第6回 | cron |
| 第7回 | ディスク容量 |
| 第8回 | サーバーが遅い原因 |
11. 次回予告
次回はLinux運用で必ず遭遇するエラー 「command not found」 を解説します。
このエラーの原因は、PATH と 環境変数 にあります。
実はこの問題は Ansible実行時にもよく発生するエラーです。
Ansibleの command や shell モジュールは、リモートサーバーのShell環境でコマンドを実行するため、PATHや環境変数を理解していないとエラーの原因が分からなくなります。
次回は次のポイントを解説します。
- PATHとは何か
- 環境変数とは何か
- なぜ
command not foundが起きるのか - なぜAnsibleでも同じ問題が起きるのか
| 要素 | 役割 |
|---|---|
| Kernel | CPU・メモリ・ファイル・ネットワークなどの資源管理とシステムコールの提供 |
| Shell | コマンド解釈・プロセス生成(外部コマンド)・内部コマンドの実行 |
| Filesystem | データや設定の保存・管理(「すべてはファイル」) |
| Process | 実行中のプログラム(Shellから生成されKernelにより実行される) |
そしてAnsibleは、この流れの上で動いています。
Ansible
↓
SSH
↓
Shell
↓
Process
↓
Kernel
↓
ハードウェア
👉Ansibleのエラーは、このどこかの層で発生しています
エラー
↓
どの層で起きているかを考える
(Shell / Process / Kernel / 環境)
👉「構造で理解すること」が、トラブル解決の最短ルートです
Linuxを理解することが、インフラ自動化(Ansible)の基礎になります。
この記事はシリーズの一部です。
📚 前の記事
→ 👉第0回:【なぜAnsibleは理解できないのか】仕組みを分解してみる
📚 次の記事
→ 👉第2回:【Ansibleでハマる】command not foundの原因はPATHだった(環境変数の正体
📚 💡 初めての方はこちらから
→ 👉第0回:【なぜAnsibleは理解できないのか】仕組みを分解してみる
📚 💡 エラー対応をすぐに確認したい方は逆引き辞典も活用してみてください
→ 👉:Ansibleが理解できない理由はLinuxにあった :【保存版】Ansibleトラブル逆引き辞典|エラー別の原因と解決フローまとめ
📚 このシリーズ全体のまとめはこちら
→ 👉 Ansibleが理解できない理由はLinuxにあった【OS編】まとめ
12. 連載一覧:Ansibleが理解できない理由はLinuxにあった
| 回数とタイトル | 内容(概要) |
|---|---|
| Ansibleが理解できない理由はLinuxにあった【OS編】:【保存版】Ansibleトラブル逆引き辞典(Linux / SSH / Shellエラー対応 | Ansibleで発生するエラー(UNREACHABLE / Permission denied / command not found など)を「エラーから逆引き」で調べられる実務向け記事。各回の内容と対応しており、トラブル時の入口として使える。 |
| 第0回:【なぜAnsibleは理解できないのか】仕組みを分解してみる | Ansibleは魔法のツールではなく「Linux操作の自動化」。Ansible → SSH → Shell → Linux の構造を理解し、シリーズ全体の土台を作る。 |
| 第1回:【なぜLinuxが分からないと詰むのか】Kernel / Shell / Filesystemの全体像 | Linuxの基本構造を理解することで、Ansibleが内部で何をしているのか(Shell実行・プロセス・ファイル操作)を把握できるようになる。 |
| 第2回:【Ansibleでハマる】command not foundの原因はPATHだった(環境変数の正体) | Ansible実行時に発生する「command not found」の原因はPATHにある。環境変数の仕組みを理解しないとエラーを解決できない。 |
| 第3回:AnsibleのSSH接続が失敗すると UNREACHABLE エラーになる。(Connection refused / Permission denied / Timeout など) | AnsibleのSSH接続が失敗すると UNREACHABLE エラーになる。SSH(鍵認証・ポート・Firewall)を理解することで原因を特定できる。 |
| 第4回:【Permission deniedの正体】Linuxユーザーと権限の仕組み | Ansibleのbecome(sudo)で発生する Permission denied の原因はLinux権限にある。ユーザー・グループ・権限の仕組みを理解する。 |
| 第5回:【サービスが起動しない理由】systemdの仕組みを理解する | Ansibleのservice / systemdタスクが失敗する原因はLinux側にある。systemdの仕組みを理解することで原因を特定できる。 |
| 第6回:【cronが動かない理由】手動では動くのに失敗する原因 | Ansibleで設定したcronが動かない原因は環境差分(PATHなど)にある。cron特有の実行環境を理解することで解決できる。 |
| 第7回:【No space left on device】ディスク容量不足の原因と調査方法(df / du / log) | Ansible実行時のディスク不足エラーはLinuxのログ肥大化や容量管理が原因。df / duを使った調査方法を解説する。 |
| 第8回:【サーバーが遅い】原因の見つけ方(CPU / メモリ / プロセス) | Ansible実行が遅い・失敗する原因はサーバー負荷の可能性がある。CPU・メモリ・プロセスの見方を理解して原因を特定する。 |

