2016.08.08Linux+PHPを学んで日程調整アプリを作ろう①

今回使用するテキスト


http://www.slideshare.net/AinaHara/linuxphp

Linuxのインストール


Linux をインストールする方法は大きく分けて三通りあります。
• コンピュータのハードディスクをすべて削除して Linux をインストールする
• 既存の OS(Operating System) を残したまま、ハードディスクの空き部分に Linux をインストール する(デュアル・ブート)
• 既存の OS 上に仮想マシンを作って、そこに Linux をインストールする
コンピュータの性能を活かすためには最初の方法が最も有効ですが、今使っている環境をすべて壊して しまうことが出来ない場合には二番目の方法が使えます。ただし、この方法ではハードディスクに十分な 余裕があることが前提です。そこで、ここでは三番目の「仮想マシン」を使った方法について説明します。

1.1イメージ・ファイル


まず、インストールする Linux のイメージ・ファイルを取得します。このイメージ・ファイルは ISO フォーマットとして提供されるのが普通です。ここでは Ubuntu(ウブントゥ)と呼ばれる Linux をイン ストールしますが、下記サイトから最新バージョン(16.04 LTS)を入手します。

https://www.ubuntulinux.jp/News/ubuntu1604-ja-remix

スクリーンショット 2016-08-07 0.42.48
図 1.1: Ubuntu のダウンロード


このページにはミラーサイトがいくつか表示されると思います。近いと思われるところにある ISO イ メージを選択してダウンロードします。ファイル名は次のものです。

ubuntu-ja-16.04-desktop-amd64.iso

1.2仮想マシン


MacまたはWindows上でLinuxを稼働させるために、仮想マシン用のソフトウェアを導入します。仮想マシン用のソフトウェアは有償のものや無償のものを含めて様々ありますが、ここではOracle社のVirtualBoxを使います。
まず、下記サイトから自分の環境に応じたインストーラ―をダウンロードします。
それぞれの環境でダウンロードしたモジュールをダブルクリックすればインストールできます。

https://www.virtualbox.org/wiki/Downloads

スクリーンショット 2016-08-07 0.51.42
図 1.2: VirtualBox

1.2.1 仮想マシンの作成


仮想マシンとは文字通り仮想的なコンピュータです。
VirtualBoxを起動すると図1.3のVirtualBoxマネージャーの画面が出ます。この画面イメージではすでに仮想マシンがひとつ作られていますが、初めて起動したとき、左側の仮想マシンのリストは空になっています。

1.2.2 新規仮想マシンの作成


新しく仮想マシンを作成するためにメニューの「新規 (N)」ボタンを押します。

スクリーンショット 2016-08-07 0.59.38
図 1.3: VirtualBox マネージャー


デフォルトではOSのタイプが“Windows”になっているかもしれませんが、ここではLinuxをインストールするので、表1.1のように設定します。

スクリーンショット 2016-08-07 1.23.53

名前は何でも構いません。ここでは Ubuntu のバージョン 16.04 を使うのでこのような名前にしまし た。タイプとバージョンはこの表のようにします。(図 1.4)

スクリーンショット 2016-08-07 1.25.29
図 1.4: 仮想マシンの作成

1.2.3 メモリとハードディスク


「次へ」を押すと「メモリーサイズ」や「ハードディスク」を設定する画面が現れます。ここでは新し く作る仮想マシンの仕様を決めることになります。
表 1.2 の情報を参考に、最後に「仮想ハードディスクの作成」画面が現れるまで進めて下さい。(図 1.5)

スクリーンショット 2016-08-07 1.25.39

なお、ハードディスクのサイズを 20GB としていますが、このサイズが固定的にとられるわけではあ りませんので心配ありません。
ここで「作成」ボタンを押すと新たに仮想マシンが作られ、VirtualBox マネージャー画面に「ub1604」 が現れます。(図 1.6)

スクリーンショット 2016-08-07 1.28.13
図 1.5: 仮想ハードディスクの作成


スクリーンショット 2016-08-07 1.28.58
図 1.6: 新仮想マシン

1.3 Linux のインストール


作成した仮想マシン上に Linux をインストールします。
仮想マシンが新しい 1 台のコンピュータだと思ってくれれば結構です。
さて、Virtual Box マネージャーの画面で、今作った仮想マシン ub1604 が選択されている状態で「起動」を押します。
これはいわば、新しく作った仮想マシンに電源を入れた状態です。
この状態では仮想マシンのハードディスクは空ですので起動できません。そこで起動用のディスクを設定することになります。(図 1.7)

スクリーンショット 2016-08-07 1.30.02
図 1.7: 起動ハードディスクを選択


1.1 でダウンロードした ubuntu の ISO イメージファイルを指定します(右端のアイコンをクリックす ると、ファイル選択画面になります)。
この状態で「起動」を押します。
これは、実際の PC であれば、DVD ドライブに Linux のインストール用 DVD を入れて、電源(また はリセット)ボタンを押したところです。
これでインストールが始まるはずですが、もしも図 1.8 の画面から進まないようであれば、画面のメ ニューにある「仮想マシン」-「リセット」を押して下さい。

スクリーンショット 2016-08-07 1.30.47
図 1.8: 再起動中


インストールが始まると最初に図 1.9 の画面になります。

スクリーンショット 2016-08-07 1.30.57
図 1.9: ようこそ


「日本語」を選択して、右側の「Ubuntu をインストール」を押します。

Ubuntu のインストール中にアップデートをダウンロードするにチェックを入れておきます。(図 1.10)

スクリーンショット 2016-08-07 1.32.23
図 1.10: Ubuntu のインストール準備


「インストールの種類」の画面(図 1.11)では「ディスクを削除して Ubuntu をインストール」を選択します。

