藤田信之
MacintoshやWindowsが普及した今日でも,ネットワークの世界がUnix計算機を中心として動いている状況には変わりがない.普段NetscapeやEudoraだけを使っている人は,裏で動いているUnix計算機を意識することは少ないが,それでも一歩踏み込んだ使い方をしようと思えば,多少ともUnixについての知識が必要となる.そこで,そのような人を対象として,Unixのごく初歩を解説することにする.なおここでは,telnetを使ってすでに環境の整備されたUnix計算機にアクセスすることを前提として話を進める.不幸にしてUnix計算機の管理を任された人は,より専門的な書籍を参照していただきたい.
(1)電子メールの読み書き
最近では学会会場などでもネットワーク端末が置かれていることがあるし,出張の際など,先方の端末を借りて自分のメールアカウントにアクセスするケースも考えられる.中にはフロッピーディスクにEudoraの環境をインストールして持ち歩いている人もいるが,一般的には,telnetを使って自分のメールサーバにアクセスすることになる.これならば,端末の種類(Macintosh,Windows,ワークステーション,X端末)によらず同じ要領でメールの読み書きができるという利点もある.普段はEudoraを使っている人でも,Unixのmailコマンドを使ったメールの読み書きを覚えておいて損はないだろう.
(2)一般的なUnixコマンドの利用
MacintoshやWindowsのGUI環境も便利なものではあるが,ことテキストファイルの扱いに関して言えば,Unixに優るものはない.テキストを加工するためのさまざまなコマンド(grep,sortなど)が標準で準備されているのがUnixの最大の特徴と言っても過言ではないだろう.また多少なりともプログラミングの素養がある人ならば,シェルスクリプトやperlを使ってより能率的に作業を進めることができる.
(3)Unix上の解析プログラムなどの利用
例えば,ホモロジー検索,配列データベースの検索,マルチプルアラインメント,立体構造解析など,大きなデータベースを対象にしたり,膨大な計算量を必要とする解析には,Unix計算機が威力を発揮する.これらも最近ではネットワークを介したもの(メールサーバやWWWのフォームを利用したもの)が主流になりつつあるが,直接Unix上のコマンドを操作する方が効率的な場合もある.GCGに代表されるようにメニュー形式で利用できるものが増えているため,ことさらUnixの知識を必要としない場合もあるが,データの管理や出力の二次加工まで含めて考えると,やはり最低限のUnixの知識は必要である.
(4)ホームページの開設
MacintoshでWWWサーバを運用することも可能だが,システムの安定稼動,処理スピード,CGIスクリプトの利用などを考えると,Unix上にホームページを持つ方が何かと都合がよい.民間のプロバイダを利用する場合など,ftpでHTMLファイルを転送するだけでも最低限の用は果たせるが,Unixのシェルアカウントを取得すれば,CGIなどを駆使したより高度な利用が可能になる.
__________________________________________________________________________ SunOS UNIX (antigen) login: nfujita[CR] ← ユーザIDを入力する Password:XXXXXXX[CR] ← パスワードを入力する Last login: Mon May 13 17:50:16 from labmolg-17 SunOS Release 4.1.3-JLE1.1.3 (GENERIC) #1: Tue Aug 4 19:16:17 JST 1992 You have new mail. TERM = (vt100)[CR] ← 端末形式を入力する % mail[CR] ← 必要な作業を行う __________________________________________________________________________この例のように,ユーザID,パスワードを順に入力する.パスワードを入力する際には,入力した文字は画面には表示されない.ホスト側の設定や接続経路によっては,パスワードの後に端末形式を聞いてくることがある.NCSA−Telnetなどの主な端末ソフトウェアにはVT100という端末をエミュレートするモードが備わっているので,あらかじめこのモードに設定しておく.一方のホストの方は標準でVT100形式の端末を仮定しているところがほとんどなので,端末形式の問い合わせに対しては単に「return」キーだけを入力すればよい.
% logout[CR]と入力してUnixとの接続を切る.
図1 Unixのファイルシステムの一例
Unix計算機の多くは多人数で利用することを前提としているため,それぞれのユーザが自由に利用できるディレクトリは限られている.これをホームディレクトリと言い,ログインした時には自動的にそのディレクトリに入るようになっている.ホームディレクトリの下にさらにディレクトリ(サブディレクトリ)を作ることはユーザの自由である.自分なりにサブディレクトリを作ってデータを管理するとよいだろう.ただしメールの読み書きに使う程度であれば,ホームディレクトリ以外は特に意識する必要はない.
一番もとになるディレクトリはルート(root)と呼ばれ,「/」という1文字で表現される.Windowsではルート(「\」で表現される)の前に装置名を表すA:やC:が付くが,Unixではディスク装置やその他の入出力装置も含めてすべてが単一のルートのもとに置かれる点が異なる.あるファイルやディレクトリへの道すじ(パス)を表すには,ルートからそこに至るまでのディレクトリ名とファイル名を順に「/」で区切って表現する.これを絶対パス指定という.例えば,図1の中のportrait.gifというファイルを絶対パスで表現すると</home/watashi/images/portrait.gif>となる.一方,現在いる場所(カレントディレクトリ)を基準として,他のディレクトリやファイルを指定することもできる.これを相対パス指定という.その際,1つ上位のディレクトリを表すために「..」という表現を使う.例えば,図1でindex.htmlの中からportrait.gifを参照するには<../images/portrait.gif>という相対パスを用いることができる.
ディレクトリの内容を表示するにはlsというコマンドを用いる.次のような要領で使用する.ディレクトリ名を省略した場合はカレントディレクトリが対象となる.
% ls[CR] カレントディレクトリのファイル一覧を表示 % ls -l[CR 上と同じだが,日付やサイズなどの情報も一緒に表示 % ls *.html[CR] 名前が「.html」で終わるものだけを表示 % ls sub[CR] 相対パスによるディレクトリの指定 % ls /dir1/dir2[CR] 絶対パスによるディレクトリの指定
> この記号に続くファイル(または装置)に出力を切り換える >> 上と同じだが,ディスクファイルに対しては追加モードで出力される < この記号に続くファイル(または装置)に入力を切り換える例えば,catというコマンドは普通,
% cat file_name[CR]のようにテキストファイルの内容を画面に表示するために用いられるが,ファイル名を省略すると標準入力が仮定される.つまり,
% cat[CR]とすると,それ以降端末のキーボード(標準入力)から入力した文字がそのまま画面(標準出力)に表示される(終了するにはファイルの終わりの印であるcontrol-Dを入力する).その際,出力のリダイレクションを使って,
% cat > file_name[CR]としておくと,キーボードからの入力がそのまま「file_name」というファイルに記録されるようになる.この使い方は,実際に数行程度のファイルを作成するときに役に立つ.また,入力と出力をともにファイルにリダイレクトして,
% cat < file_name_1 > file_name_2[CR]とすると(最初の「<」は省略してもよい),「file_name_1」の内容がそのまま「file_name_2」にコピーされる.このように,cat自身は非常に単純なコマンドだが,入出力を柔軟に切り換えることによって,多彩な使い方が可能になる.
% command1 < input_file > temp_file_1[CR] % command2 < temp_file_1 > temp_file_2[CR] % command3 < temp_file_2 > output_file[CR]という3行のコマンドは,パイプを使うと,
% command1 < input_file | command2 | command3 > output_file[CR]の1行で表現することができる.表現が単純化されるだけでなく,無駄な中間ファイルを作らずに済む,3つのコマンドが同時に実行されるため速い,などのメリットもある.
[cp:ファイルのコピー] % cp file_1 file_2[CR] file_1を同じディレクトリ内にfile_2という名前でコピー % cp file directory[CR] fileをdirectoryという名前のディレクトリにコピー [rm:ファイルの削除] % rm file_1 file_2[CR] 指定したファイルを削除 % rm -r directory[CR] 指定したディレクトリ以下をすべて削除 [mv:ファイルの移動,ファイル名の変更] % mv file_1 file_2[CR] file_1をfile_2という名前に変更 % mv file directory[CR] fileをdirectoryという名前のディレクトリに移動 [mkdir:ディレクトリの作成] % mkdir directory[CR] directoryという名前のサブディレクトリを作成 [rmdir:ディレクトリの削除] % rmdir directory[CR] directoryという名前のディレクトリを削除 ただしディレクトリは空である必要がある [cd:ディレクトリ間の移動] % cd directory[CR] directoryという名前のサブディレクトリに移動 % cd /dir1/dir2/dir3[CR] 絶対パスによる移動先の指定 % cd ..[CR] 1つ上のディレクトリに移動 % cd[CR] ホームディレクトリに戻る [pwd:カレントディレクトリの表示] % pwd[CR] カレントディレクトリを絶対パスで表示 [more:ページ制御付きの画面出力(同様のコマンドにpg,lessなどがある)] % ls -l | more[CR] lsコマンドの結果をページ制御付きで出力
% vi file_name[CR]としてviを起動すると,まず編集モードになる.file_nameがすでにあるファイルならその先頭部分が画面に表示される.この状態で使用できる基本的なコマンドとしては次のものがある.
j 1行下へカーソルを移動 k 1行上へカーソルを移動 h 1文字左へカーソルを移動 l 1文字右へカーソルを移動 /文字列[CR] 文字列を検索してその位置にカーソルを移動 i 入力モードへ移行(カーソルの位置から入力を開始) a 入力モードへ移行(カーソルの右隣の位置から入力を開始) x カーソルのある1文字を消去 10x カーソルのある文字以降10文字を消去 dd カーソルのある1行を消去 10dd カーソルのある行以降10行を消去 :wq[CR] 編集したファイルを書き込んで終了 :q![CR] 編集したファイルを放棄して終了小文字の「i」または「a」のキーを押すと入力モードになる.このモードではキーボードから打ち込んだ文字がそのまま画面に表示される.間違って入力した文字は「delete」キーで消去できる.また「return」キーを押せば画面上でも改行が行われる.ただし,入力モードではカーソルを移動させるということができない.カーソルを移動させたければ,一旦編集モードに戻る必要がある.入力モードから編集モードに戻るには「esc」キーを押す.もう一度繰り返そう.viには2つのモードがあり,モード間の移動は,
aまたはi (編集モードから入力モードへ)で行うことができる.もし,自分がどちらのモードにいるのかわからなくなったら(実際わからなくなることがよくある),ためらわずに「esc」キーを押そう.もし入力モードにいたのなら編集モードに戻るし,もし編集モードにいたのならビープ音で知らせてくれる.いずれにせよ,「esc」キーを押した直後は必ず編集モードにいることになる.
esc (入力モードから編集モードへ)
(1)メールを送る
メールを送るには,次のようにパラメータとして相手アドレスを指定してmailコマンドを起動する.
% mail nfujita@lab.nig.ac.jp[CR]複数のアドレスをスペースで区切って並べることもできる.例えば,
% mail address_1 address_2 address_3[CR]とすれば,これから入力するメールが3つのアドレスに同時に配送される.
~v[CR]とすれば,一時的にviエディタを呼び出すことができる.すでに入力された行があれば自動的にエディタに読み込まれる.編集後エディタを終了すると呼び出す前の状態に戻る.(b)はアプリケーション間のコピー&ペーストまたは端末ソフトの「テキスト送信」の機能を使って,あらかじめ準備しておいた文章をカーソル位置に流し込めばよい.(c)は新しい行の先頭で,
~r file_name[CR]と入力することにより,Unix上のファイル「file_name」がカーソルの位置に挿入される.以上3つの方法を組み合わせることもできる.メールの入力にいずれの方法を用いるにせよ,最後にメール文の終わりをmailコマンドに教えてやる必要がある.新しい行の先頭で「control-D」を入力するか,または,
.[CR] と入力する.これでメールの発送は完了する.(2)メールを読む
>N 1 Sanzo Miyazawa Mon May 20 20:39 74/3133 Re: SINET kokusai-link pa >N 2 INET Ugawa 00251 Mon May 20 23:24 62/2347 [INET] 1-4-3 Q Stream * 2 >N 3 LSD 02334 Take Mon May 20 23:25 47/2371 [LSD] H.8 Database budget >N 4 Eric Muehling Tue May 21 04:03 89/3590 [MacPerl] Path divide >N 5 uncover@csi.carl.org Tue May 21 06:19 255/8124 UnCover Reveal - Molecula >?最後に?マークが表示されるが,これはmailコマンドのプロンプトで,これに続けていろいろなサブコマンドを入力する.メールを読むには,?に続けて読みたいメールの番号を入力し「return」キーを押せばよい.メール文が1ページに納まらない場合は1ページごとに表示が停止するので,再び?が現れるまで,スペースキー(システムによっては「return」キー)を押してページを進める.さらに別のメールを読むには,?に続けて別の番号を入力する.番号以外に指定できるサブコマンドの主なものをあげると,
? n[CR] 次のメールを読む ? s 1 file_name[CR] 1番目のメールを"file_name"というファイルに保存する ? d 1[CR] 1番目のメールを削除する ? q[CR] すでに読んだメールを保存してmailコマンドを終了する ? x[CR] メールをそのままにしてmailコマンドを終了する終了するためのコマンドには「q」と「x」がある.「q」を使えば,一度読んだメールは各自のホームディレクトリのmboxというファイルに保存した上でリストからは削除されるので,同じメールを何度も読まずに済む.過去の記録をさかのぼりたければ,
% mail -f mbox[CR]としてmailコマンドを起動すれば,mboxに保存されているメールを閲覧することができる.
(3)メールの自動転送
Unixでは,あるアドレスに届けられたメールを自動的に他のアドレスに転送することができるので,この機能を使って複数のアドレスを一元的に管理することができる.また長期の出張の際など,出先のアドレスに自動転送するように設定しておいてもよいだろう.
メールを自動的に転送させるには,自分のホームディレクトリに「.forward」という名前のファイルを作り,その中に転送先のアドレスを書いておくだけでよい.「.」で始まるファイルは通常lsコマンドでは表示されないが,-aオプションを付ければ,その存在を確認することができる.システムによっては,vacationというUnixコマンドを使って,メールの発信者に「不在通知」などのメッセージを返すことができる.ただし,間違ってメーリングリストからのメールに対して自動応答すると,無限ループに陥ってしまう危険性がある.メーリングリストに加入している人は使用すべきではない.
% nkf -e input_file > output_file[CR] EUCコードへの変換 % nkf -s input_file > output_file[CR] shift-JISコードへの変換 % nkf -j input_file > output_file[CR] JISコードへの変換また,パイプの下段に置いて次のように使うこともできる.端末ソフトがEUCコードをサポートしていない場合(つまり端末側でEUCからshift−JISへの自動変換ができない場合)などに便利だろう.
% mail | nkf -s[CR] mailコマンドの出力を逐次shift−JISに変換文字コードの変換はパソコン上で行うこともできる.フリーウェアの変換ツールがいくつかあるのでそれを利用するとよいだろう.筆者はMacintosh上ではドラッグ&ドロップで使用できるJCONV−DD(Nat Sakimura氏作のdonation−ware)を愛用している.
% cat file_name[CR]としてファイルの内容を画面に表示させ,後で必要な部分だけをコピー&ペーストでエディタなどに取り込めばよい.NCSA−Telnetであれば,「Session」メニューの中のCapture Session to Fileをチェックしておけば,画面表示されたものがすべてファイルに残るので,後でそのファイルを編集してもよい.
% cat > file_name[CR]を実行する.それ以降に端末から送られたデータはそのまま「file_name」という名前のファイルに取り込まれるので,コピー&ペーストなどの手段を使って必要なファイルを流し込めばよい.最後に「control-D」を入力すれば,catコマンドが終了し,再びプロンプトが現れる.
-rw------- 1 nfujita 183315 Jul 7 09:00 mbox -rw-r--r-- 1 nfujita 228 Jul 7 09:12 temporal drwxr-xr-x 8 nfujita 512 Jun 18 17:45 project-a/ drwx--x--x 10 nfujita 512 Jul 2 12:41 project-b/このうち左端に表示されている10個の文字は,ファイルもしくはディレクトリの属性を表している.10個の文字はそれぞれ以下の意味を持っている.
drwxrwxrwx ^ ← ディレクトリかどうか ^^^ ← user(ユーザ自身)の権限 ^^^ ← group(同じグループの人)の権限 ^^^ ← others(その他のユーザ)の権限最初の文字がdの場合は,それがファイルではなくディレクトリであることを表している.それに続く3つの文字はユーザ自身の権限を表しており,左から順に読み取りの許可(r)または禁止(-),書き込み・変更の許可(w)または禁止(-),実行(ディレクトリの場合は移動)の許可(x)または禁止(-)の意味である.さらに,同一グループのユーザおよびその他のユーザの権限が同じ要領で記載されている.
% chmod g+w file_name[CR] 同じグループの人に対して書き込みを許可する % chmod u+x file_name[CR] ユーザ自身に対して実行(移動)を許可する % chmod go-rw file_name[CR] 同じグループおよびその他の人(すなわちユーザ以外の全員)に対して読み書きを禁止する