Webインフラ構築(Linux)
新人・未経験にこそオススメ Linuxをはじめよう!
1.Linuxとは
コンピュータには大きく分けて二つのシステムから構成されています。
ハードウエアとソフトウエアです。
ハードウエアとは、コンピュータの機械そのもののことを指します。
ソフトウエアとは、ハードウエアで動作しているプログラムを指します。
ソフトウエアにも大きく分けて2 種類あります。
基本ソフトウエアと応用ソフトウエアです。
基本ソフトウエアはOperating System(OS) のことを指します。
応用ソフトウエアはその上で動くアプリケーションを指します。
例.Windows やLinux、Mac OS X は基本ソフトウエア
Word やExcel、PowerPointは応用ソフトウエア
Linux は基本ソフトウエアの一つです。では、Linuxはどういった仕組みで動作するのでしょうか。
さきほどソフトウエアは、基本ソフトウエアと応用ソフトウエアの2 つに分かれると説明しました。基本ソフトウエアは、さらに2 つの領域に分かれます。それらを「カーネル」と「ユーザランド」といいます。
カーネル
カーネルとはオペレーティングシステムの中核となる部分で、ハードウエアと直接やりとりするなどもっとも中心的な機能を受け持つ部分です。カーネルはハードウエアの違いを吸収して、プログラムがどのようなハードウエア上でも同じように動作する役割があります。
ユーザランドとシェル
ユーザランドとはOS が動作するのに必要な、カーネル以外の部分のことです。ファイルシステムやファイル操作コマンド、シェルなどの基本的なソフトウエア群を指します。
ユーザーランドとは大雑把に言えばOSに標準搭載されている各種コマンドやユーザーインターフェイス、一般プログラマーが利用できるOS標準のAPIなどのソフトウェア群の総称のことです。
コマンド操作
Linux は、基本的にはコマンドで操作します。コマンドはユーザランドで動作します。また、Linux にX Window System とGNOME、KDE、Xfce などのデスクトップ環境を導入することで、Windows やMac などのようにマウス入力による操作が行なえるようになります。
コマンドは文字通り「命令」のことで、さまざまな用途のコマンドがあります。Linux にはシェルという対話型のコマンド入力環境が用意されています。シェルは入力されたコマンドを理解し、実行します。
シェルの役割
シェル自体には大きく2 つの機能があります。1 つは、前述の通りコマンド入力を受け付けることです。もう1 つはシェルスクリプトの実行にあります。シェルスクリプトとは、「コマンドの入力を自動化する」ためのものです。1 つのファイルにコマンドを1 行ずつ記述して作成します。作成したシェルスクリプトを実行することで、コマンドの実行を自動化することができます。また、作成したシェルスクリプトをサーバーの起動時に実行したり、数時間毎に実行したりすることができます。
ログイン
Linux では、利用開始時にユーザ名とパスワードを入力します。このユーザー名とパスワードの組み合わせをアカウントといいます。アカウントを使ってLinux を使い始めることを「ログインする」といいます。ログインするのは、そのコンピュータの利用許可を得るためです。
2.なぜプログラマにLinuxの知識が必要なのか
普段、皆さんはプログラミング作業をWindows上で行っていると思います。気に入ったエディタ、EclipseのようなIDE(統合開発環境)など、好きなものを使って開発ができます。プログラムを書くだけなら、Windows上で全てが完結します。
とはいうものの、プログラマとして必要最低限のLinuxの知識を身につけるのは、非常に大切なことです。
その理由は、Java等で作ったプログラムが動作する環境にあります。たとえばサーバサイドプログラムとして完成したプログラムは、公開するためにWebサーバに設置されます。このサーバのほとんどは、OSにLinuxが採用されています。
Webアプリケーション
Webアプリケーションに必要なソフトウェアの組み合わせに好んで採用される環境に、Linux・ Apache・Tomcat・MySQL・PHPがあります。これらのソフトウェアはオープンソースソフトウェアであり、無償で提供されています。この組み合わせでの構築実績も多く、安定して稼働します。 多額の資金を投じて有償のソフトウェアで固めたシステムと比べても性能面や安定性の面でも全く引けを取らない、オープンソースソフトウェアだけで構成されたサーバを構築することが可能なのです。
学ぶべきこと
Linuxで稼働するサーバに単にプログラムを設置するだけなら、Windows環境の開発マシンからFTPクライアント等を使って操作することも可能です。
しかし、プログラムが正しく動作しないなど、何かしらトラブルが起きたときに、Linuxサーバを直接操作しなければ解決できないこともあります。
ここでは、そんなときのためにプログラマが最低限身につけておくべきLinuxの基本操作を学びます。
なぜLinux?
なぜ、サーバOSにはLinuxが採用されていることが多いのでしょうか?実際に利用している現場の理由はさまざまですが、主に次のような理由があるようです。
・無償で手に入るLinuxはサーバ構築時のコストを下げる
・コミュニティ活動が活発で、技術的な情報も得やすい
・問題点の修正が早い
・メモリ消費量・動作速度などの面でWindowsより軽量
・ソースコードが公開されていて、カスタマイズも可能
・Linuxで動作させることを前提として設計されているアプリケーションが多い
コスト面でみてLinuxを選択しているところもあれば、「WebサーバはApacheだよね、Apache使うならやっぱり Linuxだよね」という理由で選択しているところもあるようです。Windows版のApacheも開発されていますが、Linux版ほど洗練されていないのが現状です。また、Windowsサーバ上でApacheを使ってWebサイトを公開した場合、Windowsのライセンスに違反する可能性に注意しなければならないという問題もあり、Windows+Apacheという組み合わせに対しては消極的になりがちです。
また、実際にサーバを構築していてもLinuxの方が手軽に感じます。Linuxにはいくつかのディストリビューションがあります。
ディストリビューションとは?
Linuxの核の部分と追加ソフトウェアのパッケージのことを言います。
ディストリビューションについては後程詳しく説明しますが、例えば「Ubuntu」や「CentOS」という名前を聞いたことはないでしょうか?これらはLinuxディストリビューションの1つです。
Linuxディストリビューションにはサーバを構築する上で必要なソフトウェアが多く含まれます。例えばWebサーバソフトウェアであるApache、データベースのMySQLやPostgreSQLなどです。
ディストリビューションを利用すると、個別にインストールする必要なく、これらのソフトウェアがLinuxをインストールするだけで全部入ってくるのです。
どこまでの知識が必要?
では、プログラマにはLinuxに関してどこまでの知識が必要になるのでしょうか?もちろん深い知識があるにこしたことはありません。それはLinuxに限らず、データベース、セキュリティなど、なんでもそうです。
プログラマとして活躍するうちに、さまざまな場面で、それらの知識を要求されることになるでしょう。その時のために我々は絶えず勉強し続けなければなりません。基本的なことを学んだあとで、現場の実践を行うことが理解を深める唯一の手段です。
やや話が逸れましたが、ここでは「プログラマが抑えておきたい最低限のLinux に関する知識」として次のようなテーマを取り上げていきます。
・LinuxとはどのようなOSか
・ファイル操作(作成・コピー・移動・削除)
・ファイルの属性
・SSHによるリモートからの操作
3.ディストリビューションの種類
Linuxにはいくつかのディストリビューションがあります。
学習用にLinuxをインストールしてみようと思ったときに、まずどれを選んで良いのか迷ってしまいます。結論から言えばどれを選んでも大丈夫なのですが、いくつかよく名前を聞くディストリビューションを紹介します。
Red Hat Enterprise Linux
Red Hat社が開発・販売する有償ディストリビューションです。RHELとよく略されます。Red Hat社では7年間という長期のサポートやエンジニア育成のためのトレーニングも提供しています。
Fedora Core
Fedora Projectによって開発が進められているディストリビューションです。開発サイクルが早く、新機能もいち早く搭載されることが特長です。とにかく最新の機能に触れてみたいのであればオススメのディストリビューションです。
ただし、バグが多いのも事実で、公開目的のサーバには適しているとは言えません。
CentOS
Red Hat社が開発するRHELをベースとした、完成度の高いフリーのディストリビューションです。サーバ用途に好んで使っているユーザーも多く実習でもこれを使います。
Ubuntu
デスクトップが特徴的な人気のあるディストリビューションです。XによるGUI環境での利用を前提とし、印象的なデスクトップ画像の他、フォントもオリジナルのものが利用されています。
Debian GNU/Linux
Debian Projectによって開発が進められているディストリビューションで、根強い人気があります。インストールはやや難しいですが、いくつかあるLinuxディストリビューションの中でも「軽い」ということに定評があります。
4.仮想マシンの実行環境
今回の演習では、仮想環境を使いWindows上にLinuxを展開します。Windowsからターミナル(端末)ソフトを使って、仮想ハードウエア上の仮想NICを経由してゲストOSのCentOSに接続し作業を行います。
以下の接続のイメージを確認してください。
5.Linuxの資格試験
Linuxのスキルを証明するためのワールドライセンスとして日本でも実施されている資格があります。カナダに本部を持つLPIの日本支部が行うLinux Essentials認定試験です。これを取得することによりLinuxの基本的な操作方法などを習得した証明とすることができます。
LPIの試験には他にもLPIC-1,LPIC-2,LPIC-3などがあり段階的に資格認定のレベルを上げることが可能です。
Linux Professional Institute Linux Essentialsについて