スクリーンショット 2016-08-07 1.33.15
図 1.11: インストールの種類


ここまででインストールの準備が出来ました。
「インストール」を押します。
「ディスクに変更を書き込みますか?」の画面になります。(図 1.12)

スクリーンショット 2016-08-07 1.33.48
図 1.12: ディスクへの書き込み


ここで「続ける」を押すと、ハードディスク(仮想の)のパーティション・テーブルに書き込みを行い ます。本物の PC であれば、これで元のハードディスクの内容が削除されます。

「続ける」を押すと、ここからファイルのコピーなど、本来の意味でのインストールが始まります。
インストールの進行と並行して、いくつか設定内容の問い合わせがあるので順に設定します。
住んでいる場所(図 1.13)やキーボード(図 1.14)について確認されますので設定して下さい。ほとん どの場合はデフォルトのままで大丈夫のはずです。

スクリーンショット 2016-08-07 1.34.28
図 1.13: 場所


スクリーンショット 2016-08-07 1.35.03
図 1.14: キーボードレイアウト


次が最後の入力です。(図 1.15)

スクリーンショット 2016-08-07 1.35.46
図 1.15: あなたの情報を入力してください


ここで入力するものの意味を表 1.3 に示します。

スクリーンショット 2016-08-07 1.36.18

ここで入力するもので特に肝心なのは「ユーザー名」と「パスワード」です。パスワードは同じものを 2 回入力しますが忘れないようにして下さい。

スクリーンショット 2016-08-07 1.38.12
図 1.16: ユーザ情報


これらの入力が終われば、あとはインストールが終わるのを待つばかりです。

しばらくすると再起動を促すメッセージが表示されます。(図 1.17)

スクリーンショット 2016-08-07 1.38.43
図 1.17: 再起動


ここでも再起動せず、図 1.18 のような画面で固まってしまうことがあるかもしれませんが、その場合は「仮想マシン」-「リセット」をして下さい。

スクリーンショット 2016-08-07 1.39.25
図 1.18: リセット

1.4 ログイン


これで再起動して最初のログイン画面になります。(図 1.19)

スクリーンショット 2016-08-07 1.44.43
図 1.19: ログイン


ログイン画面には登録されているユーザの名前のリストが出ますが、今は先ほど登録したみなさんの名前だけがあるはずです。パスワードを入力すればログインできます。(図 1.20)

スクリーンショット 2016-08-07 1.44.51
図 1.20: 初期画面


ここでソフトウェアの更新がある旨のお知らせが出ることがありますが(図 1.21)、今は無視して下さい。

スクリーンショット 2016-08-07 1.54.14
図 1.21: ソフトウェアの更新


ところで、この Linux のウインドウの枠を「最大化」してみて下さい。

スクリーンショット 2016-08-07 1.54.21
図 1.22: ウインドウの最大化


図 1.22 のように、Linux の画面部分のサイズは変わらないでしょう。これについても後ほど直します。

1.5 初めての Linux


左側にあるメニューの一番上をクリックして検索します。(図 1.23)

スクリーンショット 2016-08-07 1.55.19
図 1.23: アプリケーション検索


“terminal” と入力してください。関連するアプリケーションが表示されます。
「端末」をクリックすると端末エミュレータが起動します。(図 1.24)

スクリーンショット 2016-08-07 1.56.02
図 1.24: 端末の起動


端末が起動された状態を図 1.25 に示します。

スクリーンショット 2016-08-07 1.56.11
図 1.25: 端末


ところで、端末を起動するために毎回「検索」からするのは面倒です。そこで、左側のバー(これをラ ンチャーと呼びます)にアイコンを貼り付けましょう。
メニューにある「端末」のアイコンを右クリック-「Launcher に登録」を選びます。(図 1.26)

スクリーンショット 2016-08-07 1.57.11
図 1.26: ランチャー登録

1.6 画面サイズの自動調整


先に進む前に、画面サイズをどうにかしましょう。
この設定のためにはさきほどの端末を使います。 まず、画面のウインドウメニューの「デバイス」-「Guest Additions CD イメージの挿入...」を選択します。
すると、「実行しますか?」というような確認メッセージが出ますが(図 1.27)、ここでは「キャンセル」します。

スクリーンショット 2016-08-07 1.57.34
図 1.27: 自動実行


なお、ランチャーには CD のイメージが表示されています。(図 1.28)

スクリーンショット 2016-08-07 1.58.06
図 1.28: CD イメージ


続いて、端末で以下のコマンドを実行します(ここではコマンドプロンプトを略して$ と表します)。こ こで はみなさんのログイン名です。それぞれ、自分のログイン ID に置き換えて入力してく ださい。

$ cd /media//VBOXADDITIONS_5.0.20_106931/

著者の場合は次のようなコマンドになります。(図 1.29)

$ cd /media/sudoh/VBOXADDITIONS_5.0.20_106931/

スクリーンショット 2016-08-07 1.58.33
図 1.29: cd


続けて次のコマンドを入力します。コマンドは sudo です 1。
パスワードの問い合わせが出るので自分のパスワードを入力します。このとき、入力しても何も表示さ れずカーソルが動きもしませんが、心配しないで下さい。(図 1.30)

$ sudo ./VBoxLinuxAdditions.run
[sudo] sudoh のパスワード:

スクリーンショット 2016-08-07 1.58.39
図 1.30: VBoxAdditions(1)


このコマンドで Linux のカーネルを再構築します。(図 1.31)

スクリーンショット 2016-08-07 2.00.21
図 1.31: VBoxAdditions(2)


環境によっては時間がかかりますが、やがて終了します。(図 1.32)

スクリーンショット 2016-08-07 2.01.21
図 1.32: VBoxAdditions(3)


