【徹底対策】LPIC全6冠制覇への道

目次

はじめに

LPICはLinux Professional Institute Certificationの略称で,LPIと呼ばれる非営利団体が主催しているLinuxのグローバルスタンダードな認定試験です。Linuxはオープンソースであるという特性から特定のベンダーが恣意的な認定資格を作ってしまうフォースが働いてしまいますが,LPICはあくまでも中立的な立場を貫いているためLinuxに関する公平公正な知識・技能を評価することができます。

Linuxの認定試験としてはLinuCも有名であり,LinuC公式ページではLPICとの関係性を「LinuCはクラウド時代の即戦力であることを証明できる認定資格として新しく生まれ変わりました」と説明しています。LPICの主催団体はLPI,LPICの主催団体はLPI日本支部という違いがあり,評価できる知識・技能には多少の差はあるものの大きな違いは現時点ではないため,グローバルスタンダードなLPICが今でも選ばれ続けている印象があります。

本稿の信憑性について

筆者のLPIC受験履歴

筆者はLPICを全冠しています。1.5ヶ月程度で取得できているため,実績および効率性の観点から本稿の内容もそれなりに信憑性の高いものになっているはずです。Web上ではLPIC全冠について発信されている記事が1つも見当たらないだけでなく,LPIC-3 305とLPIC-3 306の合格体験記さえ1つも見当たらなかったため,本稿がLinuxをLPICベースで学習したいと志す方の参考になれば幸いです。

「合格」の数が8つであるのにLPICの全冠が「6冠」であるのは,後述の通りLPIC-1とLPIC-2は2つの試験に合格して初めて認定される資格だからです。

筆者がLinuxに触り始めたのは2020年の研究室時代からで,当時はLinuxについて本当に何も分かっていませんでした。情報系の大学院に所属していたためLinuxサーバ上で作業する機会はそれなりにあったのですが,あくまでもLinuxは研究を行うための手段と割り切り,必要最低限のコマンドを「暗記」するだけでした。2022年頃から実務でLinuxを触れるようになりましたが,クラウドをベースとして構築したインフラ上で求められるLinuxの知識は限定的なもので,研究室時代に「暗記」したコマンドを流用すれば業務は回りました。

この頃にクラウドの必要性を痛感した筆者はAWSを全冠しました。

