第10回 UNIXによるソフト開発1

UNIXとは何か知っているだろうか?UNIXはWindowsと同じ,コンピュータのOS(Operating System)の一種で,企業や銀行の基幹システムや,インターネットの基幹ネットワークを担う非常に重要なものの一つである.ここではUNIXとは何かを知り,基本的な使い方を学ぶ.

本講義で身につけた知識が役立つ科目等: コンピュータ機械工学,メカトロニクス実習,ゼミ及び卒業研究,大学院での研究等.

10.1 UNIX/Linuxとは

UNIXは元々,アメリカの電話会社AT&Tのベル研究所で開発され,その後カリフォルニア大学バークレイ校*やスタンフォード大学*など,複数の場所に渡って開発が続けられた.インターネットの普及の前から,大学での先進のネットワーク開発研究の基盤となるOSとして用いられたため,当初よりネットワーク機能に優れていた.

その後のインターネットの爆発的な普及は,UNIXによって支えられた.この様に,当初から大学による,ネットワークを含むコンピュータ環境の研究開発に用いられたことから,UNIXは,大学の計算機環境のスタンダードになった.一般にWindowsが普及した今となってもその傾向は変わっていない.

Linuxは,当時フィンランドの大学生だったLinus Torvaldsが,大学の研究活動で作ったUNIXによく似たOSである*.その後,プログラムのソースコードをインターネットで公開したことから世界中のソフトウェア開発者との共同開発が始まり,オープンソース開発法という新たなソフトウェア開発手法の流れを作った.

*カリフォルニア大学バークレイ校で開発されたUNIXはBSDといい,複数あるUNIXのバージョンの一つとなっている.
*スタンフォード大学は,「『そこ』にスタンフォード大学があったからこそ,シリコンバレーが出来た」と言っても良い.スタンフォード大学の卒業生等が作り,現在では基幹ネットワーク用コンピュータ最大手となったサンマイクロシステムズ(SUN Microsystems)のSUNとは,Stanford Unix Networkのことである.
*Linusが作ったのは,カーネルという主にプロセスの管理を行う部分であり,後にUNIXで用いられているファイルシステムやコマンド群を組み合わせて現在の形になった.

10.2 Linuxの起動方法

明治大学生田校舎の情報科学センターの環境では,多くの場所でLinuxを起動して利用することが可能である.ただし,建物によって起動方法が異なるので注意が必要である.

中央校舎では

中央校舎の環境では,CPUの仮想化ソフトウェア(VmWare)により,Windowsを起動したままLinuxを起動して使用することができる.多人数で同時に起動すると,起動時間が長くかかる可能性があるため,早めに起動しておくと良い.

A棟では

A棟のコンピュータ環境では,LinuxはWindowsとのデュアルブートとなっており,中央校舎とは違ってWindowsと共にLinuxを動かすことはできない.Linuxを起動するためには,一端Windowsをシャットダウンし,再度コンピュータを起動し直す必要がある.

10.3 コマンドライン環境

UNIX/Linux環境でもWindowsの様なウィンドウ環境はあるが,基本はやはり,コマンドラインである.Windowsにもコマンドプロンプトというものがあるが,これはUNIXをまねたものである.コマンドラインを使うには,主要となるコマンドは覚えなくてはならない.以下に,いくつかコマンドの例を挙げる.

UNIX/Linux コマンドの意味.使用方法 Dos/Windows
pwd 現在のディレクトリ*位置(current directoryという)を知る. CD(引数無し)
ls カレントディレクトリのファイルリストを表示する.ls -a, ls -l, ls -Fなど多くのスイッチがある. DIR
cd カレントディレクトリの変更(change directory).通常,引数を要する.cd /home など.
*コマンド引数無しではホームディレクトリに移動するので注意.
CD
. カレントディレクトリ .
.. 上位ディレクトリ.cd ..とすると,一つ上のディレクトリに移動する. ..
/ ルートディレクトリ.ディレクトリツリーの最上位を示す.また,ディレクトリの区切りにも使用する. \(バックスラッシュ)または円マーク
cp ファイルコピー COPY
mv ファイルの移動.ファイル名変更にも使用する. 存在しない.ファイル名変更はREN
ps 実行されているプロセスのリストを表示 存在しない
> リダイレクト.コマンドの出力をファイルなどに出力できる.
例: ls > test.txt
>
>> 追加.既にあるファイルの末尾に追加できる.
例: ls -al >> test.txt
>>
| パイプ.コマンドの出力を他のコマンドへ流し込める.
例: ls -al | less
|
more 一行に収まりきらないリストを一行ずつ表示する.スペースキーでスクロール
例: ls -al | more
MORE
less moreの拡張版.自在にスクロールできる.スクロールコマンドは,viのカーソル移動コマンドに準拠する. なし
【注6/24】 赤字は訂正項目

* ディレクトリとは,WindowsやMacOSでのフォルダに相当する.UNIX/Linuxのファイルシステムには,Windowsと違ってドライブ(A:やC:など)という概念がなく,すべてルートディレクトリ(root directory)からなる一つの木構造を成している.

10.4 エディタによるファイル編集

プログラムを開発するにはエディタを用いてテキストファイルを編集しなくてはならない.ウィンドウ環境であれば,大抵何らかのテキストファイルエディタがついていることが多いが,これらは環境毎に異なっているし,またウィンドウ環境でなくては使用できない.

従って,通常,UNIX環境では以下のいずれかのエディタが用いられることが多い.