終了したら次のコマンドを入力してください。

$ cd
$ eject

eject を実行すると、左端のランチャにあった CD のイメージがなくなることがわかると思います。 これで画面サイズの調整は終わりです。(実際には画面サイズの調整だけでなくホストコンピュータとのフォルダの共有機能などが有効になっています。)

一度再起動しましょう。
右上端のアイコンをクリックするとプルダウンメニューが出ますので(図 1.33)「シャットダウン」を 選びます。

スクリーンショット 2016-08-07 2.01.41
図 1.33: 再起動 (1)


スクリーンショット 2016-08-07 2.01.47
図 1.34: 再起動 (2)


シャットダウン・メニューの左側の「再起動」を選択します。(図 1.34) 再起動してログインウインドウになりますが、ここで、画面の枠の「最大化」を押してみましょう。 Linux 画面がウインドウサイズに追随することがわかるでしょう。(図 1.35)

スクリーンショット 2016-08-07 2.01.55
図 1.35: ウインドウサイズの自動調整

2.1 ログイン


ログインはすでにご存じですね。ログイン画面でユーザを選んでパスワードを入力します。

2.2 デスクトップ:Gmone と Unity


Ubuntu の標準のデスクトップ環境は Gnome と呼ばれるものです。また、ウインドウを制御するウインドウ・マネージャは Unity と呼ばれますが、画面の左側に「ランチャー」があるのが特徴です。
このあたりは特に重要なわけではありませんが、名前だけ覚えておいて下さい。

2.3 GUI を使う


デスクトップを使ってみましょう。
デスクトップ上でマウスを右クリックするとポップアップ・メニューが出ます。ここから背景を変更し てみて下さい。
また、デスクトップのランチャーとその上にあるアイコンについては、これまでにも若干触れました が、これについて説明します。すでに「システム設定」はご存知でしょうけれど、マウスをアイコンの上 に持っていくと、説明が出ます。(図 2.1)

スクリーンショット 2016-08-07 2.18.33
図 2.1: システム設定アイコン


全体はデフォルトでは(図 2.2)のようになっています。

スクリーンショット 2016-08-07 2.19.03
図 2.2: デフォルト・ランチャー・アイコン


このデフォルトのアイコンは以下のプログラムを表しています。

スクリーンショット 2016-08-07 2.19.31

これらのアイコンをクリックすればそのアプリケーションが起動します。
とりあえず、これらを少し使ってみましょう。

2.4 Firefox


ご存知 Firefox です。

スクリーンショット 2016-08-07 2.20.00
図 2.3: Firefox アイコン


これが Ubuntu では標準のウェブ・ブラウザです。 なお、chrome の Linux 版をインストールすることもできます。 使い勝手を少し試してみて下さい。

2.5 LibreOffice


次に重要なのが Office Suite である LibreOffice です。
Microsoft Office はご存知だと思いますが、機能的にはそれと同等の Open Source Software(OSS) です。 ランチャーにはデフォルトで三つの LibreOffice ツールが表示されています。

図 2.4: LibreOffice アイコン
図 2.4: LibreOffice アイコン


それぞれ MS Office の Word, Excel そして PowerPoint に相当します。
LibreOffice のファイル形式は MS Office のそれとは直接の互換性はありませんが、MS Office のファ イル(.doc, .docx, .xls, .xlsx, .ppt, .pptx)を LibreOffice で開いて読み書きすることが出来ます(その 後、LibreOffice の形式で保存することもできます)。

2.6 デスクトップのカスタマイズ


ランチャーに「システム設定」のアイコンがあります。

スクリーンショット 2016-08-07 2.20.54
図 2.5: システム設定アイコン


これをクリックするとシステム設定画面が出ます。(図 2.6)

スクリーンショット 2016-08-07 2.21.23
図 2.6: システム設定


アイコンと説明文字があるのでどのようなことができるかはだいたいわかると思いますが、最初に以下
の項目をカスタマイズしておきましょう。
• 画面の明るさとロック いわゆるスクリーンセーバーです。一定時間、キー操作等をしないと画面がロックされます。ロッ クの解除が面倒な場合は、この機能をオフにします。
• 外観 画面の背景イメージなどを変更します。ランチャーのアイコンの大きさやウインドウ・マネージャ のテーマを変更することが出来ます。
デスクトップの操作はマウスを使うのが基本です。このようなユーザ・インタフェースを Graphical User Interface(GUI) と呼びますが、Linux を使いこなすためには Character User Interface(CUI) を使いこな さなければなりません。

2.7 ウインドウとメニュー


各ウインドウにはタイトルバーにメニューがありますが、通常は表示されていません。(図 2.7)

スクリーンショット 2016-08-07 2.23.08
図 2.7: ウインドウ・メニュー


デフォルト設定では、マウスがデスクトップのメニューバーの上に移動したときに、現在アクティブになっているウインドウのメニューがメニューバー上に現れます。(図 2.8) Mac と同様ですね。

スクリーンショット 2016-08-07 2.24.30
図 2.8: メニューバー上のメニュー


設定によっては、各ウインドウのタイトルバーに出すこともできます。(図 2.9) この設定を変更するためには「システム管理」の「外観」-「挙動」を選びます。
デフォルトでは図 2.10 のようになっていますが、これを図 2.11 のようにすれば、ウインドウのタイトルバーの中にメニューが出ます。

スクリーンショット 2016-08-07 2.25.21
図 2.9: ウインドウ上のメニュー


スクリーンショット 2016-08-07 2.25.28
図 2.10: システム設定 (1)


スクリーンショット 2016-08-07 2.25.56
図 2.11: システム設定 (2)

2.8 ランチャーをウインドウ下部へ移す


