Linux基礎 #1 - はじめに

Last Edited: 10/14/2024

このブログ記事では、Linuxを始めるために必要な基本的な概念を紹介します。

DevOps

Linuxは、世界で最も人気のあるオペレーティングシステム(OS)の一つであり、ソフトウェアエンジニア、オペレーション、DevOpsエンジニアにとって必須のスキルです。 本シリーズでは、Linuxの基本について説明していきますが、その前に、Linuxが何であり、なぜ人気があるのかを理解するための基本概念をいくつか確認し、Linuxを試して学ぶための環境を設定します。

オペレーティングシステム

オペレーティングシステム(OS) は、ハードウェアの上に位置し、ハードウェアやソフトウェアのリソース(CPU、RAM、ネットワーク、ストレージ、デバイスなど)を管理し、 ユーザーとのインターフェースを提供するソフトウェアの層です。OSの中核となる部分はカーネルで、ハードウェアに最も近い位置にあり、 プログラムを実行するためのリソースを管理します。

Linux

OSのもう一つの部分がシェルで、カーネルが受け取ったコマンド(ユーザーがコンピュータ/OSに対して実行したい操作)を解釈し、 ユーザーが入力や出力を確認できるコマンドラインインターフェース(CLI) を提供します。ここで、以前の記事Network Engineering #6 - SSH で説明したSSHが、リモートコンピュータのシェルにログインし、そのCLIを表示してリモートコンピュータ上でコマンドを実行するためのプロトコルであることが理解できます。

ファイル間の移動やCLI上で文字列を表示する、シェルを終了するなどのいくつかのコマンドは、内部コマンド と呼ばれ、シェルによって直接実行されます。 その他のコマンド、例えば環境変数の定義、新しいディレクトリの作成、ファイルの内容を開いてCLIに表示するなどは、シェルがカーネルに実行を委任する必要がある、 外部コマンド と呼ばれます。上記の図は、内部コマンドおよび外部コマンドがOSに受け取られ、解釈され、実行され、ユーザーに表示される過程を示しています。

OSには、シェルの代わりにグラフィカルユーザーインターフェース(GUI) も含まれていることも多く、システムをより直感的に操作できます。 GUIの学習曲線はCLIよりもはるかに緩やかですが、柔軟性はCLIよりも少ないです。そのため、開発者はより多くの柔軟な制御ができるCLIを好んで使用する傾向があります。

なぜLinux?

上記の説明からわかるように、OSはあらゆるコンピュータ(組み込みシステム、Webサーバー、データベースサーバーなど)にとって必須な根幹をなすソフトウェアです。 開発者としては、パッケージの管理やプログラムの実行、ネットワーキングのためにCLIを通じてOSと直接またはリモートでやり取りする必要があります。 利用可能なOSはmacOSやWindowsなど多くありますが、Linuxは開発者の間で特に人気があります。なぜなら、Linuxはオープンソースであり、よくメンテナンスされ、 テストされているからです。また、Linuxのライセンスの下では、Linuxは自由に配布、改変、商用利用が可能です。 さらに、Linuxは軽量であることも多く(コスト効率が良く)、Docker、Kubernetes、Terraformなどの多くのDevOpsツールにも対応しているため、 開発者の間で広く利用されています。(これらのツールについては、この先DevOpsシリーズで取り上げます。)

注:Linuxは厳密にはOSのカーネルです。CLIやGUIのようなユーザーインターフェースを構築できるようにするため、LinuxはLinux APIを通じてシステムコールを公開しており、 これによりユーザースペースからカーネル機能への限定的なアクセスを提供しています。C言語のGNU Cライブラリは、これらのシステムコールのラッパー関数を提供しており、 開発者がユーザーインターフェースを構築できるようにしています。Linuxカーネルとこのライブラリを基にして、世界中の開発者がさまざまなバージョンのOSを構築し配布しており、 これらをディストリビューション(ディストロ) と呼び、多くの開発者が使用しています。たとえば、Ubuntu、Debian、Fedoraなどがその代表例です。

環境のセットアップ

Linuxディストロを直接マシンにインストールすることも可能ですが、これには時間や労力、メモリスペースがかかります。Linuxを試すだけなら、 Dockerを使って仮想的にディストロのシェルをすばやく実行できます。(Dockerの詳細については、後の別の記事で取り上げます。ここでは、Dockerを使ってLinux学習用の環境を設定する手順のみに焦点を当てます。) まず、このリンクの手順に従ってDockerをインストールしてください。 インストール後、ターミナルでdocker -vコマンドを実行し、Dockerのバージョンが表示されるか確認して、正しくインストールされたことを確認します。

Dockerが正常にインストールされたら、docker pull ubuntuコマンドを実行して、UbuntuのDockerイメージをダウンロードします。 次に、docker imagesを実行して、イメージが正しくダウンロードされたかどうかを確認します。リポジトリのリストに「ubuntu」が表示されれば成功です。 次に、docker run -d -it --name test ubuntuコマンドを実行してイメージを作成し、docker exec -it test bashでイメージを実行します。 ターミナルにroot@~と表示されたら、Ubuntuの擬似ターミナルの設定が成功したことを意味します。ターミナルでpwdコマンドを実行して、出力が表示されるか確認しましょう。 擬似ターミナルを終了したい場合は、Ctrl+Dを押すか、exitと入力します。再度擬似ターミナルを起動したいときは、docker exec -it test bashを実行してください。

結論

この記事では、オペレーティングシステムやLinuxの基本概念、そしてDockerを使ってLinux学習環境を設定する方法について説明しました。 次回からは、Linuxに関連する重要な概念や、Linuxを操作する方法について学んでいきます。

リソース