vi ... あらゆる環境で使用できるエディタの基本.テキスト入力モードと,コマンドモード,さらにexモードの3つのモードを持つ点で他のエディタと異なる.あらゆるオペレーションがキーボードのホームポジションから手を放さずに行えるため,このエディタによるテキスト編集の効率は非常に高い.

emacs ... 高機能エディタ.編集するファイルの内容に合わせて自在にカスタマイズできる上,メールの読み書きが出来たり,エディタの中から様々なコマンドが使用できるため,一種の「環境」として使用する人も多い.

ここではviの使用方法を簡単に説明する.

viの起動

ファイルを作成したいディレクトリをカレントにして,

# vi test.cpp

と入力する.ここで#はプロンプトを示す.すると,

# vi test.cpp
~	
~
~
~
~
~
~
~
~
"test.cpp" [New File]

などと表示される.これでviが起動されて,test.cppの編集を行う状態になっている.また,この時点でのモードは,コマンドモードである.

文字の入力は,

i

を入力することで可能になる(文字入力モードへの移行).ここでは,以下を入力してみよう.途中で間違えても,かまわずにとりあえず入力してみる.

#include <stdio.h>

int main(void)
{
    printf("Hello, world\n")
}

一通りの入力が終わったら,必ず[ESC](エスケープキー)を入力する.カーソル位置は,キーボードの矢印キーでも動かせるが,通常はh, j, k, lを用いる.間違えた部分の訂正をするには様々な方法がある.以下の表を参考にせよ.

【ヒント】 以下の表をみて,cwを用いてprintfをputsに変更してみよ.

【ヒント】 putsの行末に;(セミコロン)を付けるにはどうすれば良いか?

モード間移行系のコマンド群
[ESC] (エスケープキーを押す)ファイル編集モードからコマンドモードに移行する.これは以下のすべてのコマンドに適用される.
: コマンドモードで:(コロン)を入力するとexモードに移行する.exモードでは,ターミナルの最下行に:(コロン)が表示される.このモードはより複雑な編集コマンドを入力する場合に使用する.

文字列入力系のコマンド群
[ESC] (エスケープキーを押す)ファイル編集モードからコマンドモードに移行する.これは以下のすべてのコマンドに適用される.
i カーソルの前に文字列の挿入(insert)
a カーソルの後に文字列を入力(append)
o(オー) カーソルの下の行に文字列を入力
O(オー) カーソルの上の行に文字列を入力
I カーソル行の先頭から文字列を挿入
A カーソル行の最後に文字列をつけ加える
x カーソル位置の一文字を削除
dd カーソル行を削除
[n]d カーソル行以下n行削除([n]は数値)
r[c] カーソル上の文字をcにリライト([c]はキーボード上の任意の文字)
cw カーソルがある場所の単語を書き換え
c$ カーソル行の行末までを書き換え

カーソル移動系のコマンド群
h カーソルを左に移動
j カーソルを下に移動
k カーソルを上に移動
l(エル) カーソルを右に移動
0(ゼロ) カーソルを行の先頭に移動
$ カーソルを行の終端に移動
H ページの先頭行へジャンプ
L ページの最後行へジャンプ
0(ゼロ) カーソルを行の先頭に移動
$ カーソルを行の終端に移動

ファイル管理系のコマンド群
ZZ 保存終了
q! 保存しないで強制終了
w [file] ファイルの保存.[file]はファイル名.付けなくても良い.
w! [file] ファイルの強制保存
u undo.何か間違いをしたらこれで戻れる.

コピー・ペースト系のコマンド群
yy カーソル行をコピー
p カーソルの下にペースト
P カーソルの上にペースト
[n]yk カーソルの上n行をコピー
[n]yj カーソルの下n行をコピー
. 直前の操作を繰り返す

検索・置換系のコマンド群
/[s] 検索.[s]は検索したい文字列.カギ括弧はいらない
n 下方検索
N 上方検索
:s/[s1]/[s2] s1からs2へ置換
:s/[s1]/[s2]g 行末までのすべての文字を置換
:1,$s/[s1]/[s2]g 文書全体のすべての文字を置換
【注6/21】 表中の赤字は訂正項目 

課題

  1. 今使用しているコンピュータのルート/にはどの様なファイルやディレクトリがあるか? 詳細なリストをファイル"dirlist_YCNN.txt"に保存せよ.ここでY:年,C:組,NN:番号である.
  2. vi エディタを用いて以下のファイルを入力してみよ.ファイル名は"myprog_YCNN.cpp"とする.

上記のファイルをメールに添付して提出せよ.

提出期限は来週月曜午後5時までとする.


Further Readings - Linux

Linuxはインターネット等で無料で手に入り,そこにはプログラム開発環境がすべて含まれているので,興味があれば試してみることを勧める.無料で手に入るLinuxは無数にあり,Red Hat系のFedora Core,米国で人気のDebian GNU/Linux,SUSE,国産のVineなど.

Further Readings - vi

viについてはLinux.or.jpの【このページ】を参考にすると良い.

【追加情報6/23】 Cygwin

UNIXが無くても,Linuxが無くても,WindowsがあればUNIXの勉強&プログラム開発が出来る! Windowsのアプリケーションとして,擬似的なUNIX環境を作り出す,Cygwinというプログラム開発環境があります.Linuxをインストールするのは難しいけれど,でもちょっと試してみたい向きにはCygwinがお勧めです.