デフォルトではランチャーは画面の左側にありますが、これを画面の下部に移せます。(図 2.12) ターミナルで次のコマンドを叩きます。

$ gsettings set com.canonical.Unity.Launcher launcher-position Bottom

スクリーンショット 2016-08-07 2.26.39
図 2.12: ランチャーの位置を変更


元に戻すのであれば次のコマンドを打ちます。
$ gsettings reset com.canonical.Unity.Launcher launcher-position

第3章 コマンドを使う前に


3.1 ターミナル


「ターミナル」とは正しくはターミナル・エミュレータ(Terminal Emulator)と呼ばれます。ひとつ のウインドウで「端末」(Terminal)を模倣・模擬(エミュレーション;Emulation)しているので、こう 呼ばれます。以後は、ターミナル・エミュレータを略してターミナルと呼びます。
ターミナルはあくまで端末の画面をソフトウェアで模倣しているだけなので、端末への入出力を制御す るプログラムが必要です。Linux でターミナルを起動すると、その入出力を制御する bash と呼ばれるプ ログラムが動きます。このようなプログラムをコマンド・インタプリタ(Command Interpreter)と呼びます。

3.2 プロンプト


ターミナルを開くと最初の行に次のようなものが現れます。

username@hostname:~$

表示されている文字列は人によって若干異なりますが、~ や $ があるのは同じだと思います。この文字
列の中身の意味は次の通りです。

スクリーンショット 2016-08-08 1.10.58

この文字列は bash が出力します。bash はこれを出すことで「コマンドを入力していいですよ」と、コ マンド入力を待っていることを表します。

なお、筆者の場合は以下のようなプロンプトになります。
sudoh@ub1604:~$

この状態で、例えば ls コマンドを実行する際の画面イメージは次のようになります。
sudoh@ub1604:~$ ls

しかしこれでは説明が煩雑なので、プロンプトは $ だけで表します。つまり、画面イメージを次のよう
に表します。
$ ls

$ は「入力しない」ことに注意して下さい。

第 4 章 コマンド入門


いよいよ Linux コマンドを使います。
特に断らない限り、ターミナルを起動してその上でコマンド入力するものだと思って下さい。

4.1 最初のコマンド


基本的なコマンドを試してみます。
今は、どんなものが表示されるか少しだけ気を留めてくれれば結構です。
繰り返しますが、先頭の $ は入力しないで下さい。

$ cd
$ pwd
$ mkdir work123
$ ls
$ cd work123
$ pwd
$ touch abc
$ ls -l
$ rm abc
$ ls
$ cd ..
$ rmdir work123

最後から 2 番目は cd のあとにスペースをひとつとドット(.)を二つ入力します。 これらは基本的なコマンドばかりですがそれぞれの意味を簡単に説明します。(表 4.1)

スクリーンショット 2016-08-08 1.14.00

4.2 別のコマンド


もう一度、さきほどやったのと同じようなことをしてみます。
以下のコマンドを順に叩いて下さい。

$ cd
$ pwd
$ mkdir work123
$ ls
$ ls work123
$ touch work123/abc
$ ls -l work123
$ rm work123/abc
$ ls work123
$ rmdir work123

最初の cd はパラメータ無しで実行していますが、これは自分のホームディレクトリに戻るためです。 念のために実行しました。
さて、初めの例では cd を 3 回実行しています。それだけを取り出すと次のコマンドでした。

$ cd
$ cd work123
(中略)
$ cd ..

これらのうちあとの 2 回が今回はありません。つまり作業ディレクトリを変更せずに先の例と同じこと を実行したのです。作業ディレクトリを変更しなくても同じことができるのです!
このように作業ディレクトリを変えずに何でもできます。ただし、コマンドのパラメータが少し違って いることにお気づきでしょう。

上の二回のコマンドの実行を、対応させてみます。

スクリーンショット 2016-08-08 1.15.41

違いについて考えて下さい。

解説 上の二つの実行例では、どちらも同じことをしています。何をしたかというと、以下の内容です。
1. ホームディレクトリの下に work123 という名前のディレクトリを作る 2. そのディレクトリに abc という名前の空のファイルを作る
3. 作ったファイル abc を削除する
4. 作ったディレクトリ work123 を削除する

単にディレクトリとファイルを作って、それを削除しただけです。 問題はファイルの指定の仕方です。
ファイルを作るとき、最初の例では touch abc としましたが、後の例では touch work123/abc とし
ました。
もうおわかりですね。
最初の例では touch の前に cd work123 で作業ディレクトリを変更していますが、後の例ではそれを
していません。そのため、ファイル abc を touch や rm のパラメータとして指定するために、後の例で は touck work123/abc、rm work123/abc としたわけです。

4.3 パスのこと


4.3.1 ディレクトリ・ツリー


ディレクトリが階層的に連なり、ファイルはいずれかのディレクトリに含まれます。この階層構造は木 (tree)を逆さまにしたような形をしています。木の根(root)に相当する部分をルート・ディレクトリ (root directory)と呼び、/(スラッシュ)で表します。
Linux のルート・ディレクトリの直下にあるディレクトリのうち、代表的なものを示します。(図 4.1)

スクリーンショット 2016-08-08 1.18.04

4.3.2 相対パス


最初のコマンド実行の二つの例でファイルの指定のしかたが異なりましたが(abc と work123/abc)こ のような指定の仕方をどちらも「相対パス」と呼びます。「相対」というのは「現在の作業ディレクトリ からの相対的な位置にある」ものを指定するためです。「パス」という言い方については後で説明します。
最初の例ではファイル名だけを指定しましたが、これは「現在の作業ディレクトリにある」ファイルだ からファイル名だけで十分でした。2 番目の例では現在の作業ディレクトリは自分のホームディレクトリ で、ファイルがあるディレクトリではありません。ですので「今いる場所」(=ホームディレクトリ)か ら見れば work123 ディレクトリの下にある abc を指定するために work123/abc としたわけです。

