unix世界への手引書shiba/jyugyou/s1prog/2007/...4-1 コンパイラ:g77とgcc_____ 14 4-2...
TRANSCRIPT
UNIX世界への手引書
vi,ngエディタ&Cコンパイラ編
平成19年4月改訂第4版
芝治也
目次
第1章 コンピュータシステムの概要 _________________________________ 1
1-1 コンピュータシステムについて ___________________________________ 1
1-2 ソース・プログラムの処理 ______________________________________ 2
1-3 ファイル ____________________________________________________ 2
1-4 ディレクトリ ________________________________________________ 3
1-5 エディタ ____________________________________________________ 3
第2章 UNIXのコマンド_________________________________________ 4
2-1 UNIXシステムの利用方法と作業の終了方法 _______________________ 42-1-1 UNIXシステムの利用方法 ______________________________________________________ 42-1-2 UNIXの作業の終了方法 ________________________________________________________ 52-1-3 まず始めにパスワードの変更 ______________________________________________________ 52-1-4 パスワードの決まりと注意 ________________________________________________________ 6
2-2 UNIXのコマンド ___________________________________________ 62-2-1 情報を知るためのコマンド ________________________________________________________ 62-2-2 作成・削除に関する命令 __________________________________________________________ 72-2-3 移動に関する命令 ________________________________________________________________ 82-2-4 印刷に関する命令 ________________________________________________________________ 8
第3章 viエディタの使い方 _______________________________________ 9
3-1 viエディタの起動のさせ方 ____________________________________ 9
3-2 viエディタの編集コマンド ____________________________________ 93-2-1 カーソル移動と文字の検索コマンド ________________________________________________ 93-2-2 文字入力コマンド _______________________________________________________________ 103-2-3 文字削除コマンド _______________________________________________________________ 103-2-4 文字,行の置換(文字の上書き訂正) _____________________________________________ 103-2-5 行単位のコピー・貼り付け _______________________________________________________ 103-2-6特殊なコマンド _________________________________________________________________ 11
3-3 ファイル操作とviの終了 _____________________________________ 11
3-4 ngエディタのコマンドリファレンス _____________________________ 123-4-1 ng 起動,カーソル移動と文字の検索コマンド ______________________________________ 123-4-2範囲(リージョン)指定と削除 ___________________________________________________ 133-4-3ファイル操作とngの終了 _______________________________________________________ 133-4-4特別な命令 _____________________________________________________________________ 13
第4章 FORTRAN や Cソースのコンパイルと実行____________________ 14
4-1 コンパイラ:g77とgcc ___________________________________ 14
4-2 プログラムの実行とリダイレクション機能の利用 ____________________ 154-2-1プログラムの実行と停止 _________________________________________________________ 154-2-2 リダイレクション機能の活用 _____________________________________________________ 16
特別付録 困った時にみるページ___________________________________ 17
後書き _________________________________________________________ 18
改訂第4版によせて ______________________________________________ 18
1
第1章 コンピュータシステムの概要
1-1 コンピュータシステムについて
コンピュータシステムは,機械的な目にみえる部分(ハードウエア)と目にみえない部分
(ソフトウエア)からできています.ハードウエアは図1のように中央処理装置( CPU),主記憶装置(メインメモリ),補助記憶装置(フロッピーディスクやハードディスク等),
入力装置,出力装置によって構成されています.
入力装置にはキーボードやマウス等があり,出力装置には,ディスプレイ,プリンタ,プ
ロッタなどがあります.
CPU
メモリ
HD,FD
出力装置
コンソール
入力装置
周辺装置(デバイス)
図1コンピュータのハードウエア
ソフトウエアは,基本プログラムである OS(Operating System :オーエス)とサービス・プログラム,応用プログラム(アプリケーション・プログラム)に分類できる.
OS はコンピュータの実行処理を制御するためのプログラムで,ユーザ(利用者)が作成する必要はありません. CPUと周辺装置との情報のやり取りのルールは OSによって規定されています.一般的なパソコン用 OS には WindowsXP や WindowsVista などが使用されていますが,ワークステーション(Work Station: WS)や大型汎用機では UNIX(ユニックス)が多く使用されています.
→UNIXはOSなのだ!!
UNIX 互換の機能を実現したフリーソフトが Linux (リナックス)です。
サービスプログラムはユーザの様々な要望に応えるためのプログラムで,システムとして
提供されるものです.これは標準化されたユーティリティプログラムと,コンパイラやイン
タプリタ(いずれもテキストファイルを機械語に翻訳するプログラム)などの言語プログラ
ムに分類されます.
アプリケーションプログラムとは,ワープロソフトなどのようにソフトウエアメーカーが
製作して販売している物もありますが,ユーザが計算処理,情報処理をするために作成した
2
ものを指して言います.我々がアプリケーションプログラムを作成するためには
FORTRAN,BASIC,C などのプログラム言語を用います.もちろん市販されているアプリケーションプログラムを利用することも出来ます.アプリケーションプログラムは略してア
プリとかソフトと呼ばれることもあります.
→“言語プログラム”と”プログラム言語”の違いに注意!!
1-2ソース・プログラムの処理
ユーザがプログラム言語で記述したソース・プログラム(原始プログラム)は,そのまま
では単なる文字のら列でしかありません.したがってコンピユータに実行させることはでき
ません.ソース・プログラムは,コンパイラによってコンパイル(翻訳)されて,コン
ピュータが理解できる言語(機械語)になります.翻訳されたプログラムはオブジェクト・
モジュールと呼ばれます.
このオブジェクト・モジュールをローダを使って関数ライブラリなど(これらもオブジェ
クト・モジュールであり,システムで提供されている)とリンク(結合編集)して,目的を
実行できるプログラムを作成すことになります.こうしてできたプログラムをロード・モ
ジュールとか実行形式ファイルと言います.
ユーティリティ 言語プログラムテキストエディタ アプリケーション
OS
コンパイラ
ロ|ダ
図2OS上のプログラムと実行形式ファイルの作成手順
ファイルの作成や削除ファイルのコピーパスワードの設定etc.
オブジェクトファイル
ソースファイル
コンパイル
リ
ン
ク
実行形式ファイル
1-3 ファイル
補助記憶装置に記憶されているひとかたまりの情報のことをファイルと言います.これに
は,テキスト(文字)を格納しているプログラムのソースファイルやプログラムで利用する
データファイルなどがあります.他にも文字の形式ではない,オブジェクト・モジュールや
ロード・モジュールなどのバイナリ形式ファイルもあります.
3
1-4ディレクトリ
ファイルが多くなると目的のファイルを探すのだけでも大変です.そこでディレクトリ1と
いうファイルを入れる小部屋を作って管理する仕組みが作られています.ディレクトリの中
に更にディレクトリを作ることが出来るので,幾段かの階層構造になっているのが普通です.
ディレクトリの区切りを表示するのには¥や/が使われます.例えば kochi というディレクトリの中に nankokuというディレクトリがあって, nankokuの中には kosenというファイルがあるとすると kosen を正確に表示すると
/ kochi / nankoku / kosenと書き表すことになります.
1-5 エディタ
テキストファイルを作成したり編集したりするためのアプリケーションソフトウエアをテ
キスト・エディタと言います.単にエディタとも呼ぶこともあります.一太郎などのワード
プロセッシング(ワープロ)ソフトもテキストエディタの一種です.
高知高専の情報処理の授業は, UNIX や Linuxを OSとした本校の学内ネットワーク上ですべての作業を行います.エディタで書いたソースプログラムを gcc や g77 というコンパイラでコンパイルして実行形ファイルを作成して実行しながら, C 言語や FORTRAN 言語の文法とプログラム作成の考え方や技術を学習していきます.
次の章では, UNIXの基礎とよく使う命令について説明します.
1Directly: Apple 社の MacOS や Microsoft 社の Windows95 などではフォルダと呼んでいます.
4
第2章 UNIXのコマンド
UNIX は,コンピュータシステムを大人数で利用するのに適した OS です.したがって一人々の利用者を識別する必要があります.そのためにユーザ登録とパスワードの設定が義務
づけられています.君たちはすでにユーザ登録されているハズです.→ユーザ登録して利用
可能者になることを「ユーザ ID をもらう」なんて言い方もします.
2-1 UNIXシステムの利用方法と作業の終了方法
2-1-1 UNIXシステムの利用方法
学内の UNIX システムからなる学内 LAN(Local Area Network)は,年中無休で動き続けています.我々がこれを利用するためには,情報処理センターやパソコン室のコンピュータ
から学内 LAN に接続する必要があります.2パソコン本体の電源をオンにした後で,
Windows に logon します.接続プログラムが無事起動したら, Windowsのデスクトップ画面が現れます.ここで「center」と書かれたコンピュータの図案のアイコンをダブルクリックしてください.これにより UNIX OS で動いているコンピュータ「center」に接続することができます.
login:
と表示されるはずです.ここでユーザ名3を打ち込んでリターンキーを押します.(以後文字
を打ち込んでリターンキーを押すことを入力するということにします)
次に”Password:”4と表示されるのでパスワードを入力します.このとき画面上には打ち
込んだ文字は表示されないようになっているので慌てないように.
ユーザ名,パスワードが正しければ数行のメッセージが出た後に
ユーザ名[1]: ←プロンプトという.
が表示されて UNIXの命令待ち(コマンド入力)状態になります.これで UNIX の起動は完了です.この一連の操作をログインするといいます.ログインをしてネットワークに接続したコンピュータをネットワーク端末と呼びます.
Windows の logon と UNIX の login は,どちらも以下の二つの役目を持っています.
コンピュータの使用者を認証して登録されいない人が勝手に使えないようにする
2具体的な接続の方法は,各コンピュータの手引書などを参照して下さい.ここでは情報処理センターのWindows
パソコンを利用することを想定して話を進めます.
3君たちのユーザ名はクラスの入学期および出席番号で登録してあります.例えば平成19年度入学の電気工学科出
席番号1番の場合であれば「e4601」がユーザ名となります.UNIXでは大文字と小文字は区別するのでユーザ名は
全て小文字で入力すること
4端末が表示する文字は””でくくって表し,ユーザが打ち込む文字は「」で表すことにします
5
個人個人の作業環境やファイルを個々に使い分ける.他人のファイルを走査できない.
しかし, Windows の動いているコンピュータと, UNIX の動いているコンピュータは別の機体
なので,ユーザ名やパスワードは同じであるとは限りません.それぞれのコンピュータ用の
ユーザ名やパスワードは皆さん自身がしっかり管理しましょう.
2-1-2 UNIXの作業の終了方法
作業を終了する場合,いきなり端末の電源スイッチを切ったりしてはいけません.プロン
プトが表示されているときに「logout」もしくは「exit」と入力すると,しばらくして画面
がクリアされて center への接続が終了します.次に Windows を終了させます.その後画面表示が消えて電源が児童で切れます.これで全作業の終了です.
2-1-3 まず始めにパスワードの変更
最初にパスワードは,みんな同じ”student”になっているます.これでは他人が君のユー
ザ名でネットワークを利用してしまうばかりか,君の大事なファイルを改ざんしたり消して
しまう可能性があります.まずパスワードを変更しましょう.
UNIX におけるパスワード変更用の命令(コマンド)は「passwd」です.このコマンドを入力すると”Oldpassword:”と表示されるので,この後ろに現在のパスワード「student」
を入力します.ここでもやはり君がタイプした文字は,誰かに覗き見される可能性があので
一切表示されません.次に”Newpassword:”と表示されるので新しいパスワードを入力しま
す.すると確認の為に”Retypenewpassword:”と聞いてくるので新しいパスワードを再度
入力して下さい.これでプロンプトが表示されたらパスワードの変更は完了しています.
6
2-1-4 パスワードの決まりと注意
パスワードには英大文字,英小文字,数字,制御文字が使えます. 1234のように数字のみで設定することはできません.パスワードの文字数は,数字とほかの文字を混用するとき,
および制御文字を使用した場合には4文字以上,英大文字小文字を混用するときは5文字以
上,大文字か小文字のみで設定するときには6文字以上が必要です.5例えばRedDragonや
homecar など英単語を2つ並べるのがよく使われます.
誕生日など,簡単に見破られるようなパスワードにはしないように注意しましょう.また
毎回パスワードを変更するのも困りものです.(絶対忘れます(^^))
万が一自分のパスワードが分からなくなったときは,システムの管理者(スーパーユー
ザ)にお願いしてユーザ登録をやり直さなければいけませんから思いだしやすいものにしま
しょう.(こうなったら時間や手間がかかり大変です.)
2-2 UNIXのコマンド
本節でUNIXのコマンドを説明しますが,これらのコマンドを実行した結果異常が生じ
て暴走したとき,あるいは実行を途中で打ち切りたいときには,コントロールキー(CTR
L)を押しながらcを同時に押すことによってコマンドの中断が行えます.(これを CTRL+
cと表す)またこれ以外にも CTRL+d , CTRL+\を入力することでもコマンドの中断ができま
す.
UNIXでは英大文字,英小文字の区別があり,すべてのコマンドは英小文字で表されて
いますので注意してください.前述の「password」もそうでした.
2-2-1 情報を知るためのコマンド
pwd(print working directory)今自分が作業しているディレクトリ(ワーキングディレクトリ,カレントディレクトリとも
いう)を知ることができる.
pwd と入力する
ps(process status)どのようなプロセス(命令など)が動いているか確認することができる.
ps
5これらの文字数のルールは,使っているUNIXの種類によっては異なる場合があります
7
ls(list)ワーキングディレクトリ内のサブディレクトリやファイルを調べる.-lオプション(エルオ
プション)を付けることによって,より詳細な情報を知ることができる.
ls
ls-l
cat(catenate)テキストファイルの内容を画面に出力して見る.
catファイル名
more(more)長いファイルを1画面分ずつ表示する.同様の命令に less というのもある.
moreファイル名
操作方法:1画面分の先送りにはスペースキーを押す.リターンキーなら1行送りとなる.
また後戻りさせるにはb(back),途中で終わりたいときにはq(quit)を押す.
catfilename¦moreでも filename の内容を1画面分づつ表示できます.
man(manual)コマンドのマニュアル(説明書)を表示する.
manコマンド名
2-2-2 作成・削除に関する命令
rm(remove)指定したファイルを削除する.
rmファイル名
mkdir(make directory)ディレクトリを作る.
mkdirディレクトリ名
rmdir(remove directory)空のディレクトリを削除する.
rmdirディレクトリ名
8
cp(copy)ファイルの複製を作る.
cpファイル名1ファイル名2
ファイル名1のファイルをファイル名2にコピーする.
2-2-3 移動に関する命令
cd(change directory)今いるディレクトリから他のディレクトリに移動する.移動先を指定しなければホームディ
レクトリに移動する.移動先を..にすれば一つ上位のディレクトリに移動する.
cd移動先
cd..
mv(move)ファイル名の変更,ファイルの移動を行う.
mvファイル名1[パス名]ファイル名2
動作:ファイル1の内容をファイル2にコピーしてからファイル1を削除する.
2-2-4 印刷に関する命令
lpr(Line Printer)ワークステーションに接続されているプリンターでテキストファイルを印刷する.
lpr ファイル名
UNIXには数多くのコマンドが存在するし,オプションを付けることによって様々な機
能を選択することができる.ここには必要最低限なコマンドだけを抜粋しているので,より
詳しい使い方を知りたい人はmanコマンドや参考書6を頼りに自己学習してください.
6UNIX関係の本は多くあるが,三上市蔵著”SunユーザのためのやさしいUNIX”(オーム社)などは
特にお勧めしたい.本稿はほとんどこの本に依って書いている.これ以外では川原稔著“whatisUNIX”
(SOFTBANKS)が実践的で良い.
9
第3章 viエディタの使い方
viエディタはコマンドモードと文字入力モードの2つのモードを持っています.文字や
行の削除,コピー,カーソル移動,ファイルからの読み込みなど編集操作はコマンドモード
で行います.viエディタは起動時にコマンドモードになっているので,文字入力をするた
めには I や a を押して文字入力モードに切り替える必要があります.エスケープキー(ES
C)を押すことによっていつでもコマンドモードになります.
3-1 viエディタの起動のさせ方
vi編集したいファイル名
注意: FORTRAN 言語で書いたソースファイルのファイル名は,名前の最後に拡張子とし
て.fを, C 言語で書いたソースファイルのファイル名は.cを付ける決りになっています
ので必ず付けて下さい.例えば「test.f」や「test.c」
3-2 viエディタの編集コマンド
3-2-1 カーソル移動と文字の検索コマンド
命令 動作
←またはh 1文字左に移動
→またはl 1文字右へ移動
↑またはk 1行上へ移動
↓またはj 1行下へ移動
G ファイルの最後にジャンプ
nG n行目にジャンプ.1Gなら先頭行にジャンプする
/文字列 指定した文字列の先頭の文字へ移動(順方向検索)
?文字列 指定した文字列の先頭の文字へ移動(逆方向検索)
n 順方向に再検索
N 逆方向に再検索
注意:文末に向かうのが順方向,先頭に向かうのが逆方向
10
3-2-2 文字入力コマンド
a カーソルの右にテキストを追加
A カーソルがある行の末尾にテキストを追加
i カーソルの左にテキストを挿入
I カーソルがある行の先頭にテキストを挿入
3-2-3 文字削除コマンド
x カーソル位置の文字の削除
X カーソルの左側にある1文字を削除
dd カーソルのある行全体を削除
d$またはD カーソルのある位置から右側すべてを削除
d^ カーソルの左側すべてを削除
例えばカーソル位置から10行を削除したければ「10dd」とすればよい.
3-2-4 文字,行の置換(文字の上書き訂正)
r カーソル位置の1文字を置換
R カーソルのある位置から複数個の文字を上書き置換
s カーソルのある1文字を複数個の文字で置換
S カーソルのある行全体を置換
:s/古い文字列/新しい文字列/g
カーソル位置から文末に向かって,古い文字列で指定した文字列を検索して,見つかった
すべての古い文字列を新しい文字列に置き換える
3-2-5 行単位のコピー・貼り付け
yy カーソル行を記憶する
p カーソル行の下行へペースト
P カーソル行の上行へペースト
yy,あるいはdd(行削除命令)によって指定された行は,メモリ内にいったん記憶され
ます.それを呼びだして文書中に貼り付ける(挿入する)ことをペーストといいます.行単
位のコピーはyyで記憶してからコピーしたい位置までカーソルを移動しpかPでペースト
11
すればいいことになります.
3-2-6特殊なコマンド
u 最後に実行された操作を取り消す
U カーソルのある行に対して行ったすべての変更を取り消す
. 直前に実行したコマンドを繰り返して実行する
:setnu 行番号を表示する
:setnonu 行番号の表示を止める
3-3 ファイル操作とviの終了
:rfilename カーソル行の下に filename のファイルを読み込む
:w 編集中のファイルを保存する
:q viの終了
:q! セーブせずに強制終了
ZZ 変更されていたらファイルを保存して終了
:wfilenameとすればfilenameで指定した名前で保存できる.
:wqとすればセーブして終了できる.
:q!は間違った修正をしてしまって,編集を最初からやり直したいときに使うといい.
viエディタはプログラムサイズが小さく,動作も速いエディタであり,どのような
UNIXシステムにも必ず添付されています. ここでは基本的なコマンドを幾つかあげただけですが,いずれのコマンドも前に繰り返し
数を書くことで複数文字,複数行に対する操作ができるし,複数のコマンドを組み合わせて
使うことで複雑な操作を1回の命令で行わせることもできます.
例えばコマンドモードで「3yyp」とタイプすると,カーソル行以下の3行が記憶され,
続けてその下にその3行がペーストされる(3行のコピー貼り付け).
この直後に「.」を入力すると,直前の操作が繰り返されるので,さらに3行のコピーが行
われます.
viエディタ自体の解説本は少ないですが,ほとんどの「UNIX 解説本」にはviエディタの章がついているので,これらを参考にして下さい7.
7船元奨著”UNIXハンドブック”(ナツメ社)は特に詳しい
12
3-4 ngエディタのコマンドリファレンス
viエディタ以外に広く使われているエディタとしては Emacs8があります.これは
UNIX に標準で添付されているものではありませんが,プログラムの追加でメールやニュースが読めたり,エディタからコンパイラを呼び出したりと機能の強化ができる点で人気があ
ります. Emacs を日本語化したものがngエディタ,多国語対応にしたものが Mule です9.本校ではngエディタを使うことが出来るようになっています.
ngエディタはviエディタと違って常に文字入力モードになっています.一文字削除は
DEL(Delete)キーや BS(Back Space)キーを押すだけで出来ますが,それ以外の編集操作のためにはちょっと複雑なキーの組み合わせを覚える必要があります.ここではそのキーの組み
合わせの一覧を示します.動作の説明などはviエディタのものを参考にして下さい.
なお CTRL+は CTRL キーを押しながら+以後に書いたキーを押すことを意味します. ESC+も同
様です. CTRL+xCTRL+c は CTRL+x を押した直後に続けて CTRL+c を押すことを表しています.
3-4-1 ng起動,カーソル移動と文字の検索コマンド
命令 動作
ngファイル名 ngエディタを起動し,指定したファイルを編集する
←または CTRL+b 1文字左に移動
→または CTRL+n 1文字右へ移動
↑または CTRL+p 1行上へ移動
↓または CTRL+n 1行下へ移動
ESC+< ファイルの先頭にジャンプ
ESC+> ファイルの最後にジャンプ
ESC+xgoto-line この命令の後にジャンプしたい行の番号を打ち込む
CTRL+s文字列 指定した文字列の先頭の文字へ移動(順方向検索)
CTRL+r文字列 指定した文字列の先頭の文字へ移動(逆方向検索)
CTRL+s 順方向に再検索
CTRL+r 逆方向に再検索
ESC+%文字列 1 文字列 2 確認しながら文字列 1 を文字列 2 に置換する
ESC+xreplace-string文字列 1 文字列 2 確認なしで文字列 1 を文字列 2 に置換する
注意:文末に向かうのが順方向,先頭に向かうのが逆方向
8R.M.Stallman を中心としたGNU プロジェクトが作成配布しているフリーソフトです.
9ng エディタは吉田茂樹さんが,Muleは K.Handa らが Emacs を拡張して書いたものです.
13
3-4-2範囲(リージョン)指定と削除
CTRL+スペース
または CTRL+@
カーソル位置にマークをつける.その後カーソルを移動させて,この
マークとカーソルの間が指定範囲となる
CTRL+xCTRL+x カーソルの場所とマークの場所の間でジャンプ
CTRL+w マークとカーソルの間で指定した範囲を記憶して削除
ESC+w 指定した範囲を削除せず記憶だけする
CTRL+y 記憶してあった部分をカーソル位置に貼り付ける
CTRL+k カーソルのある位置から右側すべてを削除
3-4-3ファイル操作とngの終了
CTRL+xCTRL+f ファイルを開く
CTRL+xCTRL+s 編集中の文章をファイルに上書きセーブ
CTRL+xCTRL+w 編集中の文章を新しい名前でセーブ
CTRL+xCTRL+c ngの終了
3-4-4特別な命令
CTRL+g わけが分からなくなったときにコマンドを中止する
CTRL+_ 一回前の編集操作を取り消す
14
第4章 FORTRAN や Cソースのコンパイルと実行
4-1 コンパイラ:g77とgcc
UNIX 上のFORTRANコンパイラは製品版の「f77」とフリーソフトウエアの「g77」です.使い方はf77,g77ともに同じです.また, C 言語のコンパイラも有償の
「cc」とフリーの「gcc」があります.これらも基本的な使い方は f 77と同じです.
example.fを g 77でコンパイルする場合を例にとって説明します.
g 77example.f
と入力することで, example.fはコンパイルされ,続いてリンクされて実行形ファイル”a.
out”が作られます.つまり「g 77」はコンパイラとローダの両方を兼ねていることに
なります.(一般には,このようなものも単にコンパイラと呼んでいます)
オプション 機能
指定なし コンパイル,リンクを行って実行形a.outを生成する
-o コンパイルとリンクを行い,自分で指定した名前の実行形を生成する
-c ソースファイルをコンパイルしてオブジェクトファイルのみ生成する
「g 77」で生成される実行形ファイル(ロード・モジュール)の名前は,標準ではa.o
ut10になります.これはプログラムの動作チェックにはいいですが,後日見たときにどの
ソースファイルをコンパイルしたものか分からなくなるし,複数の実行形ファイルを利用し
たいときなどには不都合です.
こういった時に便利なのが「-o」(オーオプション)です.
g 77-o実行形ファイル名ソースファイル名
とすることで任意の名前の実効形ファイルを作ることができます.だからといってでたらめ
な名前を付けていては話になりません.ソースファイルがexample.fであれば実効形ファイ
ル名はexampleとか example.exe11とかにしておくのが無難でしょう.
10UNIXコマンドのlsで見たときに実行形ファイル名の後には*が付きます.*は実行形ファイルであることを示
しているだけでファイル名に*が含まれているわけではありません.
11exeはexecute:実行するの略.実効形ファイルを表す拡張子としてMS-DOSなどで良く使われています
15
大きなプログラムのコンパイルの時や,よく使う外部関数やサブルーチンなどをオブジェ
クトモジュールにして保管して再利用できるようにしておくと便利です.
つまりプログラミングの時よく使う部分をコンパイルしてキープしておけば,新しいプロ
グラムを作るときには必要な追加部分だけを書いてコンパイルして,これとキープしておい
た部品とをリンクさせれば効率的なプログラムの開発ができるようになります.
コンパイルだけをさせるためのオプションが「-c」(cオプション)で
g 77-cexample.f
とすると,その結果”example.o”というオブジェクトファイルができます.拡張子
のoはもちろんobjectのoでです.
複数のオブジェクトファイルをリンクして一つの実効形ファイルを作るには,例えば
g 77-oex.exeex1.oex2.oex3.o
とします.上の例では,既に作成している3つのオブジェクトファイル(ex1.o~3.
o)を結合してex.exeという名前の実効形ファイルが作られます.
4-2 プログラムの実行とリダイレクション機能の利用
4-2-1プログラムの実行と停止
実効形ファイルになったプログラムを実行させるためには, a.outなど,その実効形ファ
イル名を入力してやるだけです.簡単でしょ(^^)
ただしコンピュータウイルスなどの感染被害を避けるため,先頭に./を付けなければな
らないシステムが多くなっています.そのようなシステムの場合には,「./a.out」と入力し
て下さい.実行形プログラムが終了するまで,そのウインドウでは次の仕事はできません。
プログラムを途中で強制終了させるにはコントロールキーとcのキーを同時に押してくだ
さい.(これをCTLR+Cと書き表します)
裏技的に「実効ファイル名&」と入力することでバックグラウンドで動作させる事もでき
ます.(これをやるとプログラムに対してキーボードから値を入力する事ができなくなるの
で,やめておいた方がいいでしょう)
16
4-2-2 リダイレクション機能の活用
以上でコンパイル関係の説明を終わりますが,これで終わりでは締まらないのでちょっと
だけ高度な使い方をお教えします.それはリダイレクション機能の利用です.
UNIX の標準入力装置はキーボードで,標準出力装置はディスプレイになっています.だからFORTRAN言語でREAD(5,*),もしくは READ(*,*)を実行するとキーボードから値の読み込みを行い, WRITE 文ならディスプレイへの出力となります.同様に C 言語なら
scanf 命令がキーボードからの入力, printf 命令が画面への出力に対応します.
リダイレクションは標準入出力を他のディバイスに切り替える働きを持っています(ファ
イルも一種のディバイスとして取り扱われます).
< 標準入力リダイレクション
< 標準出力リダイレクション
<< 追加入力
>> 追加出力
例えばex1.exeがキーボードから値を入力して計算結果をディスプレイに表示するよ
うなプログラムであるときには
ex1.exe<file1
とやるとキーボードからの入力ではなくfile1の内容がex1.exeへの入力となり,そ
の計算結果だけがディスプレイに表示されます.
ex1.exe>file2
とやるとex1.exeの出力結果はディスプレイでなくfile2に書き込まれるようになり
ます.
ex1.exe<file1>file2
これももう分かりますね. file1を入力として結果の出力はfile2 に残るようになります.
「>」や「<」はファイルへの上書き入出力なので,実行するたびに以前の内容が消されてし
まいます.これでは不都合な場合には「>>」,「<<」を使えば追加入出力ができるので便利
です.自分でいろいろ試してみましょう.
17
特別付録 困った時にみるページ
UNIX のコマンドを実行した結果異常が生じて暴走したとき,あるいは途中で実行を打ち切りたいときには,コントロールキー(CTRL)を押しながらcを同時に押す(これを
CTRL+cと表す)ことでコマンドの中断が行えることは以前にも書きました.またこれ以外に
も CTRL+d , CTRL+\を入力することでもコマンドの中断ができました.
でもこの方法が有効なのは UNIX のシステムが正常に動作しているときだけです.端末そのものが暴走したり UNIX プロンプトが応答なくなったときには,このような方法以外で実行中のプロセスの終了や, logoutをする必要があります.
それには UNIX の世界に入る必要があることは言うまでもありません.まず暴走している端末以外から loginしてください.( Windows上の仮想 vtn端末などを使っている場合に
は,もう一つ仮想 vtnウインドウを開いてください.)そして UNIX プロンプトで「ps」を実行してください.これは現在あなたのユーザIDで実行中のプログラム(プロセス)を表
示してくれるコマンドです.
mercury:shiba[1]:ps
PIDTTSTATTIMECOMMAND
2513p0S0:00-csh(csh)
2532p0R0:00ps
2523p1S0:00-csh(csh)
ここで
PID プロセス番号
TT 端末番号
STAT そのプロセスの状態
TIME 動作時間
COMMAND プロセスの名前
になっています. COMMAND のì-csh(csh)îは, UNIX のプロンプトのこととでも思っていてください.つまりあなたのIDで2つの UNIXのシステムが作動していることになっています.そして TT の欄の p0 , p1 というのがシステムが動いている端末の端末番号を表しています.
再び COMMAND の欄に注目してください.ìpsîというのがありますね,そしてそれが動いている
端末はìp0îであることが分かります.つまり今まともに動作していてあなたが利用している端
末は p0 であり,暴走してしまった端末は p1 であることが分かったわけです.
では次に暴走しているプロセスを殺す方法について述べます.その為のコマンドはずばり
「kill-9プロセス番号」です.-9 は強制終了のためのオプションで,プロセス番号は
「ps」で調べた PID 番号をそのまま打ち込めばいいわけです.
上の例では,暴走しているのは TTp1であり,その PID は 2523 ですので「kill-9
18
2523」とやれば暴走しているプロセス( UNIXのプロンプト)を終了させることができます.TTp1で他のプロセス(例えば vi エディタ)を実行していて暴走した場合には,-cshよ
りもそちらのプロセスの方が原因ですから暴走した vi エディタの PID 番号を使って kill コ
マンドを実行してみてください.うまくいけば暴走していた端末の画面に UNIX プロンプトが返ってきて, p1 端末で続けて作業をすることができます.
また特にたちの悪いケースでは「ps」だけでは PID が分からない場合があります.そんな
時には「ps-aux¦grep君のユーザ ID」を実行してみてください.¦はパイプと呼ばれるも
ので NEC の PC-98 のキーボードではリターンキーの上の¥キーを shift とともに押すと入力
することができます.-auxはそのWSで実行中のすべてのプロセスを詳しく表示するための
オプションで,その情報量たるや膨大なものになります.「grepユーザ ID」は,そのなか
から自分のユーザ ID を含んだ行のみを抜き出す処理をやってくれます.(それでも量が多く
て流れてしまうときにはさらに¦moreを付け加えてください)これでほとんどの場合に対
処することができるはずです.
これでも暴走しているプロセスが分からないときには,管理者(スーパーユーザ)に相談
してみてください.
後書き
以上で本稿を終了しますが,これらはUNIX,viエディタの機能のホンの一部分であ
りそれらの素晴らしさを十分説明できたとは思えません.より詳しく学びたいと思っている
学生諸君は参考書など(本稿の中でも幾つか挙げたが)を見ながら学習してもらいたいと思
います.諸君の自己研鑚を期待しています.
改訂第4版によせて
本稿は平成6年から書き始めたものを少しずつ書き改めて,今のスタイルになったもので
す.この版からは FORTRAN 言語だけでなく C 言語も使うための手引書に変更しました.文章
中の誤りや,お気づきの点,改善のアイデアなどご指摘いいただければ幸いです.
平成19年4月20日筆者