自作シェルで学ぶLinuxシステムプログラミング―Pythonで150行の「シェル」を実装してLinuxのしくみを学ぼう
What you'll learn
- シェルとカーネルの関係
- シェルによるコマンドの実行の基本
- シグナルとシグナルハンドリングの基本
- Linux におけるシェルスクリプトの実行
- 標準入出力のしくみ
- リダイレクト・パイプのしくみと実装方法
- シェルとターミナルエミュレータ、疑似端末の関係
- 基本的なシステムコール(fork/execve/open/close/read/writeなど)
Requirements
- 「変数・if・for・関数」程度の Python の基礎知識がある
- 絶対パス・相対パス程度のコンピュータの基礎知識がある
- Linux にふれたことがあり、ターミナルで ls、cd などの基本的なコマンド操作を実行できる
- Vim や nano など、ターミナルで使用可能なエディタを使うことができる
- プログラミングに使用可能な PC を所有している
- PC に Docker と Visual Studio Code をインストールしてある
- 学習に使える AWS アカウントがある(AWS アカウントは、一部のセクションで AWS のサーバを使用するために必要です。AWS アカウントがない場合、そのセクションのハンズオンをスキップしても以後の学習には影響ありません)
Description
IT エンジニアとして活動していると、何かの機会に Bash や Zsh といった「シェル」にふれるはずです。
「シェル」についてはよく「カーネル」を囲む図で説明されたりしますが、それ以上はよく知らないという方も多いのではないでしょうか?
そもそも「カーネル」についても「OSのコア」ぐらいの簡単な説明が多く、結局何なのかよく分からないという方は少なくないと思います。
さて、「シェル」で行うことといえば「コマンドの実行」ですが、そもそも「コマンドの実行」とは何なのでしょうか?
他には、「何かをインストールする」というのもよく分からない、何か理解の及ばない変化がコンピュータに起こるもの、と思っている方も少なくないと思います。
そこでこの講座では...
「シェル」を自作しながら、Linux のしくみや OS に近い領域のプログラミングを学んでいきます。
「シェルってなに?コマンドの実行ってなに?」といった疑問を解消していきます。
コースで自作するシェルには、次のような機能を実装します。
インタラクティブにコマンドを実行できる
Linux サーバで使うことができる
シェルスクリプトも実行できる
リダイレクトとパイプをサポートしている
これらの機能をどのように実装するのか丁寧に説明したうえで、実際に実装して動かしてみます。
■使用するプログラミング言語
シェルのような OS に近い領域のプログラムの実装には、C や Go、Rust といったプログラミング言語が使われることが多いです。
しかし、これらの言語よりも少ない前提知識で挑戦できるよう、このコースでは「Python」を使ってシェルを実装します。
最終的に完成する自作シェルは Python で 150 行程度ですが、この小さなコードから多くのことを学ぶことができます。
■このコースで学ぶこと・学ばないこと
シェルの自作は、大きく 2 つの知識から成り立ちます
1.「Linux システムプログラミング」(OS に近い領域のプログラミングの知識)
2.「インタプリタの作り方」(プログラミング言語の解析・実行の知識)
このコースで学ぶのは「Linux システムプログラミング」の知識です。
このコースでは「インタプリタの作り方」は扱いません。
※ 実装するシェルも、あくまで学習目的の簡易的なものです
Who this course is for:
- Linux に入門して基本的なコマンドを身につけたが、もっと詳しくしくみを理解したい方
- Linux における「シェル」や「コマンドの実行」「標準入出力」などのしくみを、シェルの実装のレベルで知りたい方
- OS に近い領域のプログラミングに興味がある方
- プログラムをすらすら実装できるようになってきて、少し発展的な題材の実装に挑戦してみたい方
Instructor
ソフトウェアエンジニア。IT企業からフリーランスエンジニアを経て会社を設立。
現在はエンジニアのスキルアップをテーマに、勉強会の開催や教材作成の活動を実施。オンラインコースUdemyではベストセラー講座多数。
AWSやDocker/Kubernetes、サーバレス技術などを扱う「野生」のクラウドネイティブ人材。勉強会コミュニティStudyCo運営。
■Q&Aでのサポートについて
プログラミングなどの学習では、環境構築のエラー等で苦戦することも多いと思います。
私のコースを進める中で発生したエラー等については、Udemy の Q&A でできるだけサポートしています!
いただいた Q&A には、通常 24 時間以内(タイミングが良ければ 1 時間以内)で回答しています。
ちょっとした疑問点などについても、Q&A からお気軽にご質問ください!