4.3.3 絶対パス


もうひとつの指定の仕方が「絶対パス」です。「フルパス」とも言います。
例えば、次のコマンドを実行して下さい。
$ ls -l /usr/local

このコマンドの引数にある /usr/local がフルパスです。フルパスはスラッシュ(/)から始まります。
この / はルート・ディレクトリと呼ばれるもので、ファイル・システムの最上位を表します。すべての ファイルとディレクトリはこのルート・ディレクトリからの階層構造のどこかに位置しています。そして あるファイルを特定するためにはルート・ディレクトリからの道順(= path; パス)を指定すればよい、 ということです。
備考 先頭にスラッシュ(/)を付けないものはすべて相対パスです。また、特殊な相対パス指定の方法 として ..(ドット二個)があります。これはコマンドの例で cd .. のように使いました。これは現在の ディレクトリのひとつ上のディレクトリを表します。
結局、相対パスを指定する際には現在の作業ディレクトリが重要になるわけです。それで、ときどき pwd コマンドを打って現在の作業ディレクトリを確認するのです。そして、もうお分かりと思いますが、 すべてをフルパス指定で済ませるのであれば作業ディレクトリを変える必要はありません。ただし、その 場合はコマンドは長くなります。そして、入力する文字列が長くなれば間違える可能性(=危険性)も高まります。

4.4 コマンドを実行する、ということ


前のセクションの最後のコマンドをもう一度見てみます。
$ ls -l /usr/local
これを次のように入力したらどうなるでしょう。
$ /bin/ls -l /usr/local
前と同じ結果になったと思います。
では次のコマンドを打ってみて下さい。
$ which ls
4.4. コマンドを実行する、ということ 41 どのように表示されたでしょうか?
大部分の方は次のように表示されたと思います。
/bin/ls

これは次のことを表しています。
bash のコマンド入力で単に ls と入力すると、実行されるのは/bin/ls である。
つまり which コマンドは、ls コマンドを入力した際に起動されるプログラム・モジュール(ファイル) のフルパスを表示します。そして、この説明の中にすでに表れていますが、もうひとつの重要なことをも 意味しています。

bash が「コマンドを実行する」とは、そのプログラム・モジュール(ファイル)を探して、そ れを起動することである。

「コマンドの実行」と書いてきましたが、それはまさに実行モジュール(=プログラム)を起動するこ となのです 1。従って、bash に伝えるべきはコマンドの名前(=ファイル名)ではなく、そのファイルの 「パス」なのです。ただし、基本的なコマンドについては bash がその置かれている場所を知っているの
で自動的に探してくれるわけです。(ここにも少し嘘があります。詳細は次のセクションで説明します。)

Linux の場合 ls は「標準」のコマンドで /bin/ に置かれるのが普通です。
では、ls とだけ入力すると、なぜ /bin/ls が起動されるのでしょう?

4.4.1 PATH のこと


ここで次のコマンドを叩いてみてください。
$ echo $PATH
何が表示されたでしょうか。

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:...(省略)
これは環境変数の PATH というものに設定されている内容です。コロン(:)で区切っていくつかのディ レクトリを並べたものを設定します。
この PATH がどのように働くかというと...
bash は入力された「コマンド」の実行ファイルを探すときに、この PATH に設定されているディレクトリを探す
ということなのです。
PATH には複数のディレクトリが指定されていますが、bash はコマンドを探す際にそれらのディレクト
リを順に探します。そして最初にみつかったファイルを実行します。PATH には /bin も含まれています。 従って、コマンドとして単に ls と指定すると /bin/ls が実行されるのです。(もしも、ですが、PATH に設定されている他のディレクトリにも ls があったとするとどうなるでしょう?
それは、PATH のディレクトリの並びの中で、「最初」にみつかった ls が起動されます。なので、PATH の中のディレクトリの順番はとても重要です。)

第5章 vi入門


CUI でコマンドを駆使する際には、これに加えていろいろな設定を「手作業で」変更することがありま す。「手作業」と呼ぶのは、その設定を行うための GUI がない、という意味です。つまり「設定ファイル を編集」する必要があります。上で

PATH を書き換えることをしましたが、これもそのうちのひとつです。

設定ファイルは、多くの場合単純なテキスト・ファイルです 1。 テキスト・ファイルはテキスト・エディタで編集します。

Linux の標準的なテキスト・エディタは vi です。拡張版は vim と呼ばれますが総称して vi と呼びま
す。フリーソフトのエディタなどもありますが vi が基本です。

やはり本をちゃんと読む必要があります [3]。

実は、vi ほど取っ付きにくいエディタはありません。最初は「なんて使いにくいんだ!」と腹が立って くるかもしれません。しかしながら、慣れてしまうと「なんと使いやすいんだ!」と思うはずです。しば らくは練習しないと使いこなせませんが、Linux 操作や Linux 上でシステム開発するためには必須です。

上でも書きましたが、vi の全貌を知るためには本を丸ごと読むほかありません。そして、これも bash と同様、それだけの学習をするだけの価値があります。ただ、今は本を読んでいるだけの暇がありません ので、それは皆さんの宿題としてここでは、もうすこし取っ付きやすい学習方法を説明します。

5.1 vimtutor


vi の拡張版が vim ですが、それを学習するためのプログラムがあります。vimtutor です。
しかし、vimtutor はデフォルトではインストールされていません。 そこで、次のコマンドを実行します 2。
$ sudo apt install vim

これで vimtutor 関連のモジュールがインストールされました。
$ vimtutor
でvimtutor が開きます。
なお、ターミナルのウインドウは大きくした方が使いやすいでしょう。(図 5.1)

