個人的に Linux に興味があって色々勉強してきました。
どんな流れで学ぶといいのかよく聞かれるので、Linux について学ぶおすすめの流れを書籍を中心にまとめます。
以下の 5 ステップで紹介していきます。
- Linux を使えるようになろう
- Linux のしくみに入門しよう
- さらに学ぶのに必要な周辺知識をつけよう
- OS 自作について学ぼう
- もっと知識をつけるには…
Step 1. Linux を使えるようになろう
まずは Linux をある程度使えるようになるのを目指すのがおすすめです。
Linux の入門書はたくさんありますが、個人的に『新しいLinuxの教科書』がかなりおすすめです。
Linux サーバの環境構築の入門としては、『Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂3版』もおすすめします。
他には LPIC (LinuC) のレベル 1 ぐらいをとってみるのもおすすめです。 参考書で有名なのは『Linux教科書 LPICレベル1 Version5.0対応』ですね。
このぐらい学んでおけば、Linux の使い方の基本は身につくと思います。
コンピュータやプログラミングの基礎知識をつけよう
このぐらいの段階で、コンピュータやプログラミングの基礎知識もつけておくと、ステップアップの内容も頭に入りやすいです。
例えば、
- 基本情報や応用情報の勉強
- なんらかプログラミング言語の習得
- PC 自作
といったあたりがおすすめです。
書籍だと以下の 2 冊はとてもおすすめです。
Step 2. Linux のしくみに入門しよう
Linux の使い方の基本が身についた後、ステップアップとして Linux のしくみに入門するための書籍を紹介します。
まず、『ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道』をおすすめします。 プロセス・ファイル・ストリームといった概念から Linux について整理していて、難易度的にもとても読みやすい本です。
ただし、この本は C 言語のサンプルとなっているので、どうしても抵抗がある方もいると思います。 C 言語に抵抗がある場合は『Goならわかるシステムプログラミング 第2版』をおすすめします。
そして、必読と言えるぐらいおすすめなのが『[試して理解]Linuxのしくみ ―実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識【増補改訂版】』です。 Linux のしくみを学ぶのに定番中の定番だと思います。
もう何冊か追加で読みたい場合は、
などがおすすめです。
Step 3. さらに学ぶのに必要な周辺知識をつけよう
さらに知識をつけようとすると、少し周辺分野の知識が必要になってきます。
CPU
OS について学んでいくには、どうしても CPU の知識が必要になっていきます。
CPU について学ぶ定番と言えば、『CPUの創りかた』だと思います。 この書籍の通りの CPU を自作するには部品の入手が難しくなっていますが、読み物として読むだけでもおすすめです。
CPU の自作に挑戦できる書籍は色々ありますが、エミュレータで簡単に環境を用意できるという観点で『コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方』(通称: Nand2Tetris) はとてもおすすめです。 CPU とコンパイラの自作に挑戦して、そのしくみを学ぶことができます。
OS の前提知識として CPU を学ぶ上では、『32ビットコンピュータをやさしく語る はじめて読む486』も絶対におすすめしたいです。 (CPU の基本を学んだ上でステップアップとして読むような書籍です)
この本のプロローグ (p20) には、以下のように書かれています。
CPUの持つ能力を引き出す役割を持つのが、オペレーティングシステムと呼ばれるソフトウェアです。
この記述の通り、OS についてさらに学ぶには CPU の知識が前提となってきます。 この一冊を読むと、CPU の特権保護機能といった OS に必須の機能をざっと学ぶことができます。
C 言語
これ以上学んでいこうとすると、どうしても C 言語の知識が必要な場面が増えてきます。 (サンプルコードが C 言語か C++ の書籍が増えていきます)
最低限、C 言語を読んで意味が分かるくらい学んでおくのがおすすめです。 ポインタとできれば関数ポインタぐらい分かれば大丈夫です。
Step 4. OS 自作について学ぼう
CPU や C 言語の知識もついてくると、OS 自作の書籍が読めるようになります。
OS 自作について、現在一番有名なのは『ゼロからのOS自作入門』でしょう。 実際に自作までしなくても、一通り読んでみると OS についてとても理解が深まります。 (もちろん自作するとさらに勉強になります)
ただし、この書籍は GUI で動作する OS を実装することもあり、かなりボリュームがあります。
もし比較的ボリュームが少ないものがよければ、『12ステップで作る組込みOS自作入門』がおすすめです。
タイトルに「組込みOS」と書かれていますが、そのエッセンスは組込みではない OS にも通じています。 ただし、こちらはマイコンで実装することになるので、自作に挑戦しようとすると、最初のセットアップのハードルは高めです。
ここまでに詳解した OS 自作とは少し違いますが、Linux ディストリビューションの自作である「Linux From Scratch」も定番です。 (コードを書くわけではなく、既存の OSS を使ってひたすらインストール・設定していきます)
(余談) コンパイラ・インタプリタの自作
CPU や OS について勉強していると、コンパイラ・インタプリタの仕組みを知りたくなったり、自作してみたくなったりします。
コンパイラについて簡単に自作するなら、CPU について学ぶおすすめでも紹介した『コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方』がいいと思います。
この本ではエミュレータで動くコンパイラを作ることになりますが、その際 JVM (Java Virtual Machine) のような仮想マシンをはさむ方式となっています。 そのため、仮想マシンについて学ぶこともできます。 (注意: JVM のような仮想マシンは、OS の仮想マシンとは別物です)
コンパイラの自作としてはオンラインブックの『低レイヤを知りたい人のためのCコンパイラ作成入門』も有名・おすすめです。 こちらはエミュレータではなく実機で動きます。
インタプリタについては、『Go言語でつくるインタプリタ』を読みながら作ってみるのがおすすめです。
例えば「シェルを自作してみたい」といった方は、上のほうで紹介したシステムプログラミング関連の書籍を読んで、さらにインタプリタの作り方を学べば、シェルの自作に挑戦できるはずです。
Step 5. もっと知識をつけるには…
OS 自作ぐらい知識がついてくると、
といった、Linux について日本語で(おそらく)最高峰の書籍も少し読めるようになってきます。
他には、OS について学んでいると、リンカ・ローダが気になってきます。 その際は『リンカ・ローダ実践開発テクニック―実行ファイルを作成するために必須の技術』がおすすめです。
おわりに
Linux について学ぶおすすめの流れを書籍を中心にまとめまてきました。
こういった話になると、とくにアプリケーションエンジニアの方から「これを学んでなんの役立つの?」と聞かれることが多いです。 私自身、どちらかというとアプリケーションよりの仕事をすることが多いのですが、それでもとても役に立っていると感じています。
例えば、エラーの解決力はかなり向上しました。 エラーに遭遇したときに、エラーメッセージを理解して即座に解決できることが増えたり、根本原因を追いかけられる範囲が広がりました。
また、プログラムのパフォーマンスを高めたいようなケースでは、OS の知識が役立つ場面は多いです。 (個人的には、OS の知識がないとパフォーマンスについて理解できないことが多いと感じます)
あとは何より面白いですね。 興味があって面白いと感じることが一番だと思います。