2023年頭から徐々にリーダー業やマネジメント業を任せてもらえるようになりました。技術各論の解像度が低いリーダーは意思決定のスピードが遅くなってしまうと考え,以下を目指すことにしました。

  • ネットワークスペシャリスト取得(ロードマップはこちら
  • Java Gold取得(ロードマップはこちら
  • CCNA取得(ロードマップはこちら
  • LPIC全冠(ロードマップは本稿)
これ以降の想定ロードマップ
  • DBまわり(ORACLE MASTER GoldとDBスペシャリスト)
  • Gitまわり
  • エンジニア名著100本ノック

どうせLPIC全冠を目指すならギアを上げて短期集中型で取ってしまおうと腹を括り,平日は平均5時間ほど,休日は平均14時間ほどLPICの勉強をしていました。結果として1.5ヶ月程度でLPICを全冠することができました。

最も苦労したのがLPIC-3 305とLPIC-3 306です。これらの試験は2022年にLPIC-3 304から分割されてできたものです。市場におけるコンテナ技術に対する必要性の高まりからコンテナ仮想化に関する内容を重視したいというLPIの思惑があったそうで,旧バージョンのLPIC-3 304にコンテナ仮想化をまるっと入れてしまうと範囲が膨大になってしまうため2つの試験に分割したとのことです。詳しくは公式Youtubeの「今秋登場 LPIC-3 version 3.0でここが変わった」で説明されています。

上述の通り筆者は情報系の大学院出身なのですが,Linuxの「理解」に関してはほぼゼロからのスタートでした。「Linuxはファイルシステムである」と言われても何を言っているのか分からないレベルです。それゆえ,読者のみなさまにとっても十分再現性のある情報を提供できると考えております。

試験の概要

LPICの概要を以下で説明します。

位置付け

LPIC認定資格には以下の種類があります。

  • Essentials
  • Linux Professional
  • Open Technology

LPICはこのうち「Linux Professional」に該当し,Linuxシステム管理者の知識と技能を評価するために設計されています。LPICにはさらに以下の種類があります。

  • LPIC-1 Exam 101
  • LPIC-1 Exam 102
  • LPIC-2 Exam 201
  • LPIC-2 Exam 202
  • LPIC-3 Exam 300
  • LPIC-3 Exam 303
  • LPIC-3 Exam 305
  • LPIC-3 Exam 306

LPICでは上位レベルの認定には下位レベルの認定が必須条件となっています。すなわち,LPIC-1の受験には何の要件もなく,LPIC-2の受験にはLPIC-1の合格が必須で,LPIC-3の受験にはLPIC-2の合格が必須となっています。LPIC-1は101と102の両方に合格すると認定され,LPIC-2も同じく101と102の両方に合格すると認定されます。一方,LPIC-3はいずれか1つだけに合格することで該当資格の認定を受けることができます。

試験範囲

進化する技術に対応するため,LPICの試験科目は平均3年ごとに更新されます。現行バージョンで出題される試験範囲は必ずおさえておきましょう。公式Youtubeでも名言されていますが,試験範囲の「総重量」を足し合わせると60になりますので,「総重量」は各分野で出題される問題数そのものを表します。「総重量」の大きい分野から順に勉強するとよいでしょう。試験範囲はLPIの公式ページから確認できます。

科目・合格基準・時間・形式・料金

項目内容
時間90分
問題数60問
形式多肢選択式および穴埋め式
合格基準公表なし(推定65%)
料金公式サイトの「国別コスト」参照
形式CBT
有効期限再受験またはより高いレベルに合格しない限り5年間

詳細

筆者がLPIC全冠を目指す上で,それぞれの試験に対してどのような勉強方法や対策を行ってきたかについては他の記事で解説しています。そこで,本稿では全体を俯瞰した上で,それぞれの対策ページでは書き切れなかった内容を中心にまとめていきたいと思います。

二種類の勉強方法

一般に,勉強方法にはボトムアップ式とトップダウン式の二種類があります。ボトムアップ式では,教科書や参考書を用いて基礎を固めながら着実に知識をつけていく積み上げ式の学習を行います。トップダウン式では,目的を達成するために必要となる知識を把握することで必要最低限の学習を行います。

筆者のLPIC取得のモチベーションはLinux力の底上げでしたので,最初はボトムアップ式の勉強方法を行っていました。具体的には,Linuxの定番書籍やYoutube・Udemyの講義動画を用いてLinuxの基礎からみっちり積み上げていき,LPIC試験を爆速で走り抜ける基盤を整えました。実際に用いた書籍とUdemyの講義を紹介します。

ボトムアップ式の学習で用いた書籍

SBクリエイティブ
¥2,970 (2025/03/27 13:05時点 | Amazon調べ)
\最大9.5%ポイントアップ!/
Amazon
オーム社
¥3,080 (2025/03/29 15:12時点 | Amazon調べ)
\最大9.5%ポイントアップ!/
Amazon
技術評論社
¥3,450 (2025/03/30 09:28時点 | Amazon調べ)
\最大9.5%ポイントアップ!/
Amazon

レベル感としては「新しいLinuxの教科書 <<< 入門 モダンLinux ≒ 試して理解 Linuxのしくみ」となっています。Linuxの初学者としては最初の「新しいLinuxの教科書」を斜め読みするだけで十分でしょう。「入門 モダンLinux」は「新しいLinuxの教科書」よりもさらに奥に踏み込んでいて,下手をするとLPICの試験内容よりも高度な内容となっています。最初の段階で全てを理解しようとするのは不可能ですので,まずは斜め読みをして概要を掴む程度で全く構いません。「試して理解 Linuxのしくみ」もLPICの内容を見据えるとオーバーキルな内容を含みますが,イラストを豊富に用いた分かりやすい良書です。Linux関連でここまで深くまで踏み込んだ上でキャッチーな図解を交えて解説されている書籍は本書以外に見たことがありません。

ボトムアップ式の学習で用いたUdemy講義

これら以外にもLinuxの講座はありますが,筆者がUdemy Businessを利用して全ての動画を確認したところ上記の講座がおすすめできるものになっています。正直なところ,あずき本とスピードマスターの方が質の高い学習ができると思います。


ボトムアップ式の勉強でLPICを走り抜ける基盤が整った後は,トップダウン式の勉強でLPIC試験に知識をチューニングしていきます。このトップダウン式の勉強は以下の2つの方針に分けられます。

  1. 対策書籍やデジタルコンテンツが発売されている場合:対策書籍の内容を完璧にする
  2. 対策書籍やデジタルコンテンツが発売されていない場合:試験範囲から生成AIを用いて網羅的に知識を付ける

2025年3月現在ではLPIC-3 305とLPIC-3 306が後者の2.に該当し,それ以外は前者の1.に該当します。対策書籍やデジタルコンテンツが発売されている1.の場合は特に論点なく,それらの内容を完璧にするだけで合格は容易です。ただし,対策書籍やデジタルコンテンツが現行バージョンの試験に対応しているかは必ず確認するようにしてください。LPIC-3 304のように試験自体が廃止された場合は分かりやすいのですが,同じ試験名のままバージョンだけ最新化されているパターンも存在します。この場合,対策書籍やデジタルコンテンツの内容が古くなっているため,その内容をベースに後者2.の対策を行うハイブリットな対策を行うことになるでしょう。

対策書籍やデジタルコンテンツが発売されていない2.の場合は生成AIをうまく用いることが最大のポイントです。例えば,筆者の場合は下記のようなプロンプトを用いて試験範囲の各分野ごとに丁寧な対策を行っていました。

LPIC対策のために、下記の分野の演習問題を作成してください。ただし、本番同様に問題は

- 四肢選択
- コマンド名を答えさせる
- ファイル名を答えさせる
- ディレクトリ名を答えさせる

のいずれかの形式とし、問題数は知識分野と用語とユーティリティをカバーできる程度としてください。
回答は問題のすぐ下に表示し、言語は日本語で出力してください。
---
主な知識分野:
- Cephの構造とコンポーネントの理解。
- OSD, MGR, MON, MDSの管理。
- placement groupとプールの管理と理解。
- ストレージバックエンド(FileStoreとBlueStore)の理解。
- Cephクラスタの初期化。
- Rados Block Devicesの作成と管理。
- CephFSボリューム(スナップショトを含む)の作成と管理。
- 既存のCephFSのマウントと利用。
- CRUSH mapの調整と理解
- CephのHAの観点での設定。
- Cephクラスタのスケールアップ。
- 停止時のCephクラスタのレストアと完全性の検証。
- Ceph updateの主要概念(update order, tunable、特徴を含む)の理解。

用語とユーティリティ:
- ceph-deploy (関連するサブコマンドを含む)
- ceph.conf
- ceph (関連するサブコマンドを含む)
- rados (関連するサブコマンドを含む)
- rdb (関連するサブコマンドを含む)
- cephfs (関連するサブコマンドを含む)
- ceph-volume (関連するサブコマンドを含む)
- ceph-authtool
- ceph-bluestore-tool
- crushtool

利用したサービスはPerplexity AIです。ChatGPTやClaudeも併用していましたが,やはりこの手の一次情報を重要とする生成タスクはPerplexity AIに軍配が上がりますね。ただし,賢明な読者の皆さんであればご存知の通り生成AIには「妄想により正しくない出力をしてしまう」というhallucinationという現象が多々発生するため,生成AIの出力を盲信するのは危険です。あくまでも一次情報を辿った上で「本当に存在するコマンドか」「本当に存在する概念か」あたりのアンテナは常に張っておくようにしてください。

LPIC対策に重宝するコンテンツ

LPIC対策として有名な書籍は以下の2つです。

  • あずき本
  • スピードマスター

どちらもベストセラーであり,web上の情報でもどちらかをおすすめしていることがほとんどです。

あずき本

翔泳社
¥3,762 (2025/03/29 19:10時点 | Amazon調べ)
\最大9.5%ポイントアップ!/
Amazon
翔泳社
¥3,960 (2025/03/24 18:59時点 | Amazon調べ)
\最大9.5%ポイントアップ!/
Amazon

スピードマスター

翔泳社
¥2,475 (2025/03/29 19:10時点 | Amazon調べ)
\最大9.5%ポイントアップ!/
Amazon
翔泳社
¥2,970 (2025/03/24 18:59時点 | Amazon調べ)
\最大9.5%ポイントアップ!/
Amazon

これらの二冊には大きな違いがあると筆者は考えています。というのも,難易度が全く違うのです。あずき本の方が説明が簡潔で分かりやすい代わりにLinuxをそこまで深くまで知ることができません。一方,スピマスは説明がかなり詳しい代わりに理解に時間がかかります。正直,LPIC-2の合格を目指すだけであれば圧倒的にあずき本をおすすめしますが,Linuxの本質的な理解を目指したいのであればスピマスをおすすめします。

他にもあずき本は「説明→まとめて章末問題」という構成ですが,スピマスでは「問題→説明→問題→説明…」という構成になっています。

LPIC対策として有名なオンライン学習サイトは以下の2つです。

ping-tはLPIC以外にも幅広く試験対策コンテンツを提供しているサイトで,LPIC-1 101以外は有料で提供されています。筆者はCCNA対策でping-tには大変お世話になりましたが,LPIC対策ではping-tをあまり使いませんでした。理由としては,所々古いバージョンの問題を使い回しているために問題数が肥大化しており,効率的な学習ができないと考えたからです。ping-tで試験範囲から逸脱した問題に取り組むくらいであれば,あずき本やスピードマスターなどの書籍ベースでカッチリと勉強した方がよっぽど正確な知識を得ることができます。2025年3月現在,ping-tで最新バージョンに追従しているのはLPIC-1・LPIC-2・LPIC-3 303である点に十分注意してください。LPIC-3 300は最新バージョンに追従しておらず,LPIC-3 305とLPIC-3 306のコンテンツはまだ作成されておりません。前述の通りLPIC-3 304の勉強はLPIC-3 305とLPIC-3 306に活きますので積極的に活用しましょう。

学易もLPIC以外にも幅広く試験対策コンテンツを提供しているサイトで,LPIC-2は無料提供,LPIC-3は有料提供となっています。2025年3月現在,学易で最新バージョンに追従しているのはLPIC-2とLPIC-3 300だけである点に十分注意してください。LPIC-3 303は最新バージョンに追従しておらず,LPIC-3 305とLPIC-3 306のコンテンツはまだ作成されておりません。LPIC-3 304はトップページに記載はあるもののマイページ上のラインナップには記載がありません。運営に問い合わせたところ,お願いすれば販売してくれるみたいでした。前述の通りLPIC-3 304の勉強はLPIC-3 305とLPIC-3 306に活きますので積極的に活用したいところですが,学易のLPIC-3 304の問題数は非常に少なく,LPIC-3 304の内容を勉強したいのであればping-tの方がおすすめです。

LinuCイージスはLinuCレベル1対策のサイトです。上述の通りLinuCはLPICとほぼ同様の内容を問う試験になっているため,十分参考になるサイトです。このサイトはCCNAイージスでも有名なもので,古めかしいUIではあるもののかなり信頼できるサイトです。LPIC-1の学習時に利用するとよいでしょう。

学易はping-tよりもやや高額な価格設定になっていますが,学易がping-tに勝る点はLPIC-3 300のみです。当然無料版のLPIC-2は活用しますが,これら以外で学易を使うことはないと思います。

LPIC対策として効果的な動画学習コンテンツは以下の3つです。

  • 公式のYoutube
  • 野良のYoutube

公式のYoutubeはこちらです。スライドに誤りがあったり内容が冗長であったりするため正直自信をもっておすすめできるコンテンツではないのですが,LPIC-3 305やLPIC-3 306のように「対策書籍やデジタルコンテンツが発売されていない場合」に該当する場合に重宝する一次情報となります。野良のYoutubeとしては参考にできるチャンネルはほとんどないのですが,初学者に対して丁寧に説明をされる「まさるの勉強部屋」さんは唯一活用してもよいと思います。この方はCCNA対策でも良質なコンテンツを発信されているため信頼度が高いです。

ポモドーロ

上で勉強方法にはボトムアップ式とトップダウン式の二種類があることを述べましたが,筆者はこれらの勉強方法とポモドーロを組み合わせることで学習効率を極限まで高めるように意識していました。筆者は自分を追い込むことで成長を加速させるタイプの人間なので,Linux力底上げという目的に対して自分に厳しい期限を設けるという手段を用いることにしました。

筆者が学生時代からずっと続けている勉強方法の1つにポモドーロがあります。ポモドーロとは集中する時間とリラックスする時間を交互に設けてサイクルを回していく営みのことを指しています。いわゆるインターバルトレーニングのことを指していて,フィットネス界隈で最近流行りのHIITを勉強に当てはめたみたいなものです。ダラダラと勉強を続けるよりも,メリハリをつけて勉強した方が効率が良いという思想に基づいたテクニックとも言えます。

筆者の場合は「1つの勉強単位」と休憩10分をひたすら繰り返すという手法を用いていました。1つの勉強単位というのは,例えば下記のようなものです。

  • 問題演習20問
  • 書籍1章分
  • まとめページ振り返り3回

これらの勉強単位は,いずれも30〜45分程度要するものになります。筆者の今までの経験から45分以上集中することは難しいことが分かっているため,勉強単位が45分を超えると不適切です。逆に30分以下の集中時間ではそもそもの勉強量が足りなくなってしまいます。そのため,1つの勉強単位では最低でも30分は集中するようにしていました。

一日中空いている休日は,このポモドーロを午前10:00から深夜3:00まで回し続けました。睡眠時間はちょうど6時間と決めていますので,可処分時間18時間のうち14時間程度はこのポモドーロに時間を割いていました。残りの時間はご飯を食べたり筋トレをしたりして気分転換を行っていました。平日に関しても仕事が終わってから深夜3:00までの間はひたすらポモドーロを回していました。

Linux学習のコツ

LPIC対策では理解するべき内容が多いのはもちろんなのですが,それ以上に覚えるべきコマンドやオプションの多さに心が折れてしまう場面があると思います。そのような場合に効果的なコツをお伝えします。特に大切なのは「今まで取り組んできたLPICの分野で出てきたLinuxの"法則"を見つける」ことです。

例えばLPIC-306では旧LPIC-304試験で概要程度にとどまっていたCephについてガッツリ問われるのですが,覚えるべきコマンドが多すぎて絶望します。そこで,どうにか既存知識の"法則"と紐付けられないか考えるのです。具体的には,

ceph fs volume create cephfs_vol
ceph osd pool create rbd_pool

のようなコマンドを見たときに

ceph {L1種別} {L2種別} {アクション} {対象}

と捉えるようにすると,過去に学習した

ip addr add 192.168.1.1/24 dev eth0

と同じ構造のコマンド

ip {種別} {アクション} {対象}

であることが理解でき「cephコマンドはipコマンドのように様々な機能を一元管理しているのか。だから種別の指定が必要なんだ。その種別にはcephが管理している三大機能が当てはまりそうだぞ。」と捉えられ,一気に暗記量が減ります。

「手を動かすべき」論について

「Linuxの学習は手を動かすべきだ」という派閥がかなり幅を利かせています。この主張には自分も同意しますが,巷でおすすめされているJSLinuxはパッケージインストール系が全く動かず使い物にならず,Copy.shはコピペの挙動がおかしく操作性が低いです。他のサービスではいちいち会員登録が必要になることもあったため全てのサービスを試した訳ではありませんが,Linuxのオンラインターミナルはあまりおすすめできません。手を動かす場合はオンラインサービスではなくご自身のローカルにコンテナを立ち上げ,そのコンテナに入り込んで操作をするのをおすすめします。

# Red Hat系
docker run --rm -it almalinux bash
# Debian系
docker run --rm -it ubuntu bash

難易度ランキング

LPICを全冠したことで各試験の相対的な難易度も把握することができました。筆者の独断と偏見ですが,LPICの難易度ランキングは下記の通りです。

  1. LPIC-3 306
  2. LPIC-3 305
  3. LPIC-2 202
  4. LPIC-3 303
  5. LPIC-3 300
  6. LPIC-1 102
  7. LPIC-2 201
  8. LPIC-2 101

LPIC-3 306とLPIC-3 305は前述の「対策書籍やデジタルコンテンツが発売されていない場合」に該当するため,試験対策自体が非常に難しい試験となっています。もちろん内容も難しいのですが,何よりも「これを勉強したら受かる」という書籍やコンテンツが存在しないことが一番苦しかったです。一方でLPIC-3 306とLPIC-3 305以外は「これを勉強したら受かる」という書籍やコンテンツが存在するため,試験対策としては非常にやりやすいものになっています。筆者はLPICの試験を通して「先人の轍」が存在しない試験の難しさを痛感しました。仮に生成AIが登場していなければ合格は不可能だったと思います。

LPIC-2 202はLPIC-3 300とLPIC-3 303よりも難しい位置付けにしていますが,これは学習範囲の広さに起因しています。あずき本やスピードマスターを手に取れば分かると思いますが,LPIC-2 202の学習量は非常に多いです。LPIC-2 201はLPIC-2 101の内容を本質的に理解していれば瞬殺できるレベルなのですが,LPIC-2 202はLPIC-1 102を理解していても全く歯がたたない内容でした。それでも「これを完璧にしたら受かる」という書籍が存在しているだけありがたく,LPIC-3 305とLPIC-3 306よりは簡単な部類に位置付けました。

最適な取得順序

上述の通りLPICは低いレベルが高いレベルの受験資格となっている背景から,低いレベルから順番に取得していく必要があります。ゆえに以下の順番は変えられません。

  • LPIC-1 101 or LPIC-1 102
  • LPIC-2 201 or LPIC-2 202

一方でLPIC-3は好きなものから受験できます。LPIC-3 305とLPIC-3 306の難易度が非常に高いため,先にLPIC-3 300とLPIC-3 303に取り組むことをおすすめします。LPIC-3 300とLPIC-3 303は試験範囲を眺めて自分にとって得意そうな方から取り組むとよいでしょう。特にLPIC-3 300はハイコンテキストで試験範囲が特定の分野に限られていますので対策しやすいでしょう。LPIC-3 305とLPIC-3 306を比較するとLPIC-3 306の方がLPIC-3 304の旧バージョンとの重複部分が少ない上に内容的にも難しい試験となっていますので,LPIC-3 306よりも先にLPIC-3 305に取り組むとよいでしょう。以上の背景から,LPIC-3の順序は数字通りに

  • LPIC-3 300
  • LPIC-3 303
  • LPIC-3 305
  • LPIC-3 306

と取得していくことをおすすめします。

全冠して見えてきた世界

巷では「LPICなんて実務に何の役も立たない」といった乱暴な意見が飛び交うことがあります。筆者もLPICに全幅の信頼を置いている訳ではありませんが,少なくともLinuxに関わる方であれば実務に役に立つ可能性は高いと考えています。そもそもの前提として,「LPICを取得する必要もないほどLinuxに精通している」ような方はスコープ外であり,この議論の対象は筆者のように「Linuxがファイルシステムである」ことが全く理解できないレベルのLinux初学者です。たしかに玄人にとっては認定資格など必要ないでしょう。

「LPICなんて実務に何の役も立たない」と豪語する人はLPICの試験に全て合格しているのでしょうか。仮に合格していないとしたら,なぜそのような乱暴な発言ができるのでしょうか。筆者にはそのスタンスが理解できません。

筆者の実体験から,初学者の方々がLPIC取得による影響には下記のようなものが挙げられます。

  1. クラウドのブラックボックスを暴けるようになる
  2. コンテナの仕組みを理解できるようになる
  3. 技術的な課題に対して低レイヤーの解決手段を提示できるようになる

クラウドのブラックボックスを暴けるようになる

筆者はLPICを勉強し始める前までは,AWSのEC2を「クラウド上の仮想サーバ」としてしか捉えていませんでした。しかし現在では「Xenを用いたType1ハイパーバイザによる完全仮想化の仮想サーバ」「KVMをベースにNitroカードを活用した仮想サーバ」くらいまで解像度が上がりました。実はEC2はLinuxの仕組みで動いていたのです。このように,LPICの勉強を通して普段エンジニアとして動く中で「当たり前」と捉えてしまっていた仕組みの裏側の世界を知ることができるようになります。

これを抽象化すると「クラウドのブラックボックスを暴ける」になると考えています。例えば,EC2をTerraformで構築する際には下記のような設定項目があります。

block_device_mappings {
  device_name = "/dev/xvda"
}

筆者はTerraformのプロダクトコード全てに責任を持つ立場でしたが,LPICの学習を通じてこの設定項目の理解が甘かったことを再認識しました。「何かよく分からないけどEC2にディスクをアタッチしている」程度の理解でしたが,LPICの内容を勉強することにより「そもそも/devとは何か」「xvdaとは何を表しているのか」を理解することができるようになります。

コンテナの仕組みを理解できるようになる

最近のプロダクト開発現場ではコンテナ技術の理解は必須です。ほぼ毎日dockerを用いて開発していると言っても過言ではありません。そして私はLPICの学習を通じ,コンテナ技術がLinuxをベースにしていることを初めて知りました。cgroupやnamespaceがコンテナ仮想化を実現するための技術だったのです。

これにより日々遭遇するエラーもスムーズに解決することができるようになりました。例えば,Docker上でSpring Bootアプリケーションをビルドした際に下記の根深そうなエラーに遭遇しました。

java.lang.NullPointerException: null at jdk.internal.platform.cgroupv2.CgroupV2Subsystem.getInstance

まず真っ先にcgroupが目に入ったので「あーこれはアプリケーションレイヤーではなくカーネルレイヤーで発生しているエラーだな」と一瞬で切り分けられました。エラーの切り分けだけでなく,GitHub Issue上の議論やJDK Bug Systemの内容もスッと頭に入ってくるようになりました。

技術的な課題に対して低レイヤーの解決手段を提示できるようになる

リーダーという立場で組織を動かしていると,日々行っている営みの自動化を検討したくなることがあります。その際,そもそもの課題から仕立て直して解決手段の決定までDesign Docを書きながら進めていくのですが,解決手段の洗い出しフェーズにおいてLinuxの知識が役に立つことがあります。多くのインフラがLinuxをベースに動いているということは,最も素朴な解決手段はLinuxの仕組みを用いるものであることが多いです。リッチなツールをインストールして動かすよりも,Linuxのシェルスクリプトを用いた方が実装コスト・保守運用コスト・学習コストを低く抑えることができるでしょう。

プロダクトの保守運用を行う中でLinuxサーバに入り込んで調査を行うことがあります。その際,LPIC-1やLPIC-2で学んだ内容が大活躍します。モニタリング上でディスク容量が逼迫している場合はdfコマンドなどを使って簡易的に一次調査しますし,CPU利用率が張り付いている場合にはtopコマンドなどを使って簡易的に一次調査します。この営みも抽象化すれば「プロダクトの課題に対して低レイヤーの解決手段を提示できるようになる」ことを意味していると考えています。最初の「クラウドのブラックボックスを暴けるようになる」にも近しい話題ですが,筆者自身の「技術各論が理解できないリーダーは意思決定が遅い」という信念への貢献を如実に表していると思います。

おわりに

LPICはグローバルスタンダードなLinux認定資格であることから,資格を取ることによりプレゼンスを上げることが目的である方がほとんどでしょう。しかし,Linuxはエンジニアとして理解が必須である共通言語であるともいえます。時代の流れが早いIT系の中でオープンソースのOSとして長い間確固たる地位を保持し続けてきたLinuxはOS界の王様ともいえ,レガシーシステムからクラウドシステムまで今でも幅広く利用されている技術です。安直な言葉を使えば,Linuxを学ぶことでエンジニアの素養を身に付けることができます。この素養は例えばAWSでEC2やAuroraなどのマネージドサービスを扱う場合にも理解が必須である内容であるだけでなく,gitを使った日々の作業でも大活躍する知識になります。ぜひ資格取得という目的を超え,たまには寄り道をしながらLinuxの本質的な理解を目指して勉強してみてください。

Appendix

筆者がLPICの学習を通して「これは印象深い学びだった」というものをいくつか列挙します。

シバンについて

シェルスクリプトの冒頭には「シバン(Shebang)」と呼ばれる記述を行います。

#!/bin/bash
echo "hello, world"

今まで「#!/bin/bash」は「シェルスクリプト実行時のバイナリを指定している」と理解していましたが,この理解は50点でした。正しくは「スクリプトを実行した場合はシバンはコマンドがスクリプトを解釈実行するインタープリターとなり,インタープリターを指定した場合や同一のシェル内で実行した場合はシバンは無視される」というものです。

./hello.sh      # シバンがインタープリターとなる
bash hello.sh   # シバンは読み飛ばされる
. hello.sh      # シバンは読み飛ばされる
source hello.sh # シバンは読み飛ばされる

cronとanacron

今までcronはコマンドだと思っていましたが,cronはあくまでもデーモンであり,正しくはcrontabがコマンドでした。一方,anacronは常駐しないジョブスケジューラであるため,マシンが停止していても次回の起動時にジョブを実行することが可能です。具体的には,cronにより/etc/cron.hourly/0anacronが実行されることでanacronが起動し,未実行のタスクがあれば実行する仕組みになっています。

Linuxの起動について

BIOSベースの起動方法とUEFIベースの起動方法で異なるのですが,UEFIベースの起動方法は以下の通りです。

  1. 電源ON
  2. UEFIエントリで指定されたESP内のブートローダ(GRUB2)をメモリにロードする
  3. GRUB2はカーネル(vmlinuz)をメモリにロードしてinitramfsをカーネルに渡す
  4. カーネルは自身を初期化してinitramfsを解凍する
  5. initramfs内のinitがsystemdを起動する
  6. systemdはルートファイルシステムをinitramfsからディスク内の本体に切り替える
  7. systemdは/sbin/initを実行して各サービスのデーモンが起動する

mkinitramfsやdracutはinitramfsを作るツールですが,これらはいわばLinux本体を作る前の「ミニLinux」と捉えられます。この理解が大切でした。

UNIXドメインソケットについて

LPICではネットワークの知識も必要とされるのですが,なんとここにきてネットワークスペシャリストでもCCNAでも勉強してこなかった概念が登場しました。UNIXドメインソケットはlocalhost内のプロセス間通信に対するソケットのことを指しています。ざっくり捉えると,TCP/IPのようなネットワーク上の通信ではなくファイルシステム上のパスを使ってソケットを識別し,カーネル内部で通信を処理する方式です。TCP/IPとは異なるフレームであるとはいえTCP/UDPに相当する概念があります。

  • SOCK_STREAM:TCP的な思想でストリームでデータを順番通りに送受信する
  • SOCK_DGRAM:UDP的な思想でデータグラム単位で送受信する

具体的には下記のようにするとsocketを作成できます。

#include <sys/socket.h>
#include <sys/un.h>

int main() {
  // AF_UNIXはUNIXドメインであることの指定、SOCK_STREAMはtypeの指定
  int server_fd = socket(AF_UNIX, SOCK_STREAM, 0);
}
シェアはこちらからお願いします!

コメント

コメントする

※ Please enter your comments in Japanese to distinguish from spam.

目次