電子計測
2002.6.3
最初の説明が終わったら出席確認です.パソコンの時計が合っているかを確認したら出席のメールを出してください.今 回の件名は
inst 6-3 attend s0040**
です.それ以外は前回と同じです.
なお,入力ミスがあると出席として認 められないことになりますので,慎重に行ってください.文 字はすべて1バイト文字 (半角英数字) です.途中に入るスペースは一度に一個だけと してください.スペースは全部で3個です.また,**の部分は自分の学生番号の下二桁 です.他学科の人はそれなりに修正して下さい.
1970年代にUNIXは発展が始まりましたが,その当初からネットワーク接続を意識 したOSであったため,ネットワークを利用することを前提に種々の機能が標準で 用意されてきました.LinuxもUNIX互換のシステムですので,基本的な部分はす べてUNIXと共通であり,快適なネットワーク環境を楽しめます.今回は,その代 表的な機能である「リモートログイン」を利用するTELNETについて実習します.
教科書p.80
ネットワークに接続されている他のUNIX端末にログインすることを「リモートロ グイン」と呼びます.これまでも時々使用した来ましたが,「リモート」とはネッ トワーク上のどこかのホストのことで,「ローカル」と言えば,自分が作業して いる端末のことです.リモートログインにはいくつかの手段がありますが,セキュ リティの関係で最近では使用されなくなったものもいくつかあります.今回紹介 するTELNETもログイン時のパスワードが「平文」のままネットワーク上を流れて しまうので,セキュリティ的に好ましくなく,最近では使用させるサーバが少な くなってきています.ここは,学科LANの中のネットワークなのでとりあえず TELNETを利用しますが,来年度からはより安全性の高いSSH (Secure SHell) を 使用する予定です.
使用するコマンドは教科書にあるように
$ telnet ホスト名もしくはホストアドレス
という形式になります.皆さんのホームディレクトリがあるサーバや教室内の端 末についてはIPアドレスを使用しなくてもホスト名で接続できるようになってい ます.サーバは sv003 という名前,端末は pc1** (**は01 から80までの番 号) という名 前で接続できます.試しに,近くの端末にログインしてみましょう.
なお,接続時に
Escape character is '^]'. |
というメッセージが表示されますが,これは,何かの事情で接続を中止したいと き,初めはローカルの処理を中止する Ctrl - c を試みますが,すで に処理がリモート側にわたっていて中断できないときに使用します.そこにあ るように,Ctrl - ] のキー操作により接続を中断できますが,そうす ると
telnet> |
というプロンプトに変ります.そこで,quit と入力すると処理を中止 できます.
TELNET接続したリモートホスト上でコマンドによるすべての操作が可能ですので, ネットワークサーバの保守管理にはこのようなリモートログインは重要です.
教科書p.81
TELNETによる接続ではターミナルの操作は可能ですが,独自にウィンドウを起動 するようなアプリケーション,すなわち,Xアプリケーションが利用できません. しかし,Xと言うシステム自体もクライアントサーバ方式ですので,設定を行え ば利用可能になります.ここではそれについて実習してみましょう.
通常,サーバというとネットワーク上のリモートホストを指しますが,Xサーバ は逆で,自分のローカルにあるのがXサーバです.そして,リモートホストにあ るアプリケーションがXクライアントになります.そして,ここでは,リモート にあるXクライアントをローカルにあるXサーバにより表示させることを行います. 手順は,まず,教科書にあるように,自分のローカルホストが他のホストからの X接続を許可するように
$ xhost +
とします.ここで,先ほどTELNET接続した端末からログアウトしていることを確 認してください.このコマンドはローカルで作業します.
その準備ができたら,どこかの端末にリモートログインします.そして,次のコ マンドにより表示させる画面が自分のローカルホストであることをリモートホス トに教えます.
$ export DISPLAY=pc1**:0.0
上の**のところは自分のホスト名 (pc1**) が入ります.その後,リモートに接 続しているターミナルでウィンドウを表示させるアプリケーションを起動すると, それが自分のローカルで起動することが確認できます.例えば,
$ kterm &
として,ウィンドウを表示させて,
$ /sbin/ifconfig
というホストのIPアドレスを表示させるコマンド (教科書p.84) を実行すると,ローカルとは違っ たIPアドレスを確認できます.また,より単純には,
$ hostname
でも良いでしょう.それと,その端末に現在ログインしているユーザを表示する
$ who
コマンドも試してみましょう.その端末を使用しているユーザが分かります.今,自分が作業しているのはリモートホストであ ることを実感してください.
ただし,教室の環境はどれも同じようなものなので,どこかに接続して自分のロー カルにないアプリケーションを起動する楽しみが余り実感できません.何とか試 してみたい人は,pc181 に接続して,「エミ」ちゃんという女の子のコスプレ時計である emiclock を起動してみてください.上と 同様にリモートに接続して
$ emiclock & として,自分の手元に表示できると成功です.
教科書p.82
TELNETによるリモート操作になれるとターミナルからのコマンド操作で行うFTP ファイル転送も出来るようになるでしょう.ただし,自信がない場合には,gFTP などのGUIを活用したツールを利用する方が確実です.
パソコンの処理能力が飛躍的に向上し,価格も安くなっているため,誰もが自分 のパソコンで高度な科学技術計算を行える時代になってきました.そうなる前は どうであったかというと,高価なワークステーションを一台用意して手元の安価 な端末でプログラムを作成したら計算自体はワークステーションで実行する,と いうことが良く行われていました.今でも,非常に複雑な計算などはスーパーコ ンピュータや高性能ワークステーションを利用して行われますが,そのような計 算能力の高いサーバを「計算サーバ」と言います.ここでは,その真似事をやっ てみましょう.
計算サービスを提供するスクリプトも前回と同じ原信一郎著,「Rubyプログラミ ング入門」(オーム社) から引用させていただきます.以下のスクリプトを作りましょう.
require "socket" port = ARGV.shift gsock = TCPServer.open(port) while true Thread.start(gsock.accept) do |sock| while line = sock.gets line.chop! sock.puts "#{line} = #{eval(line)}" if /^[\s()+\-*\/\d\.]+$/ =~ line end sock.close end end |
これが計算サーバの本体です.複数のクライアントから接続要求があってもスレッ ドにより順次処理を受け付ける構成となっています.
計算を依頼するクライアントは前回メール受信に用いたpop.rbがそのまま使えま す.サーバとクライアントで同じポートを使用するように指定しておけば,ク ライアントはホスト名を指定して接続するだけで計算が行えるようになります.
まず,自分のローカルでサーバプログラムを動かしましょう.ポートを指定する 必要があるので,ポート番号を指定して起動します.ポート番号は任意の番号で 良いのですが,Well-knownポートと呼ばれる若い番号の数字はやめておきましょ う.とりあえず,8800番台の番号を自分で決めて起動してみましょう.他の人と なるべく重ならないような番号にしましょう.次のコマンドにより行います.
$ ruby calcserv.rb 8888
上記のコマンドを実行するとターミナルはプロンプトが返ってこないで入力でき ない状態になります.実行していることを忘れてしまわないように,そのままに しておきましょう.
次に,ローカルで検証してみます.もう一つターミナルを起動して次のコマンドでスクリプトを実行しましょう.
$ ruby pop.rb localhost 8888
ここでもターミナルにプロンプトはありませんが,入力はできます.数値と演算 記号を使用して四則演算を実行してみてください.サーバプログラムから答えが 返ってくるはずです.
それが確認できたら,どこか起動している近くのホストにTELNETで接続して,そ こから自分のローカルに向けて
$ ruby pop.rb pc1** 8888
のように接続します.基本的な演算だけですが,とりあえずネットワーク越しに 計算サーバを利用していることには違いありません.
リモートのホストにログインして各種の作業を行う実習をしましょう.ただし, 危険なコマンドがありますので,良く分からないコマンドの実行は控えておきま しょう.
授業の終りに宿題の説明をしますので、アナウンスに注意してください.