Linux その8 伊藤敏 Linux関係の連載はLinuxを日本で広げて来た人々によるものが,この連載の他に3つ程あります.1) Linuxのシステム管理関係はそれらの方を参照していただくことが良いでしょう.この連載では,理工系に特化した形で紹介をするのが主旨です.その意味ではマイナーなプログラムの紹介もありますが,必ず役立つものがあるはずです.先月号から理工系への特化が始まりましたが,Mathematicaを除くと,特にLinux上でなければならないことはありません.これから紹介するツールの多くは他のunixを使っている場合でも,ほとんどそのまま,利用できると思われます.自分にあったものを見つけて,活用して下さい. 1. Linuxマシンをシリアルケーブルでつなぐ 先月は,LinuxマシンへDOSマシンからログインをする設定を紹介しました.今回は,Linuxマシンをシリアルケーブルを通じて,PPPでつなぐことを考えましょう. 必要なものは2台のLinuxマシンとクロスケーブルです.安売りで購入したクロスケーブルはPPPでつなぐのに必要な結線が一部省略されているようで,使用できませんでした.筆者はしかたなく,自作しました.結線図を図1に示します.2,3) 2台のLinuxマシンの名前を「sato」,「taka」とします.各マシンにはpppがインストールされているものとします. # ls /usr/sbin あるいは # ls /usr/lib/ppp <- 古いバージョンの場合 として,pppdやchatがあるか確かめて下さい.もし,まだインストールされてなければ,slackwareのn1ディレクトリにあるppp.tgzをpkgtoolを使って入れて下さい. 「taka」から「sato」に呼びかけて,ppp接続をする場合を紹介します.「sato」で, /etc/inittab, /etc/ppp/options のファイルをリスト1のように編集設定し, /etc/ppp/ppplogin を作成します.ppploginは作成後,chmodコマンドで,実行属性を付けておきます. # chmod +x /etc/ppp/ppplogin さらに,「ppp」と言う名前のユーザを登録します.ホームディレクトリは /etc/ppp に,ログインシェルはさきほど作成した/etc/ppp/ppplogin に設定します.設定後の /etc/passwd ファイルの関係部分をリスト1に示します. 「taka」では /etc/ppp/options をリスト2のように編集し,sato-loginと言うファイルを作成し,実行属性をつけます. クロスケーブルをつなげて,「taka」から,sato-log を実行して下さい.これで,「sato」と「taka」がネットワークでつながりました.「taka」から # ping 192.168.1.8 して見て下さい.1パケット(64kバイト)送るのに80ms程度でつながっています.後はtelnetやftp,rcpなどネットワークならではのコマンドを試して下さい.たとえば # telnet 192.168.1.8 13 とすると,リモートマシン(sato)の現在時刻を得ることができます. モデムを用いてのppp接続は参考文献3) を見て下さい.わずかな変更で実現できます. ******** fig 1 ***** 図1 PPP接続に必要なクロスケーブルの結線 25ピンコネクタ 9ピンコネクタ 20------------ 1 2------------ 2 3 ----------- 3 6 ----------- 4 8 ----------- 4 7 ----------- 5 20 ----------- 6 5 ----------- 7 4 ----------- 8 ******************** ******** list 1 **** リスト1 「sato」の設定 /etc/inittab の設定 前略 # Serial lines #s1:45:respawn:/sbin/agetty 19200 ttyS0 vt100 s2:45:respawn:/sbin/agetty 38400 ttyS1 vt100 <-- 追加 後略 /etc/ppp/options の設定 crtscts passive 38400 #2400 modem 192.168.1.8: <-- 「sato」のアドレス proxyarp /etc/ppp/ppplogin の作成 #!/bin/sh stty -tostop exec /usr/sbin/pppd <-- pppdの存在するディレクトリにより変更する,例えば, exec /usr/lib/ppp/pppd /etc/passwd のppp設定関係部分 ppp:[パスワードの暗号化部分]:502:100:ppp login:/etc/ppp:/etc/ppp/ppplogin *********** list 1 end ******* ********** list 2 ***** リスト2 「taka」の設定 /etc/ppp/optionsの設定 defaultroute crtscts 38400 #2400 modem 192.168.1.9: <-- 「taka」のアドレス **** sato-login の作成 #!/bin/sh /usr/sbin/pppd connect '/usr/sbin/chat -v "" "" ogin: ppp ssword: XXXXXX' 「XXXXXX」は「sato」のpppユーザで設定したパスワード ****** list 2 end ******** 2. フォートランコンパイラ f2c とg77 さて,理工系の人にとって,フォートランは欠かせない言語です.膨大なプログラムの資産を持っている人もいるでしょう.数値計算をするためのcのライブラリが少しずつ充実しつつあるとはいっても,数値計算をする人にとってフォートランは捨て切れません.そこで,表題のf2cとg77を紹介しましょう.名前からも想像できますがFortran 77用のコンパイラです.slackwareであれば,リスト3にあげたディレクトリにあります.まだインストールしてない方は,どちらかを入れましょう. リスト4のようなプログラムを作ります.コンパイルの方法をリスト5に示しました.三角関数を用いてますから,p2cの場合と同じように「-lm」のオプションを付けます.雰囲気をつかんでいただくために,図2にktermの中で,f2cを用いて,変換,コンパイル,実行の様子を示します. コーディングでミスがあるプログラムをコンパイルすると,図3のように,見事に間違いを指摘をしてくれます.この場合は「real」と書くべき所を「rear」,6桁空ける所を5桁しか空けなかった結果の指摘です. ****** list 3 start ******** リスト3 f2cとg77のあるディレクトリ 展開後の容量 f2c slakware/d5/f2c.tgz 940K G77 slakinst/contrib/g77.tgz 1880K *********** list 3 end **************** ****** list 4 start ******** リスト4. フォートランの例 calc-tbl.f program calculation parameter(pi=3.14159) integer i real temp do 10 i=1,20,2 write(6,1000) i,i**2,i**3,i**4 10 continue do 20 i=0,180,30 temp=real(i)*pi/180.0 write(6,1100) i, sin(temp), cos(temp) 20 continue 1000 format(1h ,4i12) 1100 format(1h ,10x,i5,10x,f10.6) stop end *********** list 4 end ******** *********** list 5 start ******** f2cの使用法 % f2c calc-tbl.f これで,calc-tbl.cが作られる % gcc -o calc-tbl calc-tbl.c -lp2c 変換されたcalc-tbl.cをgccでコンパイルします.ライブラリにf2cを指定します 実行ファイル calc-tbl が作られます % gcc -o calc-tbl calc-tbl.c -lp2c -lm calc-tbl.fが数学関数(三角関数など)を用いている場合は「-lm」オプションを付けます g77の使用法 % g77 -o calc-tbl calc-tbl.f 実行ファイル calc-tbl が作られます ********* list 5 end ********* ********** figure 2 start ******* 図2. Kterm上でのf2cによる変換,コンパイル,実行結果 ****(f2c.tif):F2C.TIF ********** figure 2 end ******* ********** figure 3 start ******* 図3. コーディングに間違いがあるプログラムの変換 ****(f2c-miss.tif):F2C-MISS.TIF ********** figure 3 end ******* 3. 計算処理ソフト Calc CalcはEmacs(Mule)上で作動する計算処理ソフトです.先月のMathematica程の能力はありませんが,使い込めばかなりの力を発揮できるでしょう.別名Poor man Mathematicaと呼ばれております.Emacs(Mule)なしでは動きません.筆者は2.02cのバージョンを用いました. *Calcのインストール ファイルの入手先は「InformagicのLinux」の4枚目の「 /gnu/calc-2.02c.tar.gz」からです.スーパユーザになって,ファイルを展開します.通常のコンパイルするファイルの展開場所ではなく,Muleが使うlispファイルを入れる場所にします. # cd /usr/local/lib/mule/site-lisp # tar zxvf calc-2.02c.tar.gz # cd calc-2.02c ここで,CalcのホームディレクトリにあるREADMEとINSTALLファイルを読んでおきましょう.その後,Makefileを必要に応じて修正します.筆者はMuleを使っていますので,「emacs」の代わりに「mule」を指定します.Makefileの31行目をリスト6の様に書き換えました.もちろん,EmacsやNemacsを使っておられる方は修正する必要はありません.また,Muleを使っていても,設定ファイルの名前は「.emacs」ですから,間違えないようにして下さい. --------------------- リスト6 CalcのMakefile修正 Makefileの30行目から # Programs. EMACS = mule <-- emacsからmuleに書き換えた TEX = tex TEXINDEX = texindex MAKEINFO = makeinfo MAKE = make ECHO = @echo REMOVE = -rm -f 後略 ------------------------- あとは, # make として,しばらく待つだけです.画面は「Compiling calc-**.el」と言うメッセージを大量に出しながら elファイルをelcファイルにコンパイルしていきます.終了したら,皆さんのディレクトリの「.emacs」と言うファイルにリスト7の文が加わります. --------------------- リスト7 Calcのコンパイルで「.emacs」加えられる文 ;;; Commands added by calc-private-autoloads on Mon Jan 8 14:31:40 1996. (autoload 'calc-dispatch "calc" "Calculator Options" t) (autoload 'full-calc "calc" "Full-screen Calculator" t) (autoload 'full-calc-keypad "calc" "Full-screen X Calculator" t) (autoload 'calc-eval "calc" "Use Calculator from Lisp") (autoload 'defmath "calc" nil t t) (autoload 'calc "calc" "Calculator Mode" t) (autoload 'quick-calc "calc" "Quick Calculator" t) (autoload 'calc-keypad "calc" "X windows Calculator" t) (autoload 'calc-embedded "calc" "Use Calc inside any buffer" t) (autoload 'calc-embedded-activate "calc" "Activate =>'s in buffer" t) (autoload 'calc-grab-region "calc" "Grab region of Calc data" t) (autoload 'calc-grab-rectangle "calc" "Grab rectangle of data" t) (autoload 'edit-kbd-macro "macedit" "Edit Keyboard Macro" t) (autoload 'edit-last-kbd-macro "macedit" "Edit Keyboard Macro" t) (autoload 'read-kbd-macro "macedit" "Read Keyboard Macro" t) (setq load-path (append load-path (list "/usr/local/lib/mule/site-lisp/calc-2.02c"))) (global-set-key "\e#" 'calc-dispatch) ;;; End of Calc autoloads. ------------------------------------ もし,上の文が追加されてなければ,ルートの「/root/.emacs」には追加されているはずですから,それをコピーして,自分のホームディレクトリの「.emacs」ファイルに追加して下さい. *では使って見ましょう 起動は「M-x calc」です.ALTキーと「x」を同時に押すとmule(emacs)の左下のミニバッファ面に「M-x」と表示されます.または,「ESC」キーを押した後,「x」を押しても「M-x」と表示されます.そこで,「calc」と入れて,立ち上げます.または,「M-# c」(ShiftキーとALTキーと3(#)を同時に押してから,cを押す)でも起動できます.どの方法でも良いでしょう.起動すると図4のようにmuleの画面下四分の一程度が「calc」の画面になります.終了は「x」を押すと,左下のミニバッファ面に「M-x calc-」と表示されますから,そこへ,「quit」と入れて[enter]を押して下さい. 簡単な計算をしましょう.左下のミニバッファ面から 3.14と 5と 5を入れます.そして,「*」を2回押すと,3.14*5*5が計算されます.その様子を図5に示しました.上が数字を入れたところです.下がかけ算をした様子です.右の窓に計算の過程が表示されております.つぎに,数値ではなく,式を入れましょう.「'」を入れると,左下のミニバッファ面が「Algebraic:」と表示されます.Algebraicは「代数」と言う意味です.ここで「x^2+2*x-3」と入れます.操作法を手順1に示します.図6のように因数分解ができます.左と右の窓を見比べて下さい. Calcで使える命令はcalc-factorのほかにたくさんあります.ミニバッファに「M-x calc-」が表示されている時にTabキーを押すと,メインバッファに表示されます.表1にその命令の一部をあげておきます.面白いのは「calc-mathematica-language」があることです.前に紹介をしたMathematicaの入力方法と同じモードで入力ができます.当然,「sin(x)」は「Sin[x]」と入力します.元に戻すには「calc-normal-language」とします.三角関数を用いる場合,角度の単位としてラジアンか度を使うかで,同じ数値を入れても結果が違います.普通に立ち上げると度のモードになっております.ラジアンにするには「calc-radians-mode」,度にするには「calc-degrees-mode」とします. 「'」を押して,「Algebraic」モードで式の解を求めたり,微分積分を実行している様子を,操作を手順2に,図7にその結果を示します.ここでは,Calcを全画面モードにしました.上の窓に入力画面(Calc Trail),下の画面に結果画面(Calculator)を示しております. では,Calcの中から,グラフを描かせましょう.自動的に「GnuPlot」を使用します.操作を手順3に結果を図8,9に示します. 図4 calcを起動したところ *(fig1.tif) 図5 3.14*5*5の計算 *(fig2.tif) 図6 x^2+2*x-3の因数分解 *(fig3.tif) 図7 微分積分行列演算など *(fig4.tif) 図8 グラフを描く *(fig5.tif) 図9 Calc内から描かれた3次元グラフ *(fig6.tif) 手順1 calcへの入力とミニバッファの表示 =============================== 入力 ミニバッファの表示 =============================== 図6の場合 ' Algebraic: x^2+2*x-3 Algebraic: x^2+2*x-3 x M-x calc- factor M-x calc-factor ================================ 手順2 Algebaicモードでの入力-図7の場合 ================================ ' solve(x^3-1, x) 解 ' deriv((x - 1) / (x^3 + 2 * x + 1), x) 微分 ' integ(x + 3 * x, x) 積分 ' expand( (x-1)*(x+5) ) 展開 ' factor( x^2+3*x+2 ) 因数分解 ' [1,2]*[3,4] 行列演算 ベクトルの内積 ' [[1],[2]]*[3,4] 行列演算 ' [[1,2,3],[4,5,6],[7,8,9]]*[[1,1,1],[2,3,4],[3, 4, 5]] 行列かけ算 ' [[1, 2, 3], [2, 2, 3], [4, 2, 5]]^-1 逆行列 ================================ 手順3 Calcよりグラフを描く-図8の場合 =============================== ' [00..360], sin(x) 式の入力 calc-graph-fast (または g f) 2次元グラフの出力 calc-graph-clear (または g c) グラフの消去 ' [-5..5],[-5..5],cos((x^2 + y^2) / 4) / (3 + x^2 + y^2) 式の入力 calc-graph-fast-3d 3次元グラフの出力 calc-graph-clear (または g c) グラフの消去 その他にx,yのプロット範囲指定は calc-graph-range-x (または g r) calc-graph-range-y (または g R) =============================== 表1 命令の一部 ============================== calc-abs calc-algebraic-mode calc-arcsin calc-arcsinh calc-arctan calc-arctan2 calc-arctanh calc-begin-complex calc-begin-vector calc-clean calc-clean-num calc-conj calc-cos calc-cosh calc-curve-fit calc-decimal-radix calc-derivative calc-diff calc-exp calc-expand calc-expand-formula calc-expand-vector calc-factor calc-factorial calc-find-maximum calc-find-minimum calc-float calc-floor calc-fortran-language calc-frac-mode calc-fraction calc-gcd calc-graph-add calc-graph-clear calc-graph-command calc-graph-delete calc-graph-device calc-graph-display calc-graph-fast calc-graph-fast-3d calc-graph-log-x calc-graph-log-y calc-graph-log-z calc-graph-name calc-graph-num-points calc-graph-output calc-graph-plot calc-graph-quit calc-graph-range-x calc-graph-range-y calc-graph-range-z calc-inverse calc-kill calc-kill-region calc-lcm calc-ln calc-log calc-log10 calc-mathematica-language calc-matrix-brackets calc-max calc-min calc-minus calc-normal-language calc-normal-notation calc-normalize-rat calc-not calc-not-equal-to calc-num-integral calc-num-prefix calc-octal-radix calc-or calc-pi calc-plus calc-power calc-precision calc-product calc-quit calc-radians-mode calc-radix calc-random calc-round calc-sign calc-simplify calc-sin calc-sincos calc-sinh calc-solve-for calc-sort calc-sqrt calc-substitute calc-summation calc-symbolic-mode calc-t-prefix-help calc-tan calc-tanh calc-taylor calc-tex-language calc-tutorial calc-vector-braces calc-vector-brackets calc-vector-product calc-vector-sdev calc-vector-sum calc-vector-variance calc-xor =============================================================== 4. アナログ回路シミュレータ Spice Spiceをご存知ですか.CQ出版社も「PSpice」として,PC-9801用MS-DOS版を出している,電子回路シミュレータです.Linuxで作動するSpiceがあります.簡単な使い方を紹介します. *インストール 今回用いましたのは,spice2g6です.ソースはFortranで書かれておりました.Spiceをインストールするにはf2cがすでにインストールされている必要があります.これより後のバージョンはCで書かれているはずです.筆者の入手先はInforMagicのcdrom(August 1995)のdisk2です. apps/circuits/spice2g6.tar.z スーパユーザになり,これらのアーカイブファイルを展開,インストールします. # cd /home/itou/exports # tar zxvf /cdrom/apps/circuits/spice2g6.tar.z # cd spice # make これで,spcieができます.あとは,デッバク情報を落して,「/usr/local/bin」の下にコピーしましょう. # strip spice # cp spice /usr/local/bin/. *使って見よう ktermまたはxtermから % spice とすると,入力待ちの状態になります.ここで, * Simple Example Vin 1 0 1.5volt R1 1 2 100ohm R2 2 3 10ohm R3 3 0 15ohm .end とすることで,図10のように計算されます.これは,図11の回路の電流と各点(ノード)の電圧を計算したものです.最初の行はコメントです.Spiceの詳しい使い方は参考文献等4) を参照して下さい. 図10 Spiceの実行例 ***(spice1.tif):SPICE11.TIF 図11 図10で計算した回路 ***(circule.tif):CIRCULE.TIF 1) Unix User, スーパーアスキー,Software Design 2) 藤井:SLIPの設定と起動, インターフェース,81-87,11月号(1993) CQ出版社. 3) 小林 直行:Linux活用入門,61(1995) CQ出版社. 4) ポール.W.トゥネンガ著 松本敏之訳:SPICEによる電子回路設計入門,CQ出版社.