スクリーンショット 2016-08-08 1.25.49
図 5.1: vimtutor


vimtutor は実際には vi が起動されて、チュートリアル用のファイルを自分用に開くだけのことです。 つまり、見ているファイルを vi で開いたところです。あとはここに書かれている「レッスン」を順にこ なしていくだけです。指示されている通りにカーソルを移動し、また、指定されている通りにテキストを 編集して下さい。

初めはカーソルを移動するためにキーボードの矢印キーを使っても構いませんが、レッスン 1.1 でカー ソルの移動を学んだ後は、そこで学んだキーを使ってカーソルを移動させて下さい。

よろしいでしょうか、ここからはキーボードの矢印キーの使用は禁止です!

5.2 vi の終了方法


vi は途中でおかしくなると終了させることすらできなくなることがあります。そんな場合は ESC キーを何度か押したあと

:q!
を入力してください。

5.3 vi の極意


vimtutor で練習すれば vi の「フルスクリーン・エディタ」としての主な機能は使えるようになると 思います。しか~し、vimtutor で学べるのは vi の持つ機能の半分にすぎません。
残りの半分とは何か?
それは ex コマンドと呼ばれるものです。
vi は、実はテキスト・エディタ本体ではなく、そのユーザインタフェース部分だけを制御する部分に
すぎません。テキスト・エディタ本体こそ ex なのです。 画面上でカーソルを自由に移動させ、目的の箇所で文字と追加・削除・変更などとするために vi のコ
マンドがあります。これを学ぶのが vimtutor でした。残りの半分である ex コマンドは、画面上で操作 するというよりは、対象のデータ(バッファと呼ばれます)を行の集まりと見て、行単位で処理するため のコマンドです。
実は ex コマンドはすでに少しだけ使っています。vi を終了させる際に :q! と打ったと思います。こ の ’:’(コロン)で始めるコマンドが ex コマンドなのです。

5.4 ex コマンドの神髄


ex コマンドの一端を示します。
:%s/abc/xyz/g
このコマンドは、編集中のテキストの中のすべての abc を xyz に置き換えます。
同様に
:g/abc/d
は abc を含んでいる行をすべて削除します。
このようにテキスト全体に対して同じようなことをしたい場合に ex コマンドは実に強力です。
この節には「ex コマンドの神髄」と名付けましたが、まだこれだけではその真価をお伝えしたことに はなりません。
:%s/^abc/xyz/
は最初の例と少し違うだけですが、単に abc を置き換えるのではなく、「行の先頭にある abc」だけを xyz に置き換えます。’ˆ’ が「行の先頭」を表します。
このように、特別な意味を持つ文字と組み合わせることで様々な文字の「クラス」を表すことができる のです。このような文字列のパターンの表現方法を「正規表現」(Regular Expression)と呼びます。RE あるいは R.E. と略す場合もあります。
Linux では正規表現が使えるのは vi の中だけではありません。bash のコマンドでも引数でファイルを 指定する際などに使います。
ここまで来ると短期間のトレーニングでは伝えきれない範囲に足を踏み入れることになります。ぜひ本 を通読して vi の神髄に触れていただきたいと思います。

5.5 vi のカーソル移動練習


vi のカーソル移動は h, j, k, l で行いますが、これに慣れるためにゲームで練習しましょう。 まず、プログラムをインストールします。
$ sudo apt install bsdgames
インストールが終わったら、次のコマンドを実行します。
$ worm
worm を起動すると図 5.2 の画面になります。

スクリーンショット 2016-08-08 1.35.21
図 5.2: worm(1)


worm と名付けれらているように ooooooo@ は虫です。同時に画面には数字がひとつ現れます。h, j, k, l のどれかのキーを押すとスタートしますが、虫は少しずつ進んでいきます。
ゲームの仕方は簡単です。
• vi のカーソル操作(h,j,k,l)で虫を上下左右に動かします
• 移動するのは頭の部分(@)です
• この頭の部分が数字のところを通過すればその数字の値が得点に加えられます • 虫の長さも次第に長くなります
• 頭が壁や自分の体にぶつかるとゲームオーバーです
ゲームを進めると虫が長くなっていくとともに、ターゲットの数字の現れる位置が微妙なところになる ので、どんどん難しくなっていきます。(図 5.3)

スクリーンショット 2016-08-08 1.35.42
図 5.3: worm(2)


これで vi のカーソル操作はしっかり身につくでしょう。

第6章 bash, プロへの道


bash でコマンドを実行することは実施しました。 ここから先へ進むためには何を学ばねばならないでしょうか? 大きく分けると二つの面があります。多数の Linux コマンドと、それらを起動するための bash そのも
のです。

6.1 Linux コマンド


数多くの Linux のコマンドがありますが、これらはひとつひとつ学ぶ必要があります。しかしながら、すべてのコマンドをマスターする必要は全くありません。特定の作業のためだけに使うコマンドも多数ありますし、一生使わないものもあるかもしれません。ですからコマンドだけを順番に覚えようとしてもあまり意味がないでしょう。
そうではなく、Linuxが持つ基本機能に関連づけて実際に使ってみるのが良いでしょう。

6.1.1 man


最も重要なコマンドのひとつに man があります。これはマニュアルを参照するためのコマンドです。詳 しい使い方を知るためには次のコマンドを実行して下さい。
$ man man
つまり、man コマンドで man のマニュアルを読むということです。
さて、Linux コマンドには多くのコマンドがありますが、それらを使う場面が若干異なります。もちろ ん、どのコマンドをいつどような場面で使っても構いませんが、目的により若干の違いがあります。
以下では四つの場面に分けて良く使われるコマンドを列挙します。 • 通常の作業
• 開発
• システム管理 • その他
なお、どちらかといえばシステム管理用ではあるけれども、日常的にも使うようなものは通常に入れま した。また、「その他」は普段使うことはめったにありませんが、何かのときには必要になるというよう なものです。
各コマンドに簡単な説明だけを書きます。詳しくは man コマンドで調べて下さい。

