  From VMS to Linux HOWTO
  著者：Guido Gonzato,  <guido@ibogeo.df.unibo.it>, and Mike
  Miller,  <miller5@uiuc.edu>
  v1.1.3 1999年9月17日
  翻訳：青野 正幸  <masayuki@shikoku.ne.jp>
  日本語訳： 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 サイ ト <ftp://sunsite.unc.edu:/pub/Linux/docs/LDP>から入手可
  能な 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 の例です。
  # <TAB> と書いてあるところでは <TAB> キーを押してください！
  # 大切なことです：スペースはダメですよ。

  myprog: myprog.o file_1.o file_2.o file_3.o
  <TAB>g77 -o myprog myprog.o file_1.o file_2.o file_3.o

  # myprog は四つのオブジェクトファイルに依存します。

  myprog.o: myprog.f
  <TAB>g77 -c myprog.f
  # myprog.o はそれ自身のソースファイルに依存します。

  file_1.o: file_1.f
  <TAB>g77 -c file_1.f
  # file_1.o はそれ自身のソースファイルに依存します。

  file_2.o: file_2.f file_1.o
  <TAB>g77 -c file_2.f file_1.o
  # file_2.o はそれ自身のソースファイルとオブジェクトファイルに依存します。

  file_3.o: file_3.f file_2.o
  <TAB>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<libname> を加えま
  す。例えば、数学ライブラリと最適化オプションを付けてリンクするには、

       $ gcc -O2 -o mathprog mathprog.c -lm

  のようにします。

  ( -l<libname> スイッチは、 /usr/lib/lib<libname>.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        <http://www.mew.org/index.html>

  o  mutt-ja    <http://kondara.sdri.co.jp/~kikutani/mutt.html>

  o  cmail      <http://www.st.rim.or.jp/~fuku/cmail/index.html>

  o  MH-JP     <http://www.chem.eng.himeji-
     tech.ac.jp/~hayashi/internet/mh-plus.html>

  o  wonderlust  <http://www.gohome.org/wl/index.html>

  news リーダ

  o  mnews  <ftp://ftp.mei.co.jp/free/news/readers/>

  o  semi-gnus (兼 MUA )  <http://www.mdcnet.co.jp/~keiichi/semi-gnus-
     faq-ja.shtml>

  o  t-gnus  <http://www.jpl.org/elips/INSTALL-SEMI-ja.html>

  web ブラウザ

  o  lynx  <http://lynx.browser.org/index.html>

  o  w3m   <http://ei5nazha.yz.yamagata-u.ac.jp/~aito/w3m/>

  o  w3-mode on xemacs  <http://www.cs.indiana.edu/elisp/w3/docs.html>

  o  mmm  <http://pauillac.inria.fr/~furuse/jmmm/030/index.html>

  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) の３種類があります (VMS の owner,group,world
  に似てますね)。パーミッションには 読み取り許可 (read) 、書き込み許可
  (write 、削除許可も含む)、実行許可 (execute) の３種類があります。

  左から右に見ていきましょう。- はファイルの種類です( - は一般ファイ
  ル、d はディレクトリ、l はリンク等を示します)。 rwx はファイルの所有者
  に対するパーミッション( read, write, execute )です。次の r-x はファイ
  ル所有者の属するグループに対するパーミッション(read, execute) で、最後
  の r-x はそれ以外のユーザに対するパーミッションを(read, execute)を表し
  ています。

  ファイルのパーミッションを変更するには、

       $ chmod <whoXperm> <file>

  とし、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 <PID>

  プロセスを正規の手段で終了させる方法が判らなくても、あなたはプロセスを
  終了させる必要があると思います ... ;-) 時々、以下のどちらかでのみ終了
  させる場合があるでしょう(訳注：数字はシグナル番号で、9 は kill シグナ
  ル、15 は終了シグナルとして定義されています。 killall ならプロセス名を
  指定して終了させることができます)。

       $ kill -15 <PID>
       $ kill -9 <PID>

  付け加えると、シェルはプロセスの終了や一時停止、また、プロセスをバック
  グランドへ移したり、フォアグランドへ戻したりすることができます。このよ
  うな環境下で、プロセスを「ジョブ」と呼びます。

  o  ジョブがいくつあるか調べるには：

       $ jobs

  ジョブはシェルによって採番された番号で識別され、PID では識別されませ
  ん。

  o  フォアグランドプロセスを終了するには：

       $ CTRL-C

  (いつも効果があるとは限りません)

  o  フォアグランドプロセスを一時停止するには：

       $ CTRL-Z

  (同上)

  o  停止状態にあるプロセスをバックグランドに移すには(それはジョブとな
     る)：

       $ bg <job>

  o  ジョブをフォアグランドに戻すには：

       $ fg <job>

  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 <item>

  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 」で解説されてい
  ます。( <http://sunsite.unc.edu/mdw/HOWTO/mini/RCS.html>) (訳注：RCS
  MINI-HOWTO 日本語訳 <http://www.linux.or.jp/JF/JFdocs/RCS.html>はここ)

  二つ目の方法は、付番してバックアップすることのできるエディタを使うこと
  です。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 以降のバージョンをお持ちの方は、
  <http://ibogeo.df.unibo.it/guido/slang/backups.sl>から入手できるパッチ
  をあてれば可能になります。

  10.3.  アーカイブ：tar と gzip

  UNIX では、ファイルを圧縮してアーカイブに納めることが広く行なわれてい
  ます。tar はファイルを集めて、アーカイブを作ります。新しいアーカイブの
  作り方：

       $ tar -cvf <archive_name.tar> <file> [file...]

  アーカイブからファイルを取り出すには：

       $ tar -xpvf <archive_name.tar> [file...]

  アーカイブの内容を一覧するには：

       $ tar -tf <archive_name.tar> | less

  ディスクスペースを節約するために、compress か gzip を使ってファイルを
  圧縮します。 compress はもはや旧式なので使うべきでありません。

       $ compress <file>
       $ gzip <file>

  これによって .Z (compress)や .gz (gzip) などの拡張子付きのファイルが生
  成されます。これらのプログラムではアーカイブは作られず、ファイルは個別
  に圧縮されます。伸長するには：

       $ compress -d <file.Z>
       $ gzip -d <file.gz>

  RMP.

  unarj, zip や unzip ユーティリティなども使用可能です。拡張子 .tar.gz
  か .tgz がついたファイル( gzip で圧縮し、 tar でアーカイブにしたもの)
  は、UNIX ではかなり一般的です。 .tar.gz アーカイブの内容を一覧するに
  は、

       $ tar -ztf <file.tar.gz> | less

  とします。 .tar.gz アーカイブからファイルを取り出すには、

       $ tar -zxf <file.tar.gz>

  とします。

  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  コマンドの補完：コマンドを発行してる途中で <TAB> を押せば、コマンド
     ラインの補完をしてくれます。例えば、less this_is_a_long_name とタイ
     プしなければならないとき、less thi<TAB> と打つだけで十分です(同じ単
     語で始まるファイルが他にもあるなら、曖昧さを解決するための文字を
     補ってください)。

  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

  ６つのファイル - 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 に相当するテープ上の最初のファイルは、初めの４文字
  が「VOL1」で始まり、その後にボリューム名が続きます。例では、header1 は
  VOL1C66A2 で始まります。数字で終る連続したスペースが続きます。その後
  に、ファイルヘッダーであることを示す「 HDR1 」があります。HDR1 に続く
  文字列が VMS ファイル名です。例では、HDR1CE66-2.EVT です。次のフィール
  ドは、再びボリューム名となります。

  テープ上の最初のファイル以外のファイルには、語頭に VOL1 フィールドはあ
  りません。 VOL1 フィールドがないことを除けば、ヘッダーの構造は最初の
  ファイルとそれ以外のファイルも同じです。他に便利なフィールドは７番目の
  フィールドで、「 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 に感謝 (
  <mailto:skulski@nsrlc6.nsrl.rochester.edu>))

  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  <mailto:linux-howto@sunsite.unc.edu> via email.

  疑問があれば、Linux HOWTO のコーディネータである Tim Bynum
  <mailto:linux-howto@sunsite.unc.edu> まで 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,
  <mailto:guido ``at'' ibogeo.df.unibo.it>, and Mike Miller,
  <mailto:miller5@uiuc.edu> 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
  <mailto:guido@ibogeo.df.unibo.it> と、Mike Miller
  <mailto:miller5@uiuc.edu> (彼は 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さん
  大森保英さん
  菊谷誠さん
  福島於修さん

