From VMS to Linux HOWTO 著者:Guido Gonzato, , and Mike Miller, v1.1.3 1999年9月17日 翻訳:青野 正幸 日本語訳: 1999年10月6日作成 この文書は、VMS を使っていて、フリー UNIX クローンである Linux へ切り 替えようと考えている人達の手助けになればと思い書いたものです。 Linux への移行が(望むらくは)楽にできるよう、コマンドやツールの比較などを盛り 込んでいます。 ______________________________________________________________________ 目次 1. イントロダクション 1.1 なぜ Linux なのか? 1.2 コマンドやファイル操作の比較 2. ショートイントロダクション 2.1 ファイル 2.2 ディレクトリ 2.3 プログラム 2.4 クイックツアー 3. ファイルの編集 4. TeX 5. プログラミング 5.1 Fortran 5.2 make の使いかた 5.3 シェルスクリプト 5.4 C 6. グラフィックス 7. メールとインターネットツール 8. 高度な話題 8.1 パーミッションと所有権 8.2 マルチタスク:プロセスとジョブ 8.3 再度、ファイルについて 8.4 プリンターキュー 9. 設定 10. 役に立つプログラム 10.1 ファイルのブラウズ less 10.2 Linux での付番によるバックアップ 10.3 アーカイブ:tar と gzip 11. 実生活での例 12. これなしではやってゆけない秘訣 13. Linux で VMS のテープを読むには 13.1 はじめに 13.2 基礎 13.3 詳細 13.4 ブロックサイズについての解説 14. 終りに 14.1 Copyright 14.2 Disclaimer 14.3 日本語版謝辞 ______________________________________________________________________ 1. イントロダクション 1.1. なぜ Linux なのか? あなたは UNIX が難しいと聞いて、VMS からの移行をちゅうちょしていません か?御心配なく。洗練された UNIX クローンの一つである Linux は VMS を扱 うほど難しくないし、実際、楽しいものですよ。熱狂的な VMS ファンは同意 しないかもしれないけど、大方の意見は、 Linux のほうがはるかに強力で万 能だということです。 Linux と VMS は両者ともすばらしいオペレーティングシステムで、どちらを 使っても同じ仕事ができますが、Linux には VMS を代替するにたる際だった 特徴があります。その上、VMS ではまだ実現していませんが、Linux は VAX を凌ぐ性能をもつ最新の Pentium PC で動いています。新鋭の高性能グラ フィックカードを搭載した Linux 機で X11 を利用すれば、高速グラフィック ワークステーションができあがる、というおまけもあります。性能はほぼ例外 なくグラフィックス専用機を凌ぎますから。 あなたは大学の研究者か学生で、VMS を使って次のような仕事をしているん じゃないでしょうか。 o TeX/LaTeX を使って論文を書く o Fortran プログラミング o 図や表の作成 o インターネットの利用 o その他 ... 次章から、あなたの VMS での経験も踏まえて、こういった仕事を Linux では どんな風にやるのか説明していきます。 前提条件: o Linux と X Window System が正しくインストールされていること。 o 技術上の細かな面倒をみてくれる管理者がいること (質問は私にではな く、管理者の方にしてくださいね ;-) 。 o シェル - DCL と同じもの - は bash を使います(システム管理者に確認し てください)。 この HOWTO 文書は、Linux について十分説明したものじゃなくて、最初に 知っておくべき最低限の事柄について述べたものです。従って、Linux を使い こなすためには、さらに学ばなけばなりません (高度な bash の特徴、プログ ラミング、正規表現 など...)。これ以降、「詳細については man ページを参 照のこと」という意味で、RMP(please Read the Man Pages for further details) というマークを使います。 この ftp サイ ト から入手可 能な Linux Documentation Project の文書が重要な情報源となるでしょう。 初心者向けとして、Larry Greenfield の「 Linux User Guide 」をお薦めし ます。 さあ、はじめましょう 1.2. コマンドやファイル操作の比較 これは、VMS と Linux でよく使うコマンドの比較表です。文法がかなり異 なっています。 − 詳細は次章以降を御覧ください。 VMS Linux Notes ------------------------------------------------------------------------------ @COMMAND command 実行ファイルであること COPY file1 file2 cp file1 file2 CREATE/DIR [.dirname] mkdir dirname 一度に一回実行 CREATE/DIR [.dir1.dir2] mkdirhier dir/name DELETE filename rm filename DIFF file1 file2 diff -c file1 file2 DIRECTORY ls DIRECTORY [...]file find . -name file DIRECTORY/FULL ls -al EDIT filename vi filename, 多分気に入らないでしょう emacs filename, EDT 互換 jed filename 同上-- 私のお気に入り FORTRAN prog.for g77 prog.f, LINK の実行は不要 f77 prog.f, fort77 prog.f HELP command man command 「 command 」を指定します info command 同上 LATEX file.tex latex file.tex LOGIN.COM .bash_profile, 「隠し」ファイル .bashrc 同上 LOGOUT.COM .bash_logout 同上 MAIL mail, お粗末 elm, ずっといい pine さらにいい PRINT file.ps lpr file.ps PRINT/QUEUE=laser file.ps lpr -Plaser file.ps PHONE user talk user RENAME file1 file2 mv file1 file2 複数ファイル指定は不可 RUN progname progname SEARCH file "pattern" grep pattern file SET DEFAULT [-] cd .. SET DEFAULT [.dir.name] cd dir/name SET HOST hostname telnet hostname, 正確には同じじゃない rlogin hostname SET FILE/OWNER_UIC=joe chown joe file まったく違う SET NOBROADCAST mesg SET PASSWORD passwd SET PROT=(perm) file chmod perm file まったく違う SET TERMINAL export TERM= 文法が違う SHOW DEFAULT pwd SHOW DEVICE du, df SHOW ENTRY lpq SHOW PROCESS ps -ax SHOW QUEUE lpq SHOW SYSTEM top SHOW TIME date SHOW USERS w STOP kill STOP/QUEUE kill, プロセス用 lprm プリンターキュー用 SUBMIT command command & SUBMIT/AFTER=time command at time command TEX file.tex tex file.tex TYPE/PAGE file more file less file ずっといい もちろんコマンド名が違ってるだけじゃありません。続けましょう。 2. ショートイントロダクション 本当にはじめて、ログインする前にどうしても知っておくべきことを書きま す。リラックスして、そんなに多くないから。 2.1. ファイル o VMS でファイル名はファイル名.拡張子;バージョン番号でしたが、 Linux ではバージョン番号はありません(これはかなり痛い制約です。 ``Linux での符番によるバックアップ''を参照してください)。ファイル名は通常 255 文字以内、好きなだけドットで区切ることができます。例え ば、This.is_a_FILEname.txt のように。 o Linux では大文字と小文字を区別します。 FILENAME.txt と filename.txt は別なファイルとして扱います。 ls はコマンドですが、LS は違います。 o ドットで始まるファイルは「隠し」ファイルであり(通常、ディレクトリ一 覧には表示されません) チルダ「 ~ 」で終るファイルはバックアップファ イルです。 これはVMS のコマンドを Linux に置き換えたものです。 VMS Linux --------------------------------------------------------------------- $ COPY file1.txt file2.txt $ cp file1.txt file2.txt $ COPY [.dir]file.txt [] $ cp dir/file.txt . $ COPY [.dir]file.txt [-] $ cp dir/file.txt .. $ DELETE *.dat;* $ rm *dat $ DIFF file1 file2 $ diff -c file1 file2 $ PRINT file $ lpr file $ PRINT/queue=queuename file $ lpr -Pprintername file $ SEARCH *.tex;* "geology" $ grep geology *tex ディレクトリを含む他の例については以下で説明します。アクセス保護、所有 権、その他の高度な話題などについては、``高度な話題''の章を見てくださ い。 2.2. ディレクトリ o 同じノードの装置上にある場合、VMS でのディレクトリ名は [top.dir.subdir] の形式となりますが、Linux では /top/dir/subdir/ の 形式になります。また、ディレルトリーツリーの先頭にあたるディレクト リをルートディレクトリと呼び / で表し、その下に /bin,/usr, /tmp, /etc などの他のディレクトリがその下に位置します。 o /home ディレクトリの下にはユーザ毎に用意された「ホームディレクト リ」があります。例えば /home/guido や /home/warner のように。ログイ ンして、自分のホームディレクトリで作業しますが、これは SYS$LOGIN と 同じですね。「~」はホームディレクトリへのショートカットで、cd ~/tmp と cd /home/guido/tmp は同じディレクトリを指します。 o ディレクトリとファイルは同じ命名則に従います。さらに、各ディレクト リには二つの特別なエントリが存在します。一つは . で、これは現在の ディレクトリ自体を指します( [] と同じ)。もう一つは .. で、親ディレ クトリを指します( [-] と同じ)。 別な例を示します。 VMS Linux --------------------------------------------------------------------- $ CREATE/DIR [.dirname] $ mkdir dirname $ CREATE/DIR [.dir1.dir2.dir3] $ mkdirhier dir1/dir2/dir3 n/a $ rmdir dirname (if dirname is empty) $ rm -R dirname $ DIRECTORY $ ls $ DIRECTORY [...]file.*;* $ find . -name "file*" $ SET DEF SYS$LOGIN $ cd $ SET DEF [-] $ cd .. $ SET DEF [top.dir.subdir] $ cd /top/dir/subdir $ SET DEF [.dir.subdir] $ cd dir/subdir $ SHOW DEF $ pwd アクセス保護、所有権、その他の高度な話題については``高度な話題''を御覧 ください。 2.3. プログラム o コマンドやコンパイルしたプログラム、およびシェルスクリプト ( VMS の 「コマンドファイル」と同じ)には、.EXE や .COM のような拡張子は不要 で、好きな名前をつけることができます。 ls -F で見ると、実行可能な ファイルにはアスタリスク「 * 」がついています。 o 実行可能ファイルを起動するには、ファイル名をタイプしてください( RUN PROGRAM.EXE や @COMMAND じゃありません)。警告:ファイルが実行パスに あることが不可欠です。通常、パスには /bin,/usr/bin,/usr/X11R6/bin などが含まれています。プログラムを作ったら、パスの通ったディレクト リに移してください。 (設定方法は``設定''を御覧ください) カレント ディレクトリがパスに含まれていないなら、替わりの手段として、フルパ ス指定でプログラムを実行することもできます。例え ば、/home/guido/data/myprog や ./myprog のように。 o VMS では /OPTION= の形でコマンドスイッチを指定しますが、 Linux では -switch や --switch のように指定します。 switch は文字や文字の組合 せ、または単語などです。特に、多くのコマンドに共通の -R スイッチ(再 帰的に)は VMS で [...] と同じ効果があります。 o 一行で複数のコマンドを実行することもできます。 $ command1 ; command2 ; ... ; commandn Linux をさらに使いやすくしているのが I/O リダイレクトとパイプなんです が、 VMS では扱いにくかったり、あるいはそれに匹敵するものがありません( 最近の DCL では リダイレクトとパイプをサポートしたようですが、残念なが ら私はそのバージョンを持っていません)。 VMS でのリダイレクトは、コマン ドのスイッチとして補助的にサポートされているか(多くのコマンドにある /OUTPUT= スイッチを思い出してください)、つぎのような面倒なやり方で実現 できます。 $ DEFINE /USER SYS$OUTPUT OUT $ DEFINE /USER SYS$INPUT IN $ RUN PROG Linux ではこんなに簡単になります。 $ prog < in > out パイプは VMS では利用できませんが、UNIX では重要な役割を持っています。 これが典型的な例です。 $ myprog < datafile | filter_1 | filter_2 >> result.dat 2> errors.log & プログラム myprog はファイル datafile を( < を経由して)入力として取り 込み、出力はプログラム filter_1 の入力に( | を経由して)渡されます。プ ログラム filter_1 の出力は、再びプログラム filter_2 に渡され、最終的な 出力は ファイル result.dat に( >> を経由して)追記されます。またエラー 出力はファイル errors.log に( 2> を経由して)リダイレクトされます。以上 の処理はバックグラウンドで処理されます(コマンドラインの最後に & をつけ ているため)。より詳しい説明は``Examples''を御覧ください。 マルチタスク処理、「キュー」などについては``高度な話題''を御覧くださ い。 2.4. クイックツアー ここまでで Linux を試す準備ができました。ログイン名とパスワードを正確 に入力してみてください。例えば、ログイン名が john でパスワードが My_PassWd なら決して John や my_passwd などと入力しないこと。 UNIX は 大文字と小文字を区別するのですから。 一旦ログインしたら、マシン名:$ のようなプロンプトが表示されることで しょう。プロンプトを変更したり、プログラムを自動的に実行させたい場合 は、.profile や .bash_profile などの「隠し」ファイルを修正します。(`` 設定''を御覧ください) これらのファイルは LOGIN.COM と同じ働きをしま す。 ALT-F1(ALT キーと F1 キーを同時に押します)、ALT-F2, ... ALT-F6 のどれ かを押せば「仮想コンソール(訳注 : 以下 VC と呼ぶ)」を切り替えることが できます。画面全体を使うアプリケーションが VC を占有しても、他の VC に 切り替えることで作業を続けることができます。別な VC を開いてログインし てみてください。 X Window System (以下、X と省略)を起動できることと思います。 X は DEC ウインドウに似たグラフィック環境です。- 実際、DEC ウインドウは X から 派生したものです。 startx と打って数秒待つと、xterm か それに似た端末 エミュレータが起動し、ボタンバーも表示されることでしょう(何が起動され るかは Linux の設定にもよりますが)。デスクトップをクリック(マウスの両 方のボタンを試してくださいね)すればメニューを表示します。 X 環境でテキストモード(「コンソール」)にするには、CTRL-ALT-F1(コント ロールキーと ALT キーと F1 を同時に押します)、CTRL-ALT-F2、... CTRL- ALT-F6 のどれかを押してみてください。コンソールから X に復帰するには ALT-F7 キーです。X を終了するには、メニューの指示に従うか、 CTRL-ALT- BS を押します。 次のコマンドはホームディレクトリ内の全てのファイル(隠しファイルも含む) を一覧します。 $ ls -al ここで SHIFT-Page Up キーを押すと画面後方にスクロールするでしょう。 ls のヘルプを見たければ、 $ man ls とタイプしましょう。「 q 」でヘルプ画面から抜けることができます。ツ アーの最後に exit でセッションを終了しましょう。もし PC の電源を切るの なら、CTRL-ALT-DEL を同時に押して、数秒後に電源を切ってください(決して Linux の稼働中に電源を切ってはいけませんよ!ファイルシステムが壊れるお それがありますから)。 すでに何らかの作業を開始しようと思われてる方、``高度な話題''を見てから にしましょう。 3. ファイルの編集 Linux には EDT はありませんが、たくさんのエディターが使えます。また、 これだけは保証されていることですが、全ての UNIX には vi エディターがつ いています - 忘れないでくださいね。でもシステム管理者がもっといいエ ディターをインストールしてるに違いないけど。おそらく、最もポピュラーな エディターは emacs であり、多少は EDT をエミュレートできます。jed も EDT をエミュレートできるエディターです。 これら二つのエディターは、、EDT にはない二つの特徴 * 文法強調機能と自 動インデント機能 * があるので、プログラムソースの編集には大いに有用で す。さらに、エディター上でコンパイルできて(コマンドは ESC-X compile )、文法エラーのある行にカーソルを飛ばします。さえない EDT を再び使う気 にはならないと断言できます。 emacs を立ち上げて、ESC-X edt-emulation-on とタイプして見てください。 ALT-X や ESC-X は emacs でコマンドを実行する時に押します。 EDT の CTRL-Z のようなものです。emacs と EDT のコマンドの違いを少し挙げてみま しょう。 o コマンドを実行しようとして、CTRL-Z を押さないように (もしやっちゃっ たら、emacs は停止します。でも fg で復帰します)。 o オンラインヘルプを拡張したものもあります。CTRL-H ? か CTRL-H T を押 してみてください。チュートリアルが始まります。 o ファイルの保存は CTRL-X CTRL-S です。 o 終了は CTRL-X CTRL-C です。 o 新規にファイルを編集するなら CTRL-X CTRL-F で、CTRL-X B で編集バッ ファを切替えることができます。 もし jed があるなら (システム管理者にちゃんと設定されているか尋ねてく ださい)、立ち上げたときにエミュレーションが働くようになっている筈で す。普通にキーパッドが使えて、CTRL-H CTRL-P か CTRL-? でヘルプが表示さ れると思います。emacs と同じ方法でコマンドを実行でき、加えて、オリジナ ルの EDT にはない、あなた好みのキーバインドにすることも可能です。細か いことはシステム管理者に尋ねてください。 これらの代わりに、全く違った操作性をもつエディターを使用してもいいので す。素のままの emacs も一つの選択肢です。ポピュラーなエディターである joe は emacs (幾分操作が簡単になっている)や DOS エディターなどをエミュ レートします。jmacs か jstar を呼び出し、 CTRL-X H か CTRL-J でヘルプ を表示させることもできます。emacs や jed は古き良き EDT より強力です。 4. TeX TeX と LaTeX はどちらも VMS 版と同じです - 速いところは違いますよ :-) 。でも .dvi や .ps ファイルを扱うツールには優れたものがあります。 o TeX から TeX ファイルを起動するには、(あいも変わらず) tex file.tex のようにします。 o .dvi ファイルを .ps ファイルに変換するには、dvips -o filename.ps filename.dvi とします。 o X 環境で .dvi を画面に表示するには、xdvi filename.dvi & とします。 クリックすれば拡大表示します。xdvi のお利口なところは、TeX ファイル をエディターで変更して TeX を通してやれば、自動的に .dvi ファイルを 新しいものに表示しなおす点です。 o ページ全体か、選択部分を印刷するのに最適なツールは、現在のところ gv です。 o .ps ファイルを印刷するには、lpr mypaper.ps コマンドを使います。もし ポストスクリプトプリンター(かどうかはシステム管理者に聞いてくださ い)なら lpr -Pps mypaper.ps とします。プリンターキューの詳しい情報 は、``プリンターキュー''を御覧ください。 5. プログラミング Linux はプログラムを作るには良い環境だと思います。プログラムを簡単に素 早く作成するための多くのツールが揃っています。例えば、編集 - 保存 - コ ンパイル - 再編集といった単調な作業にあくせくしなくても、前述の emacs や jed などのエディターを使えば迅速に作業できます。 5.1. Fortran あまり大差ないのですが、この文書を書いている時点で利用できる(フリー)コ ンパイラーと VMS とでは完全互換ではありません - 幾つかのマイナーな警告 の発生が予想されます( VMS のコンパイラは非標準の拡張を行なっているので す)。詳細は /usr/doc/g77/DOC か /usr/doc/f2c/f2c.ps を御覧ください。 システム管理者は、g77 ネイティブコンパイラ(すぐれものですが、0.5.21 版 ではまだ DEC Fortran と互換性はありません)か、Fortran から C へのトラ ンスレータである f2c (疑似ネイティブコンパイラのフロントエンド) のどち らかをインストールしているはずです。私の経験では、yaf77 が最も優れた結 果を出すパッケージの一つだと思います。 g77 で Fortran プログラムをコンパイルするには、ソースを編集して、 .f 拡張子をつけて保存した後、 $ g77 myprog.f を実行します。 デフォルトでは、a.out の名で実行ファイルが生成されます(他に何もリンク しなければ)。異なった実行ファイル名にして、最適化オプションをつけるに は、 $ g77 -O2 -o myprog myprog.f とします。 最適化には注意! システム管理者にコンパイラについてのドキュメントを一 読してもらい、問題がないかどうか確認してください。 サブルーチンをコンパイルするには、 $ g77 -c mysub.f とすれば、mysub.o が生成されます。このサブルーチンをリンクするには、 $ g77 -o myprog myprog.f mysub.o としてください。 たくさんのサブルーチンがあって、ライブラリにまとめたいなら、 $ cd subroutines/ $ cat *f >mylib.f ; g77 -c mylib.f のようにします。 これであなたのプログラムにリンク可能な mylib.o が生成されます。最後 に、外部ライブラリ libdummy.so をリンクするには、 $ g77 -o myprog myprog.f -ldummy とします。 f2c をお持ちなら、g77 の替わりに f77 か fort77 のみを使うことでしょ う。 以下では、さらに使いやすいプログラミングツール make を紹介します。 5.2. make の使いかた ユーティリティ make は、複数のソースファイルに分かれたプログラムのコン パイルに使うツールです。VMS での MMS と MMK に相当しますが、構文は異 なっています。 ソースファイル file_1.f , file_2.f , file_3.f と メインプログラムの ソース myprog.f があるとしましょう。これらのプログラムを手作業でコンパ イルするとなると、ソースファイルのどれか一つを変更した場合、それと依存 関係にあるファイルがどれかを考えて、一つ一つ再コンパイルしなければなり ません。 頭が変になる前に「 makefile 」を作るべきです。これはソースファイル相互 の依存関係を記述したテキストファイルです - ソースが変更されたら、変更 されたファイルに依存するファイルだけを再コンパイルしてくれます。 我々の例では、こんな風に makefile を作ります。 ______________________________________________________________________ # makefile の例です。 # と書いてあるところでは キーを押してください! # 大切なことです:スペースはダメですよ。 myprog: myprog.o file_1.o file_2.o file_3.o g77 -o myprog myprog.o file_1.o file_2.o file_3.o # myprog は四つのオブジェクトファイルに依存します。 myprog.o: myprog.f g77 -c myprog.f # myprog.o はそれ自身のソースファイルに依存します。 file_1.o: file_1.f g77 -c file_1.f # file_1.o はそれ自身のソースファイルに依存します。 file_2.o: file_2.f file_1.o g77 -c file_2.f file_1.o # file_2.o はそれ自身のソースファイルとオブジェクトファイルに依存します。 file_3.o: file_3.f file_2.o g77 -c file_3.f file_2.o # file_3.o はそれ自身のソースファイルとオブジェクトファイルに依存します。 # end of makefile. ______________________________________________________________________ これを Makefile の名で保存し、make とタイプすればコンパイルできます。 代わりに、ファイル名を myprog.mak として保存したなら、make -f myprog.mak でコンパイルできます。もちろん RMP(訳注:man ページを参照の 意)。 5.3. シェルスクリプト シェルスクリプトは VMS コマンドファイルと同じものですが、より強力な構 文を備えています。 スクリプトを書くには、しなければならないこと全てをコマンドで記述して、 標準の ASCII ファイルに保存します。実行できるようにするために、chmod +x <スクリプトファイル名> コマンドを実行しておいてください。スクリプト ファイル名をタイプすれば実行できます。 bash でスクリプトを書くには、広範な機能を網羅した解説本が必要になるの で、あまり深くは言及しません。ここでは多少包括的で、(望むらくは)役に立 つサンプルから幾つかの基本的なルールを読みとってください。 サンプル:sample.sh ______________________________________________________________________ #!/bin/sh # sample.sh # コメント行です。 # 最初の行は消さないで、必ずそこになければなりせん。 echo "This system is: `uname -a`" # use the output of the commad echo "My name is $0" # built-in variables echo "You gave me the following $# parameters: "$* echo "First parameter is: "$1 echo -n "What's your name? " ; read your_name echo notice the difference: "hi $your_name" # quoting with " echo notice the difference: 'hi $your_name' # quoting with ' DIRS=0 ; FILES=0 for file in `ls .` ; do if [ -d ${file} ] ; then # if file is a directory DIRS=`expr $DIRS + 1` # this means DIRS = DIRS + 1 elif [ -f ${file} ] ; then FILES=`expr $FILES + 1` fi case ${file} in *.gif|*jpg) echo "${file}: graphic file" ;; *.txt|*.tex) echo "${file}: text file" ;; *.c|*.f|*.for) echo "${file}: source file" ;; *) echo "${file}: generic file" ;; esac done echo "there are ${DIRS} directories and ${FILES} files" ls | grep "ZxY--!!!WKW" if [ $? != 0 ] ; then # exit code of last command echo "ZxY--!!!WKW not found" fi echo "enough... type 'man bash' if you want more info." ______________________________________________________________________ 5.4. C Linux は、C でプログラムを開発するにはすばらしい環境です。C については ご存知だと思いますので、ここではガイドラインについて述べましょう。定番 の hello.c を Linux の一部とも言える gcc でコンパイルするには、 g77 と 同じ構文を使います。 $ gcc -O2 -o hello hello.c プログラムにライブラリをリンクするには、スイッチ -l を加えま す。例えば、数学ライブラリと最適化オプションを付けてリンクするには、 $ gcc -O2 -o mathprog mathprog.c -lm のようにします。 ( -l スイッチは、 /usr/lib/lib.a を一緒にリンクしろ ということで、従って -lm は /usr/lib/libm.a と同じ意味になります)。 プログラムが複数のファイルから構成される場合は、前述したように make ユーティリティが必要となるでしょう。当然、makefile に記述されたソース ファイルと gcc を使います。 man ページのセクション 3 に記載されている C の関数についてのヘルプを呼 び出すことができます。例えば次のようにします。 $ man 3 printf 使用可能なライブラリは山ほどありますが、中でも、テキストモードで各種の 効果を出すための ncurses と、グラフィックス描画用の svgalib などを最初 に使いたいのではないですか。 6. グラフィックス 数ある利用可能なグラフィックスパッケージの中でも gnuplot は、その強力 な機能と使いやすさで突出しています。X を起動して、gnuplot とタイプして みてください。あらかじめ、二つのファイル - 2D-data.dat (一行当たり二つ のデータ)と 3D-data.dat (一行当たり三つのデータ)- が準備されているもの とします。 2 次元グラフの例: gnuplot> set title "my first graph" gnuplot> plot '2D-data.dat' gnuplot> plot '2D-data.dat' with linespoints gnuplot> plot '2D-data.dat', sin(x) gnuplot> plot [-5:10] '2D-data.dat' 3 次元グラフの例 (X の各行の値は空白行です): gnuplot> set parametric ; set hidden3d ; set contour gnuplot> splot '3D-data.dat' using 1:2:3 with linespoints 単一列のデータファイル(例えば、時系列など)は 2-D グラフとしてプロット できます。 gnuplot> plot [-5:15] '2D-data-1col.dat' with linespoints あるいは 3-D グラフとしても(上記のようにデータファイルに空白行を含める ことで)プロット可能です。 gnuplot> set noparametric ; set hidden3d gnuplot> splot '3D-data-1col.dat' using 1 with linespoints グラフを印刷する:ポストスクリプトプリンタを使っているのなら、 lpr -Pps file.ps とします。 gnuplot> set term post gnuplot> set out '| lpr -Pps' gnuplot> replot もとに戻すには set term x11 とタイプします。混乱しないでくださいね。最 後の印刷物は gnuplot を終了した時だけ印刷されるでしょう。 より詳しい情報は、help とタイプするか、 /usr/lib/gnuplot/demos/ ディレ クトリを御覧ください。 7. メールとインターネットツール インターネットは UNIX 機で誕生したものなので、Linux 用にも素敵で使いや すいアプリケーションが豊富に提供されてきました。これらはほんの一部で す: o Mail : 電子メールの送受信には elm か pine を使います - 両方ともオン ラインヘルプがあります。短いメッセージには、 mail を使うといいで しょう。 mail -s "hello mate" user@somewhere < msg.txt などとしま す。多分、xmail かそのようなプログラムを好むと思います。 o Newsgroups : tin と slrn はどちらも、直観的で自明な操作性を提供しま す。 o ftp : お決まりのキャラクタベースの ftp は別にして、フルスクリーン版 の ncftp や xftp のようなグラフィカルな ftp クライアントがインス トールされていないか、システム管理者に尋ねてみてください。 o WWW : よくみかける netscape あるいは xmosaic 、chimera それに arena はグラフィカルな web ブラウザです。キャラクタベースなら lynx があり ます。こっちの方が速いし、効果的です。 訳注:以下に日本語利用可能なツールの名前と url を列挙しておきます。 mail リーダ o mew o mutt-ja o cmail o MH-JP o wonderlust news リーダ o mnews o semi-gnus (兼 MUA ) o t-gnus web ブラウザ o lynx o w3m o w3-mode on xemacs o mmm 8. 高度な話題 この章は少し手ごわい内容にふれます。ここで述べる特徴を学べば、「 Linux について何かを知り得た」と言えると思いますよ。 8.1. パーミッションと所有権 ファイルとディレクトリには、VMS と同じようにパーミッション(保護)と所有 権が存在します。許可されていなければ、プログラムを走らせたり、ファイル を修正したり、あるいはディレクトリにアクセスすることもできません。ファ イルがあなたの権限下にないからです。つぎの例を見てみましょう。 $ ls -l /bin/ls -rwxr-xr-x 1 root bin 27281 Aug 15 1995 /bin/ls* 最初のフィールドは、ファイル ls のパーミッションを表示しています(オー ナは root でグループは bin)。所有権には オーナ (owner) 、グループ (group) 、その他 (other) の3種類があります (VMS の owner,group,world に似てますね)。パーミッションには 読み取り許可 (read) 、書き込み許可 (write 、削除許可も含む)、実行許可 (execute) の3種類があります。 左から右に見ていきましょう。- はファイルの種類です( - は一般ファイ ル、d はディレクトリ、l はリンク等を示します)。 rwx はファイルの所有者 に対するパーミッション( read, write, execute )です。次の r-x はファイ ル所有者の属するグループに対するパーミッション(read, execute) で、最後 の r-x はそれ以外のユーザに対するパーミッションを(read, execute)を表し ています。 ファイルのパーミッションを変更するには、 $ chmod とし、who には u (user、オーナのこと)、g (group) あるいは o (other) を 指定し、X には + か - のどちらかを指定します。また、 perm には r (read), w (write), あるいは x (execute) を指定します。例えば、 $ chmod u+x file は、ファイルの所有者に実行許可を与えるもので 、chmod +x file と短縮で きます。 $ chmod go-wx file これは、ファイルの所有者以外から書き込み許可と実行許可を取り消します。 $ chmod ugo+rwx file これは全てのユーザに読み込み許可、書き込み許可、実行許可を与えていま す。 パーミッションは、短縮して数字で示すことがあります。rwxr-xr-x は手っ取 り早く、755 と指定できます(各文字はビットに対応します。--- は0、--x は 1、-w- は 2 などのように)。 ディレクトリに対する rx は、 cd を使ってそのディレクトリに移動できるこ とを意味し、w はディレクトリ内のファイルの削除(もちろん、ファイルの パーミッションに従いますが)や、そのディレクトリ自体を削除できることを 意味します。これらのことは、ほんの一部です - RMP。 ファイルの所有者を変更するには: $ chown username file 要約すれば、次の表になります。 VMS Linux Notes ------------------------------------------------------------------------------ SET PROT=(O:RW) file.txt $ chmod u+rw file.txt $ chmod 600 file.txt SET PROT=(O:RWED,W) file $ chmod u+rwx file $ chmod 700 file SET PROT=(O:RWED,W:RE) file $ chmod 755 file SET PROT=(O:RW,G:RW,W) file $ chmod 660 file SET FILE/OWNER_UIC=JOE file $ chown joe file SET DIR/OWNER_UIC=JOE [.dir] $ chown joe dir/ 8.2. マルチタスク:プロセスとジョブ プログラムの実行についてさらに説明しましょう。これまで使ってきた「バッ チキュー」は Linux には存在せず、違った方法で扱われます。再び、典型的 なコマンドラインを示します。 $ command -s1 -s2 ... -sn par1 par2 ... parn < input > output & -s1, ..., -sn はプログラムスイッチで、par1, ..., parn はプログラムに渡 される引数です。 マルチタスク処理がどのように働くか見ていきましょう。フォアグランドや バックグランドで動くプログラムを「プロセス」と呼びます。 o プロセスをバックグランドで起動するには: $ progname [-switches] [parameters] [< input] [> output] & [1] 234 シェルはプロセスの「ジョブNo」(最初の数字です:以下を参照)とプロセスの PID (プロセスID) を通知します。各プロセスは PID で一意に識別できます。 o プロセスがいくつ動いているか調べるには: $ ps -ax 今現在実行中プロセスの一覧を出力します。 o プロセスを終了するには: $ kill プロセスを正規の手段で終了させる方法が判らなくても、あなたはプロセスを 終了させる必要があると思います ... ;-) 時々、以下のどちらかでのみ終了 させる場合があるでしょう(訳注:数字はシグナル番号で、9 は kill シグナ ル、15 は終了シグナルとして定義されています。 killall ならプロセス名を 指定して終了させることができます)。 $ kill -15 $ kill -9 付け加えると、シェルはプロセスの終了や一時停止、また、プロセスをバック グランドへ移したり、フォアグランドへ戻したりすることができます。このよ うな環境下で、プロセスを「ジョブ」と呼びます。 o ジョブがいくつあるか調べるには: $ jobs ジョブはシェルによって採番された番号で識別され、PID では識別されませ ん。 o フォアグランドプロセスを終了するには: $ CTRL-C (いつも効果があるとは限りません) o フォアグランドプロセスを一時停止するには: $ CTRL-Z (同上) o 停止状態にあるプロセスをバックグランドに移すには(それはジョブとな る): $ bg o ジョブをフォアグランドに戻すには: $ fg o ジョブを終らせるには: $ kill <%job> 8.3. 再度、ファイルについて ファイルについてのさらに詳しい情報です。 o stdin, stdout, stderr: UNIX において、全てのシステムコンポーネント はファイルとして取り扱います。コマンドやプログラムは、 stdin (標準 入力 - 通常はキーボード)と呼ぶ「ファイル」から入力を得て、stdout ( 標準出力 - 通常は画面)と呼ぶ「ファイル」へ出力し、エラーメッセージ は stderr (通常は画面)と呼ぶ「ファイル」へ出力します。 < と > を使えば、入出力を別なファイルにリダイレクトできます。さら に、>> は上書きする代りにファイルを追記します。 2> はエラーメッセー ジ( stderr )をリダイレクトします。2>&1 は stderr を stdout にリダイ レクトし、1>&2 は stdout を stderr にリダイレクトします。/dev/null はブラックホールと呼ばれ、ここにリダイレクトすると、どんなものも消 えてしまいます。 o wildcards: '*' はほぼ同じ働きです。用法: * は、隠しファイルを除く 全てのファイルにマッチします。.* は全ての隠しファイルにマッチしま す。*.* は文字列中に . を含む文字にマッチします。p*r は「peter」や 「piper」にマッチします。*c* は「picked」と「peck」にマッチします。 「%」は「?」になります(訳注:一文字のみにマッチ)。ワイルドカードと して他に、[] があります。用法:[abc]* は a か b か c で始まる文字列 にマッチします。*[I-N,1,2,3] は最後が I, J, K, L, M, N, 1, 2, 3 で 終るファイルにマッチします。 o mv ( RENAME ) は複数のファイルに対して使えません。 mv *.xxx *.yyy は思った通りに動かないでしょう。 o cp -i と mv -i はファイルが上書きされることを警告してくれます。 8.4. プリンターキュー VMS でもそうだったように、印刷要求はキューイングされます。プリントコマ ンドを発行する場合、プリンタ名を指定しても構いません。例: $ lpr file.txt # this goes to the standard printer $ lpr -Plaser file.ps # this goes to the printer named 'laser' プリンタキューを扱うために、次のようなコマンドがあります。 VMS Linux ------------------------------------------------------------------------------ $ PRINT file.ps $ lpr file.ps $ PRINT/QUEUE=laser file.ps $ lpr -Plaser file.ps $ SHOW QUEUE $ lpq $ SHOW QUEUE/QUEUE=laser $ lpq -Plaser $ STOP/QUEUE $ lprm 9. 設定 システム管理者が、すでに幾つかの設定ファイル - .xinitrc, .bash_profile, .inputrc 等のような - を準備していることでしょう。これ らのファイルは編集可能だと思います。 o .bash_profile か .profile : ログインしたときにシェルが読み込みま す。LOGIN.COM のようなものです。 o .bash_logout: ログアウトの時にシェルが読み込みます。 LOGOUT.COM の ようなものです。 o .bashrc: 非ログインシェルが実行します。 o .inputrc: キーの割り付けやシェルの動作をカスタマイズします。 サンプルを示しましょう。これは私が使っている .bash_profile の一部です( 省略しています)。 ______________________________________________________________________ # $HOME/.bash_profile # 不必要にパスを再定義しないこと。 echo $PATH | grep $LOGNAME > /dev/null if [ $? != 0 ] then export PATH="$PATH:/home/$LOGNAME/bin" # add my dir to the PATH fi export PS1='LOGNAME:\w\$ ' export PS2='Continued...>' # aliases alias bin="cd ~/bin" ; alias cp="cp -i" ; alias d="dir" alias del="delete" ; alias dir="/bin/ls $LS_OPTIONS --format=vertical" alias ed="jed" ; alias mv='mv -i' alias u="cd .." ; alias undel="undelete" # 役に立つ関数 inst() # カレントディレクトリに .tar.gz アーカイブをインストールする。 { gzip -dc $1 | tar xvf - } cz() # .zip アーカイブの内容を一覧する。 { unzip -l $* } ctgz() # .tar.gz アーカイブの内容を一覧する。 { for file in $* ; do gzip -dc ${file} | tar tf - done } tgz() # zip 風に .tgz アーカイブを生成する。 { name=$1 ; tar -cvf $1 ; shift tar -rf ${name} $* ; gzip -S .tgz ${name} } ______________________________________________________________________ そして、これは .inputrc です。 ______________________________________________________________________ # $HOME/.inputrc # Last modified: 16 January 1997. # # このファイルは bash で読まれ、シェルで使われるキーの割り付けを定義したものです。 # 以下では、END、HOME、DELETE とアクセント文字キーは固定です。 # より詳しい情報は man readline を御覧ください。 "\e[1~": beginning-of-line "\e[3~": delete-char "\e[4~": end-of-line set bell-style visible set meta-flag On set convert-meta Off set output-meta On set horizontal-scroll-mode On set show-all-if-ambiguous On # (F1 .. F5) are "\e[[A" ... "\e[[E" "\e[[A": "info " ______________________________________________________________________ 10. 役に立つプログラム 10.1. ファイルのブラウズ less このファイルブラウザを毎日使うはずですから、使いこなせるよう、少しコツ をお教えしましょう。一番最初に、less がプレーンテキスト以外の圧縮ファ イルやアーカイブも表示できるようになっていることをシステム管理者に確認 しておいてください。 最近のバージョンの TYPE のように, less もファイルを両方向にブラウズし ます。また、キー入力により数種類のコマンドを受け付けます。最も役に立つ ものは: o 最初に、q を押せば終了します。 o h で拡張ヘルプを表示します。 o g でファイルの先頭に移動します。G はファイルの末尾への移動です。番 号+g は番号で指定した行への移動(例えば、125g は125行へ移動)、数値+% は数値で示した割合でファイルを分割した行に移動します。 o /pattern は「pattern」を前方検索し、n は次にマッチする文字列を探し ます。?pattern と N は後方検索です。 o m+文字 は現在の位置をマークします(例 ma)。'+文字 はマークした位置に ジャンプします。 o !command はシェルのコマンドを実行します。 10.2. Linux での付番によるバックアップ 悲しいことに、Linux ではまだファイルのバージョン番号がサポートされてい ませんが、二通りの方法でこの制約を克服することができます。一つ目の方法 は RCS ( Revision ControlSystem )を使うことで、これは変更前ファイルを 保存しておくことができます。 RCS は「 RCS MINI-HOWTO 」で解説されてい ます。( ) (訳注:RCS MINI-HOWTO 日本語訳 はここ) 二つ目の方法は、付番してバックアップすることのできるエディタを使うこと です。emacs や jed なら OK です。emacs は、 .emacs に次のコードを追加 します。 (setq version-control t) (setq kept-new-versions 15) ;;; or any other value (setq kept-old-versions 15) (setq backup-by-copying-when-linked t) (setq backup-by-copying-when-mismatch t) jed の 0.98.7 以降のバージョンをお持ちの方は、 から入手できるパッチ をあてれば可能になります。 10.3. アーカイブ:tar と gzip UNIX では、ファイルを圧縮してアーカイブに納めることが広く行なわれてい ます。tar はファイルを集めて、アーカイブを作ります。新しいアーカイブの 作り方: $ tar -cvf [file...] アーカイブからファイルを取り出すには: $ tar -xpvf [file...] アーカイブの内容を一覧するには: $ tar -tf | less ディスクスペースを節約するために、compress か gzip を使ってファイルを 圧縮します。 compress はもはや旧式なので使うべきでありません。 $ compress $ gzip これによって .Z (compress)や .gz (gzip) などの拡張子付きのファイルが生 成されます。これらのプログラムではアーカイブは作られず、ファイルは個別 に圧縮されます。伸長するには: $ compress -d $ gzip -d RMP. unarj, zip や unzip ユーティリティなども使用可能です。拡張子 .tar.gz か .tgz がついたファイル( gzip で圧縮し、 tar でアーカイブにしたもの) は、UNIX ではかなり一般的です。 .tar.gz アーカイブの内容を一覧するに は、 $ tar -ztf | less とします。 .tar.gz アーカイブからファイルを取り出すには、 $ tar -zxf とします。 11. 実生活での例 UNIX の核となるアイデアは、単純なコマンドをパイプやリダイレクトにより 結合して、本当に複雑な作業でさえ行なえるようにすることです。以下の例を 御覧ください。最も混みいった問題についてのみ説明しましょう。他のことに ついては、これまでの章や man ページを参考にしてみてください。 問題 : ls を使うとファイルの一覧がスクロールして、画面から消えてしま う。 解答 : $ ls | less 問題 : 単語のリストを含んだファイルがあります。それを逆順でソートし、 印刷したいのですが。 解答: $ cat myfile.txt | sort -r | lpr 問題 : データファイル内に同じデータを含む行が幾つもあります。それを切 り詰める方法はありますか。 解答: $ sort datafile.dat | uniq > newfile.dat 問題 : 「mypaper.txt」か「mypaper.tex」か、それに似た名前のファイルが あるのですが、どこにあるのか思い出せません。見つける方法は? 解答: $ find ~ -name "mypaper*" 説明 : find はディレクトリツリー(この例では、~ 以降)の全てのファイル を一覧するすごく便利なコマンドです。-name を使いフィルターをかけて出力 することができます。 問題 : 「entropy」を含んだファイルがディレクトリ中にあります。 SEARCH コマンドのようにそれがどのファイルにあるか探す方法はありますか? 解決方法:はい、このようにします。 $ grep -l 'entropy' * 問題 : どこかに「entropy」を含んだテキストファイルがあると思うんです が、それがどこのなんていうファイルか知りたい。VMS では search entropy [...]*.*;* を使いましたが、grep ではサブディレクトリ以下を再帰的に探す ことができません。いい考えありますか? 解答: $ find . -exec grep -l "entropy" {} \; 2> /dev/null 説明:find . はカレントディレクトリから始めて、全てのファイル一覧を出 力し、 -exec grep -l "entropy" は各ファイルを対象に実行します ({} によ り表される)。\ はコマンドを終了させます。当然、この構文が面倒だと感じ るでしょうね。 代わりに、次のようなスクリプトファイルを書くと良いでしょう。 (訳注:私 は find . -type f |xargs grep 'entropy' のようにしています) ______________________________________________________________________ #!/bin/sh # rgrep: 再帰的な grep if [ $# != 3 ] then echo "Usage: rgrep --switches 'pattern' 'directory'" exit 1 fi find $3 -name "*" -exec grep $1 $2 {} \; 2> /dev/null ______________________________________________________________________ 説明: search のような grep と find とを組み合わせれば、両方の世界で最 も使いやすいものになると思います。 問題 : 2 行のヘッダーで始まるデータファイルがあり、各行には不要なス ペースで区切られた n 個のデータがあります。各行の 2 番目と 5 番目の データが欲しいのですが、Fortran でプログラムを書いた方がいいでしょう か? 解答 : いいえ、こっちの方が早い。 $ awk 'NL > 2 {print $2, "\t", $5}' datafile.dat > newfile.dat 説明:コマンド awk は実際はプログラム言語で、データファイルの 3 行目か ら開始して、各行の 2 番目と 5 番目をタブで区切ってプリントします。 awk を学びなさい --- 多くの時間を節約できますよ。 問題 : FTP サイトからダウンロードした ls-lR.gz の内容を調べたい。サブ ディレクトリ毎に「計 xxxx 」の行が含まれています。xxxx はディレクトリ 内容を KB 単位のサイズで表したものです。この xxxx の集計を行ないたいの ですが。 解答: $ zcat ls-lR.gz | awk ' $1 == "total" { i += $2 } END {print i}' 説明:zcat は .gz ファイルの内容を出力し、awk にパイプします。awk は man ページに丁寧にのっていますよ ;-) 問題:データファイルの値を計算する Fortran プログラム myprog がありま す。数百のファイルを読み込ませて結果を出力したいのですが、データファイ ル名をいちいち打つのが面倒です。VMS では長いコマンドファイルを書くと思 いますが、Linux ではどうすればいいのでしょう? 解答: すごく短いスクリプトでできますよ。myprog が常に「 mydata.dat 」 を読み、結果を標準出力( stdout )に表示するようにしておいて、次のスクリ プトを書きます。 ______________________________________________________________________ #!/bin/sh # myprog.sh: 多くの異なるファイルに対して同じコマンドを実行します。 # 使用方法: myprog.sh *.dat for file in $* # for all parameters (e.g. *.dat) do # ファイル名を result.dat に追加していきます。 echo -n "${file}: " >> results.dat # 現在の引数を mydata.dat にコピーして、myprog を実行します。 # そして、出力を results.dat に追加します。 cp ${file} mydata.dat ; myprog >> results.dat done ______________________________________________________________________ 問題 : 私のテキストファイル内の「geology」を全て「geophysics」に置き換 えたいのですが、手作業でしなければならないのでしょうか? 解答:いいえ、このシェルスクリプトを書いてください。 ______________________________________________________________________ #!/bin/sh # $* の $1 を $2 に置き換えます。 # 使用方法:replace "old-pattern" "new-pattern" file [file...] OLD=$1 # スクリプトの最初のパラメータ NEW=$2 # 2 番目のパラメータ shift ; shift # 最初の二つのパラメータを捨てる。次はファイル名です。 for file in $* # パラメータとして与えられた全てのファイルでループします。 do # OLD を NEW に置換して、テンポラリファイルに保存します。 sed "s/$OLD/$NEW/g" ${file} > ${file}.new # テンポラリファイルをオリジナルファイル名にリネームします。 /bin/mv ${file}.new ${file} done ______________________________________________________________________ 問題 : 幾つかデータファイルがあって、その長さは判らないんですが、最後 から 1 つ前の行と 2 つ前の行を削除するには 、えーと...手作業ですか? 解答: もちろん、ノー。スクリプトを書いてください。 ______________________________________________________________________ #!/bin/sh # prune.sh は n-1番目と n-2 番目の行をファイルから削除します。 # 使用方法: prune.sh file [file...] for file in $* # 全てのパラメータでループします。 do LINES=`wc -l $file | awk '{print $1}'` # ファイルの行番号 LINES=`expr $LINES - 3` # LINES = LINES - 3 head -n $LINES $file > $file.new # 最初 KINES 行を出力します。 tail -n 1 $file >> $file.new # 最終行を加えます。 done ______________________________________________________________________ これらの例があなたの興味をそそりますように... 12. これなしではやってゆけない秘訣 o コマンドの補完:コマンドを発行してる途中で を押せば、コマンド ラインの補完をしてくれます。例えば、less this_is_a_long_name とタイ プしなければならないとき、less thi と打つだけで十分です(同じ単 語で始まるファイルが他にもあるなら、曖昧さを解決するための文字を 補ってください)。 o バックスクロール:SHIFT--Page Up (灰色のキー)を押せば、数ページ分 バックスクロールします。あなたの PC のビデオメモリ容量にもよります が。 o 画面のリセット:more や cat でバイナリファイルを開いてしまったら、 画面上はゴミだらけの状態になるでしょう。これを直すには、 reset か、 文字列 echo CTRL-V ESC c RETURN を画面を見ずにタイプしてください。 o テキストの張り付け:コンソールモードなら次項を御覧ください。 X で は、xterm ウインドウでクリックとドラッグによりテキストを選択して、 真中のボタン( 2 ボタンマウスなら、二つのボタンを同時に)を押して張り 付けます。 o マウスの使用:コンソール用のマウスドライバ gpm がインストールされて いるか、システム管理者に尋ねてください。クリックとドラッグによりテ キストを選択し、右ボタンをクリックしてテキストを張り付けます。これ は異なる VC 間でも動作します。 13. Linux で VMS のテープを読むには (この章は Mike Miller によって書かれたものです) 13.1. はじめに 時々、VMS マシンで書き込んだテープ(あるいは、VMS と *nix システムで読 み取り可能なように作成したもの)を読み込みたいことがあるでしょう。概し て、これが DECFILES11A テープならまったく簡単です。 Linux mini-HOWTO の一部としてこれを読んだことがあるかも知れませんが、 ここでの情報はどの *nix システムでも適用可能だと信じます - 私 は、Linux、HP、 Sun それに DEC *nix システム上で行ないました。私が知っ ている主なプラットフォーム依存点は、異なるシステム毎にデバイス名が違う ことと、デバイス名を指定する mt のオプションです(例えば、Linux では mt -f 、HPUX 9なら mt -t)。 警告 - これは Exabyte 8mm SCSI テープ装置のみで試しました。他のフォー マット形式(まだ 9 トラックはあるのかしら)で読み込むことができたら、私 に知らせてください。ここに加えておきます。 13.2. 基礎 VMS の「 copy 」コマンドで作成されたテープ(あるいは、ともかく copy で 作成されたのと同じように作られたもの)を読むときに、実際のデータファイ ル毎にテープ上にある三つファイル - ヘッダー、データ、トレイラーのこと を知っておく必要があります。ヘッダーとトレイラーは VMS 上にあったとき のファイル情報を格納したものに関係あります。データは、もちろんデータの ことです。めいめいのファイルは dd コマンドでテープから取り出すことがで きます。mt コマンドでテープの位置をあちこちに移動させることができま す。 例:連続してファイルが書き込まれている VMS のテープがあります。最初の 二つは、VMS システムでのオリジナルの名前が ce66-2.evt と ce66-3.evt で す。テープラベルは c66a2 です。 もしこれらのコマンドを実行したなら、 > dd if=$TAPE bs=16k of=header1 > dd if=$TAPE bs=16k of=data1 > dd if=$TAPE bs=16k of=trailer1 > dd if=$TAPE bs=16k of=header2 > dd if=$TAPE bs=16k of=data2 > dd if=$TAPE bs=16k of=trailer2 6つのファイル - header1, data1, trailer1, header2, data2 と trailer2 を取り出せます。ここでの構文は、if="入力ファイル", bs="ブロックサイズ" そして、of="出力ファイル"です。TAPE はあなたのテープ装置の装置名称に応 じて変更されることでしょう。 - 例えば、Linux での一番目の SCSI テープ は /dev/nts0 です。 最初のファイルじゃなく 2 番目のファイルを読みたいときに、ヘッダーにつ いては気にせずによくて、さらにオリジナルのファイル名を使いたければ、こ のようにします。 > mt -f $TAPE fsf 4 > dd if=$TAPE bs=16k of=ce66-2.evt > mt -f $TAPE fsf 1 4 は最初のファイルから 3 つのファイルと、次のヘッダの一つをスキップす るためにあることに注意してください。二つ目の mt は 2 番目のファイルの トレイラーをスキップして、次のファイル - 3 番目の VMS ヘッダー の先頭 にテープの位置を移します。mt を使って、後方( bsf )にスキップしたり、巻 き戻したり ( rewind )、巻き戻してアンロード( offline, rewoffl )するこ ともまたできます。 13.3. 詳細 ヘッダーとトレイラーファイルは、ブロックサイズなどのファイル情報を保存 するために VMS で使われる大文字の ASCII データを含んだものです。それら はまたファイル名も含んでおり、自動でファイルを読み込んだり、特定のファ イルをサーチするスクリプトを作るのに便利です。テープボリュームの一番目 のヘッダーは、それ以降のヘッダーとはわずかに異なっています。 上記の例で header1 に相当するテープ上の最初のファイルは、初めの4文字 が「VOL1」で始まり、その後にボリューム名が続きます。例では、header1 は VOL1C66A2 で始まります。数字で終る連続したスペースが続きます。その後 に、ファイルヘッダーであることを示す「 HDR1 」があります。HDR1 に続く 文字列が VMS ファイル名です。例では、HDR1CE66-2.EVT です。次のフィール ドは、再びボリューム名となります。 テープ上の最初のファイル以外のファイルには、語頭に VOL1 フィールドはあ りません。 VOL1 フィールドがないことを除けば、ヘッダーの構造は最初の ファイルとそれ以外のファイルも同じです。他に便利なフィールドは7番目の フィールドで、「 DECFILES11A 」で終るでしょう。これは DEC Files11A 規 格に適合しているテープには、このフィールドがあるはずです。 フィールド 最初のヘッダー 次のヘッダー ========= ================== ================== 1 VOL1 + ボリューム名 HDR1 + ファイル名 2 3HDR1 + ファイル名 ボリューム名 3 ボリューム名 6 ...DECFILES11A 7 ...DECFILES11A ヘッダーやトレイラーの完全なフォーマットの詳細については、DEC FILES11A ドキュメントを御覧ください(オレンジやグレイの壁の上にあります - 身近に いる VMS 信奉者に尋ねてください :-)。 13.4. ブロックサイズについての解説 例では、16k のブロックサイズを使いました。*nix システムでは、ディスク 上のファイルに関連づけたブロックサイズはありませんが、VMS での各ファイ ルには、固有のブロックサイズがあります。これは、テープを読むことさえ難 しくなければ、ブロックサイズは、Linux 界において大した問題ではないこと 意味します。もしブロックサイズを算出してテープを読むことが難しけれ ば、mt -f $TAPE setblk 0 を使って、ハードウェアブロックサイズを設定す ることができます。setblk オプションの正確な形式(と、使用可能かどうか) は mt のバージョンと、あなたが使用する特定の *nix の種類に依ります。 ( setblk について指摘してくれた Wojtek Skulski に感謝 ( )) 14. 終りに 14.1. Copyright Unless otherwise stated, Linux HOWTO documents are copyrighted by their respective authors. Linux HOWTO documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, as long as this copyright notice is retained on all copies. Commercial redistribution is allowed and encouraged; however, the author would like to be notified of any such distributions. 特に断らない限り、Linux HOWTO ドキュメントはそれぞれの著者の著作物で す。Linux HOWTO ドキュメントは、全てのコピーにおいて copyright が保持 されている限り、どのような物理的あるいは電子的なメディアによっても、全 部あるいはその一部を複製し、配布することができます。商用の再配布につい ても許可や奨励をされていますが、そのようないかなる配布に関しても、著者 は通知されることを望んでいます。 All translations, derivative works, or aggregate works incorporating any Linux HOWTO documents must be covered under this copyright notice. That is, you may not produce a derivative work from a HOWTO and impose additional restrictions on its distribution. Exceptions to these rules may be granted under certain conditions; please contact the Linux HOWTO coordinator at the address given below. 全ての翻訳、派生的な著作物、あるいはいずれかの Linux HOWTO 文書の内容 を取り入れて集合的な著作物はこの copyright の下で保護される必要があり ます。つまり、いずれかの HOWTO をもとにした著作物を作ってもその配布に 制限を追加してはいけません。ある条件の下では、これらの規則に対する例外 が認められる場合があります。下記のアドレスの Linux HOWTO のコーディ ネーターに連絡を取ってください。 In short, we wish to promote dissemination of this information through as many channels as possible. However, we do wish to retain copyright on the HOWTO documents, and would like to be notified of any plans to redistribute the HOWTOs. 要するに、私たちは可能な限り多くの経路を通じてこの情報の普及を促進する ことを望んでいます。しかし、私たちは HOWTO の文書の著作権を保持するこ とも強く望んでいますし、またそれら HOWTO の文書を再配布するどんな計画 も私たちに知らせていただければ幸甚に思います。 If you have questions, please contact Tim Bynum, the Linux HOWTO coordinator, at via email. 疑問があれば、Linux HOWTO のコーディネータである Tim Bynum まで e-mail で連絡してください。 14.2. Disclaimer This work was written following the experience we had at the Settore di Geofisica of the Universita' di Bologna (Italy), where a VAX 4000 has been superseded and replaced by Linux-based Pentium PCs. Most of my colleagues are VMS users, and some of them have switched to Linux. この仕事は、Settore di Geofisica of the Universita' di Bologna (Italy) において VAX 4000 を Linux ベースの Pentium PC にリプレースした経験に 基づいて書いたものです。私の同僚のほとんどは VMS ユーザで、そのうちの 数人が Linux に転向しました。 ``From VMS to Linux HOWTO'' was written by Guido Gonzato, , and Mike Miller, who contributed the section on reading VMS tapes. Many thanks to my colleagues and friends who helped me define the needs and habits of the average VMS user, especially to Dr. Warner Marzocchi. 「 From VMS to Linux HOWTO 」は Guido Gonzato と、Mike Miller (彼は VMS のテープを読むには の章で寄与しま した)により書かれたものです。私の同僚であり友人の Dr. Warner Marzocchi に多大なる感謝の念を捧げたい。彼は平均的な VMS ユーザが求めているもの や、やってしまいがちなことについて私にアドバイスしてくれました。 Please help me improve this HOWTO. I'm not a VMS expert and never will be, so your suggestions and bug reports are more than welcome. この HOWTO を改善する手助けをしてください。私は 今後とも VMS のエキス パートではないので、あなたの提案やバグリポートを歓迎します。 Enjoy, Guido =8-) 14.3. 日本語版謝辞 翻訳にあたって下記の皆さんからアドバイスやコメントをいただきました。ど うもありがとうございました。 佐野武俊さん 佐藤亮一さん 中谷千絵さん 武井伸光さん 高城正平さん 山崎@トロントさん Akihiro Kodaさん 大森保英さん 菊谷誠さん 福島於修さん