6.1.2 通常の作業用


• cat:ファイルの中身を表示する
• chmod:ファイルのパーミッション(アクセス権)を変更する
• chown:ファイルのオーナー(持ち主)を変更する
• cp:ファイルをコピーする
• diff:ファイルの差分を表示する
• echo:引数の文字列をそのまま表示する
• grep:ファイルから正規表現で指定された文字列に一致する行を表示する • head:ファイルの先頭部分を表示する
• kill:プロセスにシグナルを送る(プロセスを強制終了させる)
• more:ファイルをページ単位で表示する
• less:more と同様であるがより強力
• ln:ファイルのリンク(ソフト/ハード)を作成する
• ls:ファイルリストを表示する
• mv:ファイルを移動する
• nkf:日本語文字コードを変換する
• rm:ファイルを削除する
• sort:ファイルをソート(並び替え)する
• ssh:安全なリモート接続を行う
• tail:ファイルの末尾を表示する
• tar:テープアーカイブ形式に圧縮/解凍をする
• uname:システム名を表示する
• unzip:zip ファイルを解凍する
• who:システムの利用者を表示する
• zip:zip 圧縮する

6.1.3 開発用


• gcc:GCC コンパイラ
• make:ビルドツール

6.1.4 システム管理用


• at:指定時刻にコマンドを実行する
• apt:パッケージ管理ツール
• fdisk:ディスクを初期化する
• fsck:ファイルシステムのチェック/修復を行う
• iptables:IP パケットの制御を行う
• mount:ハードディスクをファイルシステムにマウントする
• netstat:ネットワークの状態を見る
• nice:プロセスの優先度を変更する(下げる)
• nslookup:DNS を調べる
• ping:ICMP の echo コマンドを送信してネットワーク上のマシン/機器からの応答を見る • ps:プロセスの状態を見る
• shutdown:システムをシャットダウンする
• vmstat:仮想記憶の状態を見る

6.1.5 その他


• dd:ハードウェアにたいしてデータストリームの書き込み/読み出しを行う

6.2 bash


bash はコマンド入力とその実行をサポートするための様々な機能を持っています。その一端を示します。
1. 以前に実行したコマンドを再実行する
2. 入力行の編集をする
3. 同じような操作を複数の対象(例えばファイル)に対して行う場合、ひとつの記述で複数の処理を繰り返して実行する
4. 複数のコマンドをつないで実行する(パイプライン処理)
5. 一連のコマンドをスクリプト(プログラム)として実行する

しかしながら、これらの詳細を説明するためには本一冊分を要します [2]。ここではキー操作を楽にす る最初の二つの機能について説明します。

6.2.1 コマンドの再実行


以前に実行したコマンドを次のコマンドで確認することが出来ます。
$ history
このコマンドを実行すると次ような表示がされます(ただし人によって表示内容は異なります)

スクリーンショット 2016-08-08 1.43.50

これまでに実行したコマンドが表示されます。左端にある数字はコマンドの番号です。
この番号を元に、次のようにすると過去に実行したコマンドを再度実行することができます。
$ !
つまり、! にコマンドの番号だけを入力します。例えば
$ !272
のようにします。すると
$ ls -l
を実行します。
なお、直前に実行したコマンドをもう一度実行したい場合には
$ !!
と、! を二つ入力します。

6.2.2 入力行の編集


コマンドを入力する際、コマンドや引数の文字を間違えることがあります。これは仕方のないことです が、問題はそれをいかに素早く修正できるか、です。1 行の入力の中のことなので出来ることは限られて います。
普通であれば Backspace で直前の文字を消して改めて入力します。しかし、間違えてすぐに気づかず、 さらに文字を入力してから気がつくこともあるでしょう。そのような場合、Backspace だけで修正しよう とすれば、正しい文字まで消してしまうことになります。
実は、カーソルキー(矢印キー)でカーソルを左右に移動させて、修正したい文字の上にカーソルを 持ってゆき、そこで Delete キーで削除することが出来ます。
しかし、矢印キーを使うのは効率が良くなりません。矢印キーは PC によって位置が違うほか、通常の キーとは離れたところにあるため、なかなかタッチタイピングが出来ないためです。
bash ではこれに対応するために特殊なキーの組み合わせでカーソルキーを自由に移動させることが出 来るほか、文字の削除が出来ます。そのキーの組み合わせを表 6.1 に示します。

スクリーンショット 2016-08-08 1.46.07

いずれもコントロールキーと一緒に押します。(このキー操作は、vi よりも強力なツールである emacs とほぼ同じです。)

第7章 Web サーバの構築


ここでは Web サーバの apache をソースコードからインストールします。
Linux でプログラムをインストールするためには、パッケージ管理ツールを使うのが一般的でありまた 容易です 1。しかしながら、実際の現場では最新のモジュールが必要になることがあります。その場合に は、ソースコードを取得してそれから構築しなければなりません。
ここでは apache の構築のために必要な簡単な説明をした上で、コマンドを列挙します。コマンドは、 必要なものだけ sudo で実行します。つまり、本当に管理者権限が必要なところだけ sudo で実行し、必要のないところは通常のコマンドとして実行します。全てを管理者として実行する例をネットなどで見か けますが、これは Linux 操作としてはなはだよろしくありません。sudo コマンドの使用は極力減らすことを心がけて下さい。

7.1 概要


7.1.1 必要モジュール


