
このコースの概要や学習すること、対象者や前提知識を確認します。
このコースを受講するときの進め方について説明します。
このコースでの Python のセットアップの方針を説明します。
Python の実行環境として Visual Studio Code の Dev Containers をセットアップします。
Python の動作確認として Hello World を実施します。
Dev Container に Python のフォーマッタである Black を導入します。
シェルとカーネルの概要を学習します。
シェルの枠組みとして、インタラクティブに入力を受け付けるループを実装します。
シェルのコマンドには内部コマンドと外部コマンドがあることを学び、内部コマンドの実装例を確認します。
自作シェルに内部コマンド(組み込みコマンド)を実装します。
外部コマンドとは何かと、PATH の検索について学びます。
外部コマンドの実装のため、自作シェルに PATH の検索処理を実装します。
プログラムの実行の流れと、使用するシステムコール(fork /execve)について学習します。
自作シェルに外部コマンドを実行する処理を実装します。
このセクションで学んだことのポイントをまとめます。
このセクションで実施することの概要を説明します。
Linux サーバとして、Amazon EC2 を起動して接続してみます。
Linux サーバに自作シェルをインストールして動作確認します。
Linux サーバに自作シェルをログインシェルとしたユーザを作成します。
SSH 接続した際に自作シェルが起動し、インタラクティブに操作できることを確認します。
sshd が execve によって自作シェルのプログラムを実行する様子を確認します。
このセクションで学んだことのポイントをまとめて、Amazon EC2 を片付けます。
このセクションからの実装内容について説明します。
シグナルの基本を学習します。
自作シェルにシグナルハンドリングを実装し、Ctrl + C の入力で終了しないようにします。
シグナルを送信する kill コマンドについて学習します。
シェルスクリプトの概要を学びます。
自作シェルが引数にファイル名を与えられた際にシェルスクリプトとして実行するよう実装します。
Linux における、スクリプトの先頭に記述する shebang の動作について学習します。
shebang を利用してシェルスクリプトを実行できるよう、自作シェルをコメントに対応させます。
標準入力・標準出力・標準エラー出力の概要と、リダイレクト・パイプの動作を確認します。
標準入出力をしっかり理解するための前提知識として、Linux におけるファイル操作の基本とファイルディスクリプタについて学習します。
標準入出力の意味を改めて学び、リダイレクトやパイプでのファイルディスクリプタの動作を確認します。
自作シェルへのリダイレクトの実装方針を説明します。
自作シェルにリダイレクトを実装します。
自作シェルの組み込みコマンドをリダイレクトに対応させます。
自作シェルへのパイプの実装方針を説明します。
自作シェルにパイプを実装します。
このセクションで学んだことのポイントをまとめます。
/dev/pts/0 などを理解する前提知識として、特殊なファイルシステムについて学習します。
ターミナルや擬似端末について学習し、シェルとのつながりを整理します。
ターミナルの表示を制御する ANSI エスケープシーケンスの概要を学習します。
自作シェルに ANSI エスケープシーケンスを使った clear コマンドを実装します。
自作シェルの実装の仕上げとして、プロンプトに色をつけてみます。
シェルを自作しながら学んだことをまとめます。
このコースを終えたあと、さらにステップアップする方向性を紹介します。
IT エンジニアとして活動していると、何かの機会に Bash や Zsh といった「シェル」にふれるはずです。
「シェル」についてはよく「カーネル」を囲む図で説明されたりしますが、それ以上はよく知らないという方も多いのではないでしょうか?
そもそも「カーネル」についても「OSのコア」ぐらいの簡単な説明が多く、結局何なのかよく分からないという方は少なくないと思います。
さて、「シェル」で行うことといえば「コマンドの実行」ですが、そもそも「コマンドの実行」とは何なのでしょうか?
他には、「何かをインストールする」というのもよく分からない、何か理解の及ばない変化がコンピュータに起こるもの、と思っている方も少なくないと思います。
そこでこの講座では...
「シェル」を自作しながら、Linux のしくみや OS に近い領域のプログラミングを学んでいきます。
「シェルってなに?コマンドの実行ってなに?」といった疑問を解消していきます。
コースで自作するシェルには、次のような機能を実装します。
インタラクティブにコマンドを実行できる
Linux サーバで使うことができる
シェルスクリプトも実行できる
リダイレクトとパイプをサポートしている
これらの機能をどのように実装するのか丁寧に説明したうえで、実際に実装して動かしてみます。
■使用するプログラミング言語
シェルのような OS に近い領域のプログラムの実装には、C や Go、Rust といったプログラミング言語が使われることが多いです。
しかし、これらの言語よりも少ない前提知識で挑戦できるよう、このコースでは「Python」を使ってシェルを実装します。
最終的に完成する自作シェルは Python で 150 行程度ですが、この小さなコードから多くのことを学ぶことができます。
■このコースで学ぶこと・学ばないこと
シェルの自作は、大きく 2 つの知識から成り立ちます
1.「Linux システムプログラミング」(OS に近い領域のプログラミングの知識)
2.「インタプリタの作り方」(プログラミング言語の解析・実行の知識)
このコースで学ぶのは「Linux システムプログラミング」の知識です。
このコースでは「インタプリタの作り方」は扱いません。
※ 実装するシェルも、あくまで学習目的の簡易的なものです