第11回 ネットワークの利用 1.リモートホストの操作 UNIXではネットワークにつながったホストを別のホストからアク セスすることができる。リモートのホストにあるファイルをコピー するためには rcp, リモートのホストでコマンドを実行するため には rsh を使う。ただし、これらのコマンドを使うためにはあら かじめ、どのホストからのアクセスならば実行して良いかを設定す る必要がある。そのためのファイルが /etc/hosts.equiv および .rhosts である。 [/etc/hosts.equiv, .rhosts] ネットワークを通してリモートのホストにアクセスする際に、セ キュリティーに関して問題が出てくるので、どのホストのどのユー ザからのアクセスをパスワードなしで許可するかどうかを記述する 必要がある。このような信頼できるホスト、およびユーザを記述し ておくのは、/etc/hosts.equiv と .rhosts である。 /etc/hosts.equiv はそのホスト全体でどのホストが信頼できる かを記述したファイルである。/etc/hosts.equiv に書かれてある ホストからのアクセスは信頼できるものとみなされる。 /etc/hosts.equiv は root でしか変更できないため、一般ユー ザはこれ以外のホストを利用するためには. rhosts を記述する必 要がある。自分のホームディレクトリに .rhosts というファイル を作り、その中にどこからのアクセスを信頼するかを書いておく。 例えば、ユーザ名 foo のユーザが mike や kuro から chobi が パスワードなしでアクセスできるようにするためには chobi のホー ムディレクトリに図1のようなファイルを作れば良い。 - ---------------- 図1はじめ-------------------------------- (J~(B/.rhosts の内容 mike,kuroからfooのアクセスを信頼する - ---------------------------------------------------------- mike foo kuro foo - ---------------- 図1おわり-------------------------------- このように .rhosts には ホスト名 ユーザ名 を書く。このようにしておくと、<ホスト名>で示されたホストから <ユーザ名>のユーザがアクセスしてきた時はパスワードなしで利用 できるようになる。 /etc/hosts.equiv にも .rhosts にも書かれていないホストおよ びユーザからのアクセスがあった時は必ずパスワードが求められる。 [rcp] リモートホストのファイルのコピー 普通のコピーは cp コマンドを使ったが、リモートホストのファ イルのコピーには rcp というコマンドを使う。使い方は cp とほ とんど同じだが、ファイル名に ホスト名をつけてどのホストのファ イルを cp するかを ホスト名:ファイル名 として指定することができる。 - ---------------- 図2はじめ-------------------------------- rcp の使い方 - ---------------------------------------------------------- rcp ファイル ファイル rcp ファイル ... ディレクトリ ファイル名、ディレクトリ名としては ホスト名:パス名 が使うことができる。 - ---------------- 図2おわり-------------------------------- 例えば chobi に login している時、mike の /etc/passwd を コピーしてこようと思ったら図3のようにすれば mike の /etc/passwd がカレントディレクトリにコピーされる。 - ---------------- 図3はじめ-------------------------------- mike の /etc/passwd を chobi のカレントディレクトリにコピー - ---------------------------------------------------------- chobi % rcp mike:/etc/passwd . chobi % ■ - ---------------- 図3おわり-------------------------------- 逆に、chobi のカレントディレクトリにある report.dvi を mike の /usr/tmpディレクトリにコピーする場合は、図4のように すればよい。 - ---------------- 図4はじめ-------------------------------- chobi の report.dvi を mike の /usr/tmp にコピー - ---------------------------------------------------------- chobi % rcp report.dvi mike:/usr/tmp chobi % ■ - ---------------- 図4おわり-------------------------------- 注意しなければならないのは、リモートホストのディレクトリは ホームディレクトリになっているということである。決して、今 login しているホストのカレントディレクトリと同じところにいる わけではない。したがって、リモートホストのパス名は絶対パス指 定かホームディレクトリからの相対パス指定にしないといけない。 rcp でコピーする場合にも cp の時と同じように、パーミッショ ンが書き込みが許可になっていないと当然コピーされないし、その リモートホストに login できて且つ .rhosts などで設定してある ホストからしか実行は許可されない。 [rsh] リモートホストのコマンドの実行 リモートホスト上のコマンドを実行するためには、rsh というコ マンドを使う。ただし、SystemV では rsh は restricted shell, すなわち限定shell と呼ばれるものでここで説明している rsh と は別ものである。rsh が限定shell の場合は、代わりに remsh と いうコマンドを使う。 rsh の使い方は図5の通りである。 - ---------------- 図5はじめ-------------------------------- rsh の使い方 - ---------------------------------------------------------- rsh ホスト名 コマンド .... ホスト名で示されたホストでコマンドを実行する - ---------------- 図5おわり-------------------------------- 例えば、chobi から mike の /etc/hosts を cat しようと思ったら 図6のようにする。 - ---------------- 図6はじめ-------------------------------- mike の /etc/hosts を cat する場合 - ---------------------------------------------------------- chobi % rsh mike cat /etc/hosts # # Host Database # 127.0.0.1 localhost 192.50.220.35 mike 192.50.220.36 kuro 192.50.220.67 chobi chobi % ■ - ---------------- 図6おわり-------------------------------- rsh を使う場合も rcp と同様、ディレクトリには注意する必要 がある。rsh で入った時はカレントディレクトリはこちらのカレン トディレクトリと同じディレクトリではリモートホストのホームディ レクトリなのである。 [ftp] ファイル転送プログラム (file transfer program) リモートホストからファイルを転送するためのコマンドとして ftp というコマンドも利用できる。ftp は rcp とは違ってもっと 会話的に利用できる。 例えば、chobi で mike に対して ftp をかけるには図7のようにする。 - ---------------- 図7はじめ-------------------------------- ftp の実行(1) - ---------------------------------------------------------- chobi % ftp mike Connected to mike. 220 mike FTP server (Version 4.1 Thu May 9 17:32:17 JST 1991) ready. Name (mike:foo):■ - ---------------- 図7おわり-------------------------------- このように ftp の接続ができると、まずユーザ名を求められる。 そこでユーザ名を入力する。 - ---------------- 図8はじめ-------------------------------- ftp の実行(2) ユーザ名の入力 - ---------------------------------------------------------- Name (mike:foo): foo 331 Password required for foo. Password:■ - ---------------- 図8おわり-------------------------------- 次はパスワードを求められるので入力する。 - ---------------- 図9はじめ-------------------------------- ftp の実行(3) パスワードの入力 - ---------------------------------------------------------- 331 Password required for foo. Password: 230 User foo logged in. ftp>■ - ---------------- 図9おわり-------------------------------- ユーザ名、パスワードを正確に入力するとftp のプロンプトが出て くる。ここで help を入力するとどんなコマンドがあるかを教えて くれる。良く使うコマンドは、ls, cd, pwd, lcd, get, put, mget, mput, binary, ascii, quit である。 - ---------------- 図10はじめ-------------------------------- ftp のコマンド - ---------------------------------------------------------- ls リモートホストの ls をとる cd リモートホストで cd する pwd リモートホストでのカレントディレクトリを見る lcd ローカルホストで cd する get ファイルをリモートホストからローカルホストに とってくる put ローカルホストのファイルをリモートホストに書く mget 複数のファイルを get する mput 複数のファイルを put する binary 今後の転送はバイナリモードで行なうことを指示する ascii 今後の転送はアスキーモードで行なうことを指示する quit ftp を終了する - ---------------- 図10おわり-------------------------------- 頻繁に ftp でファイルを転送するならば (J~(B/.netrc にユーザ名お よびパスワードを書いておくと自動的に入力される。(J~(B/.netrc は 図11のようにに書く。 - ---------------- 図11はじめ-------------------------------- (J~(B/.netrc の書き方 - ---------------------------------------------------------- machine ホスト名 login ユーザ名 password パスワード - ---------------- 図11おわり-------------------------------- (J~(B/.netrc に書いておくと machine で書かれたホストに ftp した 時は自動的にユーザ名、パスワードが渡される。パスワードを書か ないといけないので (J~(B/.netrc のパーミッションは自分以外の人は 読み書き禁止になっていないといけない。しかし、パスワードを書 くのは危険なので安全のため普通の ftp のために(J~(B/.netrc は設定 しない方がいいだろう。 [anonymous ftp] ftp を使って anonymous ftp というサービスが利用できる。普 通の ftp ではアカウントを持っていないホストに対しては利用で きないが anonymous ftp の場合は、そこの ftp サーバにつなが ることができれば誰でも利用できる。最近では anonymous ftp を 使って、フリーのプログラムが提供されることが多い。 現在、日本でも多くの場所で anonymous ftp サービスが行なわ れている。例えば以下のところでサービスが行なわれている。 - ---------------- 図12はじめ-------------------------------- 国内の主要 ftp site 一覧 ホスト名[IPアドレス] - ---------------------------------------------------------- utsun.s.u-tokyo.ac.jp [133.11.11.11] ftp.ics.osaka-u.ac.jp [133.1.12.30] ftp.kuis.kyoto-u.ac.jp [130.54.20.1] ftp.csce.kyushu-u.ac.jp [133.5.19.3] sh.wide.ad.jp [133.4.11.11] wnoc-fuk.wide.ad.jp [133.4.14.3] ftp.cs.titech.ac.jp [131.112.172.15] ftp.dit.co.jp [133.156.1.1] ftp.ascii.co.jp [133.152.32.11] ftp.dcl.co.jp [133.143.1.1] srawgw.sra.co.jp [133.137.4.3] ftp.mei.co.jp [132.182.49.2] scslwide.sony.co.jp [133.138.199.1] ftp.ricoh.co.jp [133.139.211.2] ftp.tohoku.ac.jp [130.34.8.9] tutserver.tut.ac.jp [133.15.240.3] - ---------------- 図12おわり-------------------------------- 例えば、ftp.kuis.kyoto-u.ac.jp にある /BSD/386bsd-0.1-PC98-c2/disk1.lzh を anonymous ftp でとって くるのは次のようにする。 まず ftp コマンドで ftp.kuis.kyoto-u.ac.jp につなぐ。 ftp.kuis.kyoto-u.ac.jp というホスト名をしらない場合は IPアド レスを使えばよい。 無事に ftp.kuis.kyoto-u.ac.jp につながると Name を聞いてく るので、ここで anonymous もしくは ftp と入力する。この後 Password を聞いてくるので自分のメールアドレスを入力する。す ると ftp> というプロンプトが出てくる。 - ---------------- 図13はじめ-------------------------------- anonymous ftp の実行例(1) login する - ---------------------------------------------------------- % ftp ftp.kuis.kyoto-u.ac.jp (または ftp 130.54.20.1) Connected to isfs. 220 isfs FTP server (Version 5.60) ready. Name (ftp.kuis.kyoto-u.ac.jp:foo): ftp Password: foo@kuamp.kyoto-u.ac.jp <- メールアドレス 230 Guest 'foo@kuamp.kyoto-u.ac.jp' login ok ftp> ■ - ---------------- 図13おわり-------------------------------- メールアドレスを入れる時はエコーバックされない(入力した文 字が見えない)ので間違えないように入力しよう。(J~(B/.netrc に例え ば図14のように設定しておいてもよい。 - ---------------- 図14はじめ-------------------------------- anonymous ftp に対する (J~(B/.netrc の例 - ---------------------------------------------------------- machine ftp.kuis.kyoto-u.ac.jp login ftp password foo@kuamp.kyoto-u.ac.jp machine ftp.ics.osaka-u.ac.jp login ftp password foo@kuamp.kyoto-u.ac.jp - ---------------- 図14おわり-------------------------------- このようにしておけば ftp.kuis.kyoto-u.ac.jp に ftp した時 に、自動的に Name: で ftp, Password: で foo@kuamp.kyoto-u.ac.jp と入力してくれるので便利である。 - ---------------- 図15はじめ-------------------------------- (J~(B/.netrc を設定しておいた場合 - ---------------------------------------------------------- % ftp ftp.kuis.kyoto-u.ac.jp Connected to isfs. 220 isfs FTP server (Version 5.60) ready. 331 Guest login ok, send your E-MAIL ADDRESS as password. 230 Guest 'foo@kuamp.kyoto-u.ac.jp' login ok. ftp> ■ - ---------------- 図15おわり-------------------------------- password としてメールアドレスを入力した後は普通の ftp と同 じである。目的のディレクトリに移動し、get すればよい。バイナ リファイルの時に あらかじめ binary コマンドでバイナリ転送モー ドにしておくのを忘れないようにしないといけない。 - ---------------- 図16はじめ-------------------------------- anonymous ftp の実行例(2) - ---------------------------------------------------------- ftp> cd /BSD/386bsd-0.1-PC98-c2 250 CWD command successful. ftp> ls 200 PORT command successful. 150 Opening ASCII mode data connection for file list. COPYRIGHT COPYRIGHT.98 FILES.98 INSTALL.98 README.98 as.diff-c-to-c2 disk1.lzh disk2.lzh disk3.lzh disk4-1.lzh disk4-2.lzh disk5.lzh doc98.tar.Z lha.386bsd terry.tar.Z stand-wd.c.diff-c-to-c2 i286-Cx486SLC.tool 226 Transfer complete. 228 bytes received in 0.08 seconds (2.8 Kbytes/s) ftp> binary 200 Type set to I. ftp> get disk1.lzh 200 PORT command successful. 150 Opening BINARY mode data connection for disk1.lzh (557024 bytes). 226 Transfer complete. local: disk1.lzh remote: disk1.lzh 557024 bytes received in 5.2 seconds (1e+02 Kbytes/s) ftp> quit 221 Goodbye. % ■ - ---------------- 図16おわり-------------------------------- これでカレントディレクトリに disk1.lzh を持ってくることが できる。複数のファイルを一気にとってくる時は ftp の mget コ マンドを使うと便利である。 anonymous ftp は便利だがボランティアで行なわれており、ま たネットワークの回線もそれほど太いわけではないので日中の利用 はできるだけ控えるべきである。また、回線を有効に利用するため にもできるだけ近くの anonymous ftp サーバを利用したほうがよ い。 [archie] anonymous ftp サービスは便利だが、どこに何があるかがわか りにくい。わざわざ anonymous ftp で入っていろいろな場所に cd して、ls してみて探すのも大変である。 そこで、さまざまな anonymous ftp サーバーのどこにどんなファ イルがあるかをデータベースとしてもち、それを検索するサービス がarchie である。archie を使えばこういうファイル名をもったファ イルがどの anonymous ftp サーバのどのディレクトリにあるかを 調べることができる。 2.ネットワークで使われるアーカイバ、圧縮ツール ネットワーク上の News や anonymous ftp などを使って、フリー のプログラムなどが流されている。News などでは、プログラムは、 バイナリ・テキスト変換ツールや、アーカイバなどを使って変換さ れて流されている。ここでは、これらを元に戻す方法を説明する。 [shar/unshar] あまり量が多くなて、テキストファイルだけの場合、shar とい うアーカイバを使ってまとめられることが多い。shar でまとめら れたものは普通図17のようになっている。 - ---------------- 図17はじめ-------------------------------- shar でアーカイブされたファイル - ---------------------------------------------------------- #!/bin/sh # This is a shell archive (produced by shar 3.49) # To extract the files from this archive, save it to a file, remove # everything above the "!/bin/sh" line above, and type "sh file_name". # # ... ... .. .. .. exit 0 - ---------------- 図17おわり-------------------------------- このように、shar でまとめられたものは #!/bin/sh ではじまる shell script になっている。したがって、これを解凍するために は#!/bin/sh より上の行を消して、#!/bin/sh から最後までを 例 えば tmp.shar というファイルに save して、それを /bin/sh で 実行すればよい。 - ---------------- 図18はじめ-------------------------------- shar ファイルの解凍 - ---------------------------------------------------------- % head tmp.shar #!/bin/sh # This is a shell archive (produced by shar 3.49) # To extract the files from this archive, save it to a file, remove # everything above the "!/bin/sh" line above, and type "sh file_name". .... % sh tmp.shar .... - ---------------- 図18おわり-------------------------------- shar によって作られた shell script を使って自動的に解凍され る。 また、unshar というコマンドを使えば、わざわざ #!/bin/sh 以 前を消さなくても自動的に解凍してくれる。 [uuencode/uudecode] バイナリファイルの場合には、普通 uuencode を使ってテキスト に変換されて News に流される。uuencode で変換されると図19のよ うな感じになる。 - ---------------- 図19はじめ-------------------------------- uuencode でテキストに変換されたファイル - ---------------------------------------------------------- begin 644 sys98.tar.Z M'YV00YY R2(ER1$D5 H7,BPH<.'$"-*G$BQ(HB+-#*" ' 1Q P;-39VI &# MALB.'6O0^'BQA@P;,FZ4M!'C1LJ,-3A6W,FSI(J\(B^?0(,*'4JTJ-&C2),F5<"T MJ8($"5#.P&%#R!0B(*2485,FS)PR(&"XB/$4*H@A;^#DD9/F#!HZ32^^4*&@ (略) MS@L;G7/ SN<<3A4Z'P;;*TGG6N[3^> [=0X[EYUSNMN_4W37N>I(J\(BTRWZ+G5W MSB#?F1W=N9 2,-([AW7'(63=PPKAN:V[MHWKUC[HNB$HO&Y46RN@>;[2*[I /SQ5>QN[I^;%'V=WX1I4 end - ---------------- 図19おわり-------------------------------- このように begin ではじまり、end で終っている。これを解凍 するためにはbegin から end までをエディタなどを使って切り出 して、uudecode に入力すればよい。つまり、begin から end まで を切り出して例えば tmp.uue というファイルにsaveして、 uudecode を実行すれば、テキストから元のバイナリに変換される。 図20の例の場合だとsys98.tar.Z というファイルが作られる。 - ---------------- 図20はじめ-------------------------------- uudecode で元にもどす - ---------------------------------------------------------- % ls tmp.uue % head tmp.uue begin 644 sys98.tar.Z M'YV00YY R2(ER1$D5 H7,BPH<.'$"-*G$BQ(HB+-#*" ' 1Q P;-39VI &# MALB.'6O0^'BQA@P;,FZ4M!'C1LJ,-3A6W,FSI(J\(B^?0(,*'4JTJ-&C2),F5<"T MJ8($"5#.P&%#R!0B(*2485,FS)PR(&"XB/$4*H@A;^#DD9/F#!HZ32^^4*&@ .... end % uudecode tmp.uue % ls sys98.tar.Z tmp.uue % ■ - ---------------- 図20おわり-------------------------------- 巨大なプログラムなどの場合 uuencode されたテキストも巨大に なるので、複数の記事に分割されている場合もある。その場合は、 uuencode で変換された部分を順番通りにつなぎ合わせて一つのファ イルにしてから uudecode をかければよい。ただし、順番を間違え たり、変な行が入っていたり行が抜けていたりすると正しく復元で きない。 [compress/uncompress/zcat] shar などでは巨大になり過ぎるような場合などには、普通 compress という圧縮プログラムを使って圧縮し、それを uuencode してテキストにして News に投稿されている。このような場合 uudecode すると普通、.Z で終るファイル名をもつファイルができ る。compress されたファイルは .Z で終るファイル名を持つ。ま た、後で説明するanonymous ftp でも多くのファイルが compress で圧縮されている。 これを元に戻すためには uncompress を使う。例えば先ほどの uuencode/uudecode の例で出てきたファイルを uudecode すると sys98.tar.Z ができる。これを uncompress すると元にもどすこと ができる。compress で圧縮されていたのを元に戻し、ファイル名の 最後の .Z がなくなる。 - ---------------- 図21はじめ-------------------------------- uncompress の実行 - ---------------------------------------------------------- % ls sys.98.tar.Z tmp.uue % uncompress sys98.tar.Z % ls sys98.tar tmp.uue % ■ - ---------------- 図21おわり-------------------------------- uncompress のかわりに zcat を使うと、ファイルそのものを展 開してしまうのではなくて、展開した結果を標準出力に出力するよ うになる。例えば、compress したファイルも残しておきたい時な どは zcat を使って解凍する方法もある。 - ---------------- 図22はじめ-------------------------------- zcat の実行 - ---------------------------------------------------------- % zcat sys98.tar.Z > kernel.tar % ls kernel.tar sys98.tar.Z tmp.uue % ■ - ---------------- 図22おわり-------------------------------- [tar] 複数のファイルを一つにまとめるために tar というコマンドが よく使われる。tar コマンドにはいろいろオプションがあるがとり あえず知っていればいいのは図23のコマンドくらいである。 - ---------------- 図23はじめ-------------------------------- tar の使い方 - ---------------------------------------------------------- tar cf <出力ファイル> (ファイル、ディレクトリ.....) (ファイル、ディレクトリ....) で示されたファイルを <出力ファイル> にまとめる。<出力ファイル> のファイル 名は普通 .tar で終るようにする。 ディレクトリの下のファイルは全てまとめる対象となる。 tar xf <入力ファイル> ((ファイル etc)) tar でまとめられた <入力ファイル> を展開する ((ファイル etc))が指定されるとそのファイルだけを展開する。 ((ファイル etc))の指定がないと<入力ファイル>の中を全て展 開する。 tar tf <入力ファイル> tar でまとめられた <入力ファイル> の中のファイルのファ イル名を見る。 - ---------------- 図23おわり-------------------------------- それぞれの場合について、v オプションをつければどのファイルを 操作中かが表示される。 例えば、tar でまとめられたファイルを展開するためには図24の ようにすればよい。 - ---------------- 図24はじめ-------------------------------- tar ファイルの展開 (x コマンド) - ---------------------------------------------------------- % tar xvf sys98.tar drwxr-xr-x root/wheel 0 Jan 13 17:08 1993 ./ lrwxrwxrwx root/wheel 0 Jan 13 17:08 1993 sys -> ./usr/src/sys.386bsd drwxr-xr-x root/wheel 0 Jan 13 17:08 1993 usr/ drwxr-xr-x root/wheel 0 Jan 13 17:08 1993 usr/src/ drwxr-xr-x root/wheel 0 Jan 13 17:13 1993 usr/src/sys.386bsd/ -rw-r--r-- root/wheel 3072 Jul 14 00:25 1992 usr/src/sys.386bsd/ROADMAP drwxr-xr-x root/wheel 0 Jan 13 17:13 1993 usr/src/sys.386bsd/compile/ drwxr-xr-x root/wheel 0 Jan 13 17:14 1993 usr/src/sys.386bsd/conf/ -rw-r--r-- root/wheel 333 Dec 25 07:24 1991 usr/src/sys.386bsd/conf/defines -rw-r--r-- root/wheel 6575 Nov 18 23:14 1992 usr/src/sys.386bsd/conf/files -rwxr-xr-x root/wheel 2096 Jul 12 09:36 1992 usr/src/sys.386bsd/conf/newvers.sh .... % ls sys@ sys98.tar sys98.tar.Z tmp.uue usr/ % ■ - ---------------- 図24おわり-------------------------------- 展開せずにどんなファイルが入っているか知りたい時は tar の t コマンドを使う。この時は、実際にはファイルは展開されない。 - ---------------- 図25はじめ-------------------------------- tar ファイルの内容の確認 (t コマンド) - ---------------------------------------------------------- % tar tvf sys98.tar drwxr-xr-x root/wheel 0 Jan 13 17:08 1993 ./ lrwxrwxrwx root/wheel 0 Jan 13 17:08 1993 sys -> ./usr/src/sys.386bsd drwxr-xr-x root/wheel 0 Jan 13 17:08 1993 usr/ drwxr-xr-x root/wheel 0 Jan 13 17:08 1993 usr/src/ drwxr-xr-x root/wheel 0 Jan 13 17:13 1993 usr/src/sys.386bsd/ -rw-r--r-- root/wheel 3072 Jul 14 00:25 1992 usr/src/sys.386bsd/ROADMAP drwxr-xr-x root/wheel 0 Jan 13 17:13 1993 usr/src/sys.386bsd/compile/ drwxr-xr-x root/wheel 0 Jan 13 17:14 1993 usr/src/sys.386bsd/conf/ -rw-r--r-- root/wheel 333 Dec 25 07:24 1991 usr/src/sys.386bsd/conf/defines -rw-r--r-- root/wheel 6575 Nov 18 23:14 1992 usr/src/sys.386bsd/conf/files -rwxr-xr-x root/wheel 2096 Jul 12 09:36 1992 usr/src/sys.386bsd/conf/newvers.sh .... % ■ - ---------------- 図25おわり-------------------------------- tar でまとめるには tar の c コマンドを使う。 - ---------------- 図26はじめ-------------------------------- tar ファイルの生成 (c コマンド) - ---------------------------------------------------------- % ls doc/ % ls doc CONFIG.98 DEVICE.98 INSTALL.98 README.98 dospart.98 CONTRIB.98 FILES.98 KMC.98 TODO.98 loadfont8.98 COPYRIGHT GUIDE.98 MANIFEST.98 UPDATE.98 mtools.98 COPYRIGHT.98 HISTORY.98 PATCH.98 adjclkd.98 % tar cvf doc.tar doc doc/ doc/COPYRIGHT doc/CONFIG.98 doc/CONTRIB.98 doc/COPYRIGHT.98 .... % ls doc/ doc.tar % ■ mike foo kuro foo - ---------------- 図26おわり-------------------------------- [tar + compress] tar コマンドは単に複数のファイルをまとめるだけで圧縮を行な わない。したがって、tar を使う場合は普通 compress も使って、 tar.Z となるファイルを作ることが多い。これを展開するためには uncompress してからtar xf ... としても良いが図27のようにする こともできる。 - ---------------- 図27はじめ-------------------------------- tar + compress ファイルの解凍 - ---------------------------------------------------------- % zcat sys98.tar.Z | tar xf - - ---------------- 図27おわり-------------------------------- tar コマンドはファイル名として - を指定した時、標準入力/出 力を使うようになっている。したがってこの場合は、zcat で sys98.tar.Z を uncompress した結果を標準出力に出力し、それを パイプを使って tar の標準入力に入力する。tar ではファイル名 として - が指定されているのでパイプから来たデータを tar でま とめられたデータだと思って展開するのである。 3.その他のアーカイバ tarや compress/uncompress/zcat, uuencode/uudecode は UNIX に標準でついてくるので良く使われるが、その他にもさまざまなアー カイバが使われている。良く使われているものを幾つか簡単に説明 する。 [lha] 一番有名なのが lha である。これでまとめて圧縮したファイル はファイル名に .lzh がついている。DOS版もUNIX版も使い方はほ とんど同じである。引数なしで lha を実行すると help がでる。 - ---------------- 図28はじめ-------------------------------- lha のhelp - ---------------------------------------------------------- % lha LHarc for UNIX V 1.02 Copyright(C) 1989 Y.Tagawa LHx for MSDOS V C2.01 Copyright(C) 1990 H.Yoshizaki LHx(arc) for OSK V 2.01 Modified 1990 Momozou LHa for UNIX V 1.00 Copyright(C) 1992 Masaru Oki usage: lha [-]{axelvudmcp}[qvnfodizg012][w=] archive_file [file...] commands: options: a Add(or replace) to archive q quiet x,e EXtract from archive v verbose l,v List / Verbose List n not execute u Update newer files to archive f force (over write at extract) d Delete from archive t FILES are TEXT file m Move to archive (means 'ad') o use LHarc compatible method (a/u) c re-Construct new archive w= specify extract directory (x/e) p Print to STDOUT from archive d delete FILES after (a/u/c) t Test file CRC in archive i ignore directory path (x/e) z files not compress (a/u) g [Generic] format (for compatibility) 0/1/2 header level (a/u) e TEXT code convert from/to EUC % ■ - ---------------- 図28おわり-------------------------------- lha で圧縮されたファイルは lha の x コマンドで解凍できる。 たとえば、doc98.lzh を解凍するには、x(またはe) コマンドを使う。 - ---------------- 図29はじめ-------------------------------- .lzh ファイルの解凍 (x コマンド) - ---------------------------------------------------------- % lha x doc98.lzh CONFIG.sjs - Melted CONTRIB.sjs - Melted COPYRIGHT - Melted .... % ■ - ---------------- 図29おわり-------------------------------- 逆に lha で圧縮するには lha の a コマンドまたは c コマンドを 使う。図30のようにするとカレンドディレクトリの *.doc がまと められ圧縮されて doc.lzh というファイルが作られる。 - ---------------- 図30はじめ-------------------------------- lha で圧縮 (c コマンド) - ---------------------------------------------------------- % lha c doc.lzh *.doc CONFIG.doc - Frozen CONTRIB.doc - Frozen COPYRIGHT.doc - Frozen .... - ---------------- 図30おわり-------------------------------- [zoo] ファイル名が .zoo で終っているファイルは zooで圧縮されたファ イルである。zoo h で help が出る。解凍するには x コマンドを 使う。 - ---------------- 図31はじめ-------------------------------- zoo ファイルの解凍 (x コマンド) - ---------------------------------------------------------- % zoo x ファイル名 - ---------------- 図31おわり-------------------------------- [gzip] gzip は GNU の圧縮ツールである。compress などと同じように 使うことができ、compress よりも圧縮率は高い。ファイル名は compress では .Z となるのに対して gzip では .z になる。 gzip で圧縮されたファイルを展開するのには、gunzip を使う。 使い方は uncompress と同じである。 [GNU tar] UNIX には tar は標準でついてくるが、GNU の tar をつかうと いろいろなオプションがあり、非常に便利である。 例えば、GNU tar には、Z オプションがある。これは tar でま とめるときや展開する時に自動的に zcat, compress してくれると いうものである。 - ---------------- 図32はじめ-------------------------------- tar + compress ファイルの解凍 - ---------------------------------------------------------- 1. zcat と tar を使う場合 % zcat sys98.tar.Z | tar xf - 2. GNU tar を使う場合 % tar xZf sys98.tar.Z - ---------------- 図32おわり-------------------------------- - ---------------- 図33はじめ-------------------------------- tar + compress ファイルの生成 - ---------------------------------------------------------- 1. zcat と tar を使う場合 % tar cf - work | compress > work.tar.Z 2. GNU tar を使う場合 % tar cZf work.tar.Z work - ---------------- 図33おわり-------------------------------- GNU tar を使う場合でも実際には内部的に compress(uncompress)を 実行しているだけである。 また、gzip のパッケージに入っている GNU tar への patch を当てれば、 z オプションでは compress のかわりに gzip が使われるようになる。 [uuex/uudx] フリーの uuencode, uudecode として有名なのが、uuex/uudx である。 これはもともと DOS用に作られたものだがソースがあるので比較的簡単に UNIXでも動かすことができるようになる。 uudx の便利なところは、uudecode と違って News のヘッダ部分 などを切りとらなくても自動的に uuencode されたところを認識し て decode してくれるところである。 [patch/diff] プログラムなどを配布する時に、最初はソースなどを全部をまと めて配布されるが、bug があった時にそれを修正する場合や、 version up などの場合には、その前配布されたものからの差分だ けが配布されることが多い。差分にすると変更のなかった部分はま えの version を使うため、配布する量が少なくて済む。 この差分のことをパッチ(patch)という。パッチは普通、次のよ うな形式になっている。 - ---------------- 図34はじめ-------------------------------- パッチファイルの例 - ---------------------------------------------------------- *** hd.c.orig Thu Dec 24 07:05:07 1992 --- hd.c Wed Feb 10 21:44:42 1993 *************** *** 456,462 **** HDDEBUG2(printf("unit=%d ", unit)); bp->b_error = 0; ! #if 1 /* if not really a transfer, do control operations specially */ if (hd->dk_state < OPEN) { HDDEBUG2(printf("dk_state %ddk_state)); --- 456,462 ---- HDDEBUG2(printf("unit=%d ", unit)); bp->b_error = 0; ! #if 0/*1*/ /* if not really a transfer, do control operations specially */ if (hd->dk_state < OPEN) { HDDEBUG2(printf("dk_state %ddk_state)); *************** *** 716,722 **** } } ! #if 1 /* is it not a transfer, but a control operation? */ if (hd->dk_state < OPEN) { HDDEBUG2(printf("state %d dk_state)); - ---------------- 図34おわり-------------------------------- このパッチを自分のもっているプログラムなどに反映させること をパッチをあてるという。パッチを当てるためには patch という コマンドを使う。patch コマンドでパッチをあてるには図35のよう にする。 - ---------------- 図35はじめ-------------------------------- パッチのあて方 - ---------------------------------------------------------- % patch < patch-file - ---------------- 図35おわり-------------------------------- patch コマンドは標準入力からパッチを受けとり、どのファイル のどの位置をどのように変更するかをしらべて、そのファイルを変 更する。もとのファイルは .orig がついた名前で残される。patch コマンドで正常にパッチがあたらなかった時は、ファイル名に .rej がついたファイルにどのパッチがあたらなかったのかを書き 込む。パッチが正常にあてることができない時は、もとの version が間違っていることが多い。大抵「この version に当てるように」 と書かれているのでその version をあらかじめ手に入れる必要が ある。また、ディレクトリが関わってくると、-p オプションなど をつける必要がある。そのような場合、普通はパッチとともに、ど のように当てればいいかの説明があるのでそれに従えばよい。 パッチは diff コマンドを使って生成される。diff コマンドは 2つのファイルを受けとり、その差分を生成するコマンドである。 diff コマンドは図36のように使う。 - ---------------- 図36はじめ-------------------------------- diff の使い方 - ---------------------------------------------------------- % diff ファイル1 ファイル2 > 差分ファイル - ---------------- 図36おわり-------------------------------- このようにすると標準出力にファイル1からファイル2への差分が出 力される。その差分をファイルに出力したい時は適当にリダイレク トすればよい。このようにすると、ファイル1 からファイル2 へ更 新するためのパッチが得られる。逆にするとパッチを当てる時に Reversed (or previously applied) patch detected! patch -R? [y] というメッセージが出てくる。この場合は patch を -R オプショ ンをつけて実行する必要がある。 diff にはいろいろオプションがあり、さまざまな形式の差分を 出力する。例えば -c オプションをつけた場合、context diff と 呼ばれ変更部分の前後を含めて差分を出力する。context diff に するとパッチを見た時前後からどこが変更されたのかがわかりやす い。またある程度行数がずれていても前後から判断して適当な位置 にパッチを当てることができる場合がある。