Web サーバとして最も大きなシェアを持つ apache を導入するためには、いくつか必要なモジュール (ライブラリ)があります。それは次のものです。
• apr:apache portable runtime
• apr-util:apr のためのツール類
• pcre:Perl Compatible Regular Expressions
• apache2:apache 本体(現在はバージョンが 2.X のものを使います)

7.1.2 ソースコードからの構築


ソースコードからモジュール(実行プログラムやライブラリ)を構築するための手順は大雑把に言えば以下のような流れで実行します。
1. ソースコードを取得する
2. ソースコードは圧縮していあるのでそれを解凍する
3. 解凍してできたディレクトリで以下の作業を行う
4. 作業環境に併せてビルド用の構成を行う(通常、configure というスクリプトを実行する)
5. make を実行する
6. インストールする。ここだけ特権ユーザで実行する
最後のところだけ特権ユーザで実行します。つまり、ここだけ sudo で実行するかまたは su で root ユーザになって実行します。

7.2 apr


$ wget http://ftp.riken.jp/net/apache//apr/apr-1.5.2.tar.bz2
$ tar jxvf apr-1.5.2.tar.bz2
$ cd apr-1.5.2
$ ./configure --prefix=/usr/local/apr
$ make
$ sudo make install

7.3 apr-util


$ wget http://ftp.riken.jp/net/apache//apr/apr-util-1.5.4.tar.bz2
$ tar jxvf apr-util-1.5.4.tar.bz2
$ cd apr-util-1.5.4
$ ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
$ make
$ sudo make install

7.4 pcre


$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.bz2
$ tar jxvf pcre-8.37.tar.bz2
$ cd pcre-8.37
$ ./configure --prefix=/usr/local/pcre
$ make
$ sudo make install

7.5 apache


$ wget http://ftp.riken.jp/net/apache//httpd/httpd-2.4.20.tar.bz2
$ tar jxvf httpd-2.4.20.tar.bz2
$ cd httpd-2.4.20
$ ./configure --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
--with-pcre=/usr/local/pcre
$ make
$ sudo make install

7.6 起動


apache を起動するために次のコマンドを叩きます。
$ sudo /usr/local/apache2/bin/apachectl start
警告が出るかもしれません。

スクリーンショット 2016-08-08 1.51.11

これはドメイン名が定義されていない、という警告ですので、今のところ無視しておきます。
Apache が動作していることを確認するためにウェブ・ブラウザで http://localhost にアクセスします。
図 7.1 のような画面が出れば正常に動いています。

スクリーンショット 2016-08-08 1.54.48
図 7.1: Web サーバ (1)


図 7.1 はデフォルトの HTML で味気ないので、自分用の HTML を書いてみましょう。もちろん vi を使って次のファイルを作成・編集します。

/usr/local/apache2/bin/htdocs/hello.html
ただし、このディレクトリは root ユーザでないとアクセスできない設定になっているので vi を起動するときは sudo を使います。
$ sudo vi /usr/local/apache2/bin/htdocs/hello.html
この hello.html の中身はとりあえずリスト 7.1 のようにします。

スクリーンショット 2016-08-08 1.55.13

スクリーンショット 2016-08-08 1.55.22

HTML に詳しい方はもっと内容を追加して頂いても構いません。
ファイルを保存して再度ウェブ・ブラウザで html://localhost/hello.html にアクセスします。図 7.2 のような画面が出たでしょうか。

スクリーンショット 2016-08-08 1.55.37
図 7.2: Web サーバ (2)


apache を停止するためには次のコマンドを入力します。

$ sudo /usr/local/apache2/bin/apachectl stop

 

第 8 章 あとがきにかえて—本当に学ぶべきもの


ここでは Linux で CUI を使うための基礎を学びました。これでコマンドを実行し vi でファイルを編 集することが出来るようになりました。
しかし、これで Linux を使いこなせるわけではありません。基本的なコマンドの簡単な説明をしましたが、その説明だけでは意味がわからないと思います。「ファイルをコピーする」というのはコマンドを使わずにもできますし日常的にやっていることなのでイメージはつかめるでしょう。では mv は cp + rm と同等でしょうか? 機能的には同じに見えるかもしれませんが、全く違います。
また、たとえば iptables を考えてみましょう。説明には「IP パケットの制御を行う」とありますが、 IP パケットの意味が分からなければこのコマンドを使いこなすことは出来ません。なんとなくネットワークの制御をすることはわかるかもしれませんが、このコマンドの使い方を理解するためには、ネットワークのメカニズムを理解していなければならないのです。

結局、コマンドというのはそれが対象とするもの—コンピュータそのものであったり、ネットワークのメカニズムであったり、様々なもの—についての理解がなければ何の役にも立たないということなのです。
このトレーニングでは、繰り返しますが、本当に入門のための入門しかしません。どうかさらなる Linux の奥地に自分の足で踏み込んでいただきたいと思います。

最後の章では、所謂「基盤系のエンジニア」がどんな作業をしなければならないかの一端をお見せしま した。ここに書かれていることをそのまま実行すれば apache をインストールすることは出来ます。しかしながら、翌日には対象モジュールのバージョンが変わっていて、この通りのコマンドではできなくなっているかもしれません。日々、進化し続けています。

エンジニアはいつでもトラブルにぶつかりながら、自らの手でそれを乗り越えて行くのです。

========

おつかれさまでした。元となっているテキストには最後に付録がついています。ぜひチェックしてみてください!

テキストは②に続きます。

この記事を書いた人

原 亜依南

TRUNKのインターン生 お茶の水女子大学2年 カスタマーサクセス、採用、ライターなどなど担当は多岐にわたる。 ゆるゆると、でも信念をもちながら、色々やっています。