連載 / Pe 日活用のヒント 図 13 ppm コマンドを使用した perl モジュールのインストール >ppm install Image—Magick. ppd InstaII ) Image—Magick' version 6 . 0.3 in ActivePer1 5 lnstalling C : *Per1*site*1ib*aut0*Image*Magick*Magick lnstalling C : *Per1*site*1ib*auto*Image*Magick*Magick lnstalling C : *Per1*site*1ib*auto*Image*Magick*Magick ・ exp lnstalling C : *PerI*site*1ib*auto*Image*Magick*Magick lnstalling C : *Per1*site*Iib*aut0*Image*Magick*Magick ・ pdb . 1ib . d11 . bs . 8 . 2 . 808 . Successfu11y installed Image—Magick version 6.0.3 in ActivePer1 5 . 8 . 2 .808 . lnstalling C : *PerI*site*Iib*Image*Magick ・ pm lnstalling C : *PerI*site*Iib*auto*Image*Magick*autospIit . ix FiIes found in blib*arch: installing files in blib*lib into architecture dependent library tree ドウを閉じる操作でおこなう。 インストール ImageMagick のインストール UNIX MAGAZINE 2004.9 し、図 13 の操作を実行する。つまり、 ActivePerl の ppm PerlMagick (XXX にはバージョン番号が入る ) に移動 それから、 *Program FiIes*ImageMagick-XXX* >set HTTP_proxy=http: //proxy. your. domain : 8080 ジにアクセスできない場合は以下の操作をおこなう。 プロキシー経由でないとインターネット上の Web ペー ない ) で実行する必要がある。 ロンプト・ウインドウの cmd. exe ( Cygw ⅲのシェルでは トールする。なお、以降の操作は Windows のコマンドプ プログラムカ鮗了したら、次に Perl モジュールをインス 問に対して [OK] をクリックすればよい。インストール・ そしてダウンロードしたファイルを実行し、すべての質 download. html ・ http://www.imagemagick ・ org/www dows ExecutabIe をダウンロードする。 インストールするには、以下の Web ページから Win- 用意されている。 などの API (Application Programming lnterface) が リである。 Perl のほか、 C 、 C 十十、 Java 、 PHP 、 Python 無償提供している画像操作ユーティリティおよびライプラ Magick は、 ImageMagick Studio という非営利団体が ick の本体とその PerI モジュールが必要である。 lmage- save-cb-image. plw のインストールには、 ImageMag- コマンドを使って perl のモジュールをインストールする のである。 ppm コマンドで lmage::Magick モジュールをインス トールするためにインターネットヘアクセスする必要はな いはすだが、 ppm はなんらかの理由でインターネットにア クセスし、そのアクセスカ院了しないと先へ進めないよう である。 ☆ 今回は、 Perl/Tk による GUI プログラミングの例とし て、 save-cb-image. plw の概要とインストールの手川頁を 紹介した。この原稿執筆の過程でも、 save-cb-image ・ plw は何回も使用した。皆さんの作業効率の向上に役立ててい ただければ幸いである。次回はプログラムの説明をおこな 本体のインストールと実行 冒頭に示した URL から save-cb-image. plw の配布フ ァイルをダウンロードし、展開する。そして AppConfig. pm を *PerI*site*lib にコピーし、 save-cb-image. plw を適当な場所に置けばインストールは完了である。 save- cb-image. plw のアイコンをダブルクリックすれば実行で きる。 ( いまづ・ひでよモルガン・スタンレー証券 ) 109
UNIX MAGAZINE の本 たのしいリ N Ⅸ ・坂本文著 ・ A5 判、 367 ページ・ ISBN 4-7561-0785-0 ・定価 1 , 937 円 UN Ⅸの世界でこの本を知らない人は“もぐり”といわれるほど の大好評ロングセラー初心者はもちろん、中級者にも十分役に 立つ知識をやさしい語り口で伝えます 1 章はじめのいーっほ まずはログイン、パスワード、ログアウト、タイプミスをしたとき、コマンドにつ いて知っておきたいこと、マニュアルを読んで、パニック脱出法 2 章ファイルって ? UN Ⅸにおけるファイル、標準入出力ファイルと入出力リダイレクション、テ ィレクトリ・ファイルとその役目、ツリー構造とパス名、ディレクトリの作成、ファ イルの保護 3 章上手にファイルを使いましよう ファイル / ディレクトリの削除 / コピー / 名前変更 / 移動、ファイルの種類を見 分ける、ファイルの内容を見る、ファイルの整理、ファイルを探す、ファイルの プリントアウト 4 章何でもできるコマンドたち wc 、 diff 、 sortsuniq 、 grep 、 sed 、 awk 5 章ⅵだいすき ⅵの編集コマンド、困ったときは、 ex 工デイタ、 . ex 「 c ファイルを作ろう、ⅵの コマンドー覧 待 ト 三 の文 x 本 坂中 色 0 色を 8 三を マ目次から アスキー出第第 続・たのしいリ N Ⅸ ・坂本文著 ・ A5 判、 306 ページ・ ISBN 4-7561-0789-3 ・定価 1 , 937 円 C シェルの仕組みや使い方の説明を読みながら、自然とリ N Ⅸ の仕組みが分かる本。シェルの多彩な機能を使いこなせるよう 続・たのしい UN Ⅸ になれば、 UN Ⅸの世界がさらにひろがります。 シェルへの招待 1 章知っておきたいコマンド入力のコツ 坂本文著 補完、工イリアス、入出力リダイレクション、パイプ、ヒストリー、ジョブ制御 コマンドの同時入力とコマンドグループ、条件付きのコマンド実行、プロンプ トの変更、端末の設定、ファイル作成時の保護モード、コマンドの動作環境 の設定 2 章シェルとプロセスの仕組み シェルの種類、あなたのシェル、 1 人 1 つのシェル、シェルの誕生と終了、プ ロセス、親子関係とプロセスツリー 3 章シェルの仕事 シェル変数、環境変数、シェルとメタキャラクタ、コマンドを探す、ヒストリー 機能、コマンド入力行の構成、ジョブ制御に関する仕事、ディレクトリに関す る仕事、ファイルを探す 4 章」 ogin と . csh 「 c のサンプル シェルの最初の仕事、ネットワーク環境では ? 、 x ウインドウシステム環境で は ? 、」 ogin と . csh 「 c のテスト 付録 : C シェルの組込みコマンド / シェル変数 / メタキャラクター覧 株式会社アスキー 苧 160-8584 東京都新宿区信濃町 34 信濃町とル 営業局電話 ( 03 ) 5362-3300 http://www.ascii.co.jp/ hi 第 tO Pt0NPt マ目次から j 。わ 3 「・ h 宿 sh 3 ・・ nv 20800 ・ 0 ソ 、 04 新え pughd 0 ま 0 て 0 h 破 1 物を アスキー出版局 ・表示価格は消費税込みです。・書店または書籍を扱っているパソコンショップでお買い求めください ・品切れの際ば、書店でご注文いただくみ、通信販売をど利用くたざい。 ・通信販売のお問合せ先 : アスキーストア電話 ( 03 ) 3499-9300 http://www.ascii-store.com/
特集プ 0 グラ、ク 0 次 0 一歩 図 8 ps コマンドの実行 % ps ー 1 —p 6796 WCHAN TTY T I ME CMD F S UID PID PPID C PRI NI ? pts/3 0 : 00 samp1e2 8 S 1005 6796 6472 0 40 20 ps コマンドなどでメモリのサイズを調べる場合、す一 ンドといえば ps でしよう。 注意することがあります。よく、、、 malloc 関数で確保した プロセスカ吏っているメモリのサイズを表示するには、 メモリを free 関数で解放する " という言い方をしますが、 たいていの場合、 ps コマンドに一 I オプションを付けて実 行します。あるいは、特定のプロセスの情報だけを得たい ・たいていの OS では、 free 関数はいったん割り当てた ときは、 -p オプションの引数にプロセス ID を指定するこ メモリをそのプロセスで再利用できるようにするための ともできます。ただし、 ps コマンドはシステムによってオ もの プションの種類や表示される値の単位が異なるので ( たと であり、本当に OS にメモリを返したりはしません 3 。し えば、プロセスのサイズを表す数値がページ単位であった たがって、 free を実行したからといって、プロセスのサイ り、 KB 単位だったりします ) 、かならずマニュアルで確認 ズが小さくなるわけではありません。この点を確認してみ してください。 ましよう。 さきほどの sampIe2 を起動して、 ps コマンドで調べて リスト 3 のサンプル・プログラム sampIe3. c は、 EOF みましよう ( 図 8 ) 。図の、、 SZ " 欄に表示されているのが、 (CtrI-D) を入力すると malloc と free を繰り返します このプロセスの合計サイズです。合計サイズというのは、 ( 芸のないプログラムですね ) 。 さきほどの pmap コマンドで表示されていた、、 total " の さきほども説明したように、 SoIaris では ps コマンド 値のことです。つまり、プログラムのテキストやデータ、 の SZ はページ単位で表示されるため、値カ畯わったこと スタックだけではなく、共有ライプラリも含まれています。 をはっきりさせるために 1 ページ単位 ( 8 , 192 バイト ) で ただし、この SZ が厳密に何を表す値かは、やはりシステ malloc をおこなっています。 ムによって異なるので、それぞれのマニュアルでよく確認 このプログラムを実行すると、 EOF を入力するたびに、 しましよう。 8 , 192 バイト確保 図 7 の pmap コマンドでは、、 total 968K " と表示され malloc 解放 free ps ー 1 " の出力では、、 120 " と表示されてい ていましたが、 8 , 192 バイト確保 mallo c ます。これは、 pmap コマンドでは KB 単位、 ps コマン 解放 free ドではページ単位で出力されているからです。ページの大 malloc 8 , 192 * 2 ー 解放 free きさもシステムによって違いますが、現在のページの大き さを確認したいときは pagesize コマンドを実行します。 と動きます。 EOF を入力するたびに ps コマンドで確認 すると、図 9 のような結果になります。 % pagesize この結果をみると、最初に malloc した時点 ( 2 ) で SZ 8192 が増えていますが、その領域を free しても SZ は減りま これで、このシステムのページサイズが 8 , 192 バイトだ せん ( 3 ) 。次に、ふたた司じサイズを malloc したとき ということが分かりました。したがって、 ( 4 ) も SZ は変わっていません。これは、同じ領域カ利 120 x 8 , 192 ノヾイト = = 約 960KB 用されたためと考えられます。この領域を free しても、や となります。 ps コマンドでは pmap ほと第羊しい情報は分 はり SZ は減りません ( 5 ) 。次に 16 , 384 バイト確保する かりませんが、ごく簡単にそのプロセスがどの程度の大き 3 すべての OS で、メモリを OS に返さない実装になっているわけではあり さであるのかを確認することができます。連続的に ps コ ません。 C 言語の規格では、 free 関数か解放されたメモリをどのように扱 うかは定められていないため、実装に依存する動作をします。ただし、多く マンドでプロセスを監視しながら、メモリの使用量を調べ の OS では実行効率などを考慮して、 OS にメモリを返さないような実装に ることもできます。 なっているようです。 SZ 120 ADDR 16 , 384 バイト確保 31 UNIX MAGAZINE 2004.9
文房具としての 図 6 ファイル編集メニューの画面 連載一 06 る場合は、 rn を選びます。変更があったすべてのファイル で同様の作業をおこなったらおしまいです。ここで注意し てほしいのは /etc/rc. conf です。このファイルには、 # If this is not set tO YES , the system wi11 - drop intO single—user mode . rc—configured=YES 表 5 etcupdate のファイルマージ時のコマンド コマンド効果 というプロックがありますが、新しいファイルは、 現在のファイルと新しいファイルを連結したものか ed ら編集する ( 各ファイルのバージョン情報も含まれ rc—configured=No る ) となっています。この部分を書き換えて N 。にすると、注 現在のファイルと新しいファイルを叫吉したものか 意書きにあるようにシングルユーザー・モードで起動して ら編集する ( バージョン情報なし ) 左 ( 現在 ) のファイル内容をベースに編集する しまうので、この部分はかならず YES のままにしておい 右の噺しい ) ファイルの内容をベースに編集する てください。なお、当然ですが、 /etc/master. passwd や 新しいファイルを編集する /etc/group などのファイルの取扱いには注意してくださ 左 ( 現在 ) のファイルをそのまま使う 右の ( 新しい ) ファイルをそのまま使う 終了 すべての編集作業が終ると、 表 6 etcupdate のファイルマージ後のコマンド Remove /tmp/temproot? ()/ Cn] ) コマンド効果 新しいファイルをインストールしない と表示されるので、 y を選択してください。これで / etc 以 新しいファイルを上書きインストールする 下カ噺しくなりました。 現在のファイルと新しいファイルをマージする 現在のファイルと新しいファイルの差分を表示する /etc 以外の設定のアップテート マージを無効としてもとに戻す マージしたファイルを表小する こまでで、システムのバイナリと / etc 以下の設定ファ イルを新しいものに置き換えました。次は /etc 以外に置 します。 かれた設疋ファイルも新しいものにしましよう。これには マージ処理をしたいときには rn を入力します。すると postinstall を使います。じつは、 postinstall は etcup- ファイル編集のためのメニューに移動して、画面左側に現 date の最後で呼び出されています。このときは変更され 在のファイル、右側に新しいファイルか変更されているプ ているファイルがあるかどうかだけをチェックしています。 ロックごとに表示されます ( 図 6 ) 。 こでは各プロックご 変更されているファイルがあれば、 etcupdate の最後に実 とに編集をおこないます。無効なコマンドを入力すると実 行すべきコマンドが表示されます。 行できるコマンドの一覧か表小されるので、 ? などと打っと 分かりやすいかもしれません。このときのおもなコマンド * * * Running /etc/postinstall Source directory : /usr/src を表 5 にまとめます。 Target directory : / プロックごとに、 1 や r で選択したり、 ed や eb 、 el 、 er postinstall check : etc_release check: を使ってマージをおこないます。 1 ファイルぶんのマージ etc/release is built by /usr/src/etc/=> が終了すると、最初のメニュー画面 ( 図 5 ) に戻りますが、 Makefi1e ; skipping check 選べるコマンドがすこし違います。ここで選べるコマンド defaults check: を表 6 にまとめます。 mtree check: i と入力すると、マージしたファイルをインストールでき gid check: uid check: ます。 v でマージ後のファイルを表示できるので、インス periodic check: トール前に確認するほうが安全です。さらに変更作業をす rc check: P ー 2 se select 0 0 Of the ー 0 い 0 一れ 9 0 第 0 「れ一一 0 い S : いに一はい the new ーロ日 ( 0 、旧 r “ r es 収′ " Od ー「一 Cd を一 0 れ s ! ) 日 H 日「リ e ー物日 c “ r 「円ーリいーロ日 0 第 d new 「一 les ShOW 村旧一「一 ere れ ces bet 日 e れ料田 c ロ・田ⅱーリーれ S をーー ed 第れを「日 0 & v Sh0H 旧介 e file dO リ ou & れをを 0 dO? 日 .0 驫、 it ー 0 「一叔ー er 一 Uhat $NetBSD: 准 ED をリ , 1 . 1 フ 5.2.3 : 物 60n0 「“を fr ・ OH. NetBSD: 1 暑 E 第をリ . “ k. 1. 15 29 NetBSD: 物を DE リ . t 日 p し u L26 2 Net BSD : etc. i 386 / Ⅲ E 動をリ . conf eb 1 140 UN 工 X MAGAZINE 2004.9
図 8 マウントボイント列 OIKAWA の新し、ドライブ文字またはパスを追加します。 0 次のドライブ文字を書当てる ( 阯 奩次の空の NTFS フォルダにマウントする⑩ . ドライプ文字またはバスの追加 ネットワーク時代を生き抜くための 技術情報誌 oftware esugn 6 B5 判・ 224 ページ 定価 ( 税込 ) 970 円 特集 月号 マウントボイントの機能を活用すれば、 26 文字のドライ プ文字の卩毖専から逃れることができる。 Windows は、大 量のディスクを接続したファイルサーバー とくに NAS (Network Attached Storage) としてよく使われている。 そのような場合、このマウントボイントを利用すれば、 26 台以上のディスクカ甘妾続されていても、そのすべてに Win- dows からのアクセスが可能なように設疋できる。 マウントボイントは、 NTFS のリバースポイント機月ヒに ′ムヒつ よって実現されている。 ジャンクション・ポイントは、、 Windows Server 2003 tion を C:*Junction と読み替えることができる。 この機能を利用すると、たとえば C:*Windows*Junc- 単にいえばフォルダのパス名に別名を設定する機能である。 ション・ポイント (junction point)" である。これは、簡 リバースポイントを使うもう 1 つの機能が、、、ジャンク シャンクション・ポイント ード・センター 1 から入手できる。、、 Windows server このリソースキットは、 Microsoft のダウンロ リソースキット " に含まれる LINKD コマンドで作成 する。 UNIX MAGAZINE 2004.9 1 http://www.microsoft.com/downloads/ dows ドメイン内でオプジェクトの移動を追跡するための 用いてコンピュータもしくはコンピュータの属する Win- う攵リンク・トラッキングは、一意なオプジェクト ID を 分散リンク・トラッキング linkd C : *Junction C : YWindows*Junction うにする。 *Junction を C:*Junction にマウントするには次のよ LINKD コマンドを用いて、さきほどの C:*Windows コマンドカ吏えるようになる。 TOOLS. EXE をダウンロードして展開すると、 LINKD 2003 Resource Kit T001S " をキーワードに検索し、 RK- ここまで使える ! 仮想化技術 最新リサー第 [VMware, VirtuaI PC, SoftEther, Emotion Link ・ "] ハードウェアの高機能 / 低価格化が進む中 , 各種テクノロジ の「仮想化技術」が進み , 注目を集めています . たとえば , 本 誌読者にお馴染みのエミュレータ「 VMware 」や「 V 減 u PC 」 などもその 1 つでしよう . 今回「 OS 稼動環境」「ネットワーク」 「ストレージ」にフォーカスを当て , 最新の仮想化技術につい て解説します . 仮想化技術とはいったい何なのか , 現状の環境 ではどの程度の実用できるのかなどを考察し , 実際の使い方ま でを紹介します . OS 稼動環境編では「 VMware 」「 VirtuaI PC 」の最新版の使 い方を , ネットワーク編では今大注目の「 SoftEther 」に加えて , マルチプラットフォームで稼働する「 Emotion Link 」などレイ ヤ 2 / レイヤ 3 での仮想ネットワークを , ストレージ編では , 仮 想ストレージを使ったストレージサーバの構築などの話題を取 り上げます . 最新技術のトレンドがまるごとわかる , 次世代工ンジニア 必読の特集です ! 一般記事 第 2 特集 進化する、 ( の P 円人 ICD からのさらなる飛躍 ◎オープンソースで作る一元管理環境① ◎ Linux で体験 ! iSCSl の魅力 ◎使って知る Firebird の実力 ◎ Web Matrix Project で作成する Web アプリ ◎ WideStudio で T-Engine アプリケーションを作ろう ほか 好評発売中 ! ! 全国の書店 , または弊社ホームページで お買い求めください . http://www.gihyo•co•jp/ 血技術評諞社 71
今月は、 Mac OS X の UNIX 的な操作の話題について 紹介します。 ・ Mac OS X の UNIX らしさ 巧・ sys. mac. os-x に、「 Opening hidden files/ 隠しファ イルを開く」というタイトルの記事が投稿されました。 れは、 Mac OS X の Finder で、 . " で始まるいわゆる隠 しファイルを表示したり開いたりする方法はあるのでしょ うか、 Terminal から open コマンドを使えは凋けますが、 Finder から直接開ければアプリケーションにドラッグで きるし、そのほうが Mac らしいのではないでしようか、と いう質問記事です。 こ存じのように、 Mac OS は X から UNIX べースの OS となりましたが、デスクトップやメニュー、フォルダな どの外見や操作感は UNIX であることを感じさせません。 そのため、 UNIX OS として使おうとすると逆に工夫が必 要な場合もあり、今回の質問の内容もその 1 っといえるで しよう。 デスクトップと Finder この質問に対して、 Terminal から、、 defaults write com ・ apple.finder AppleShowAllFiIes on ' を実行し、 Finder を再起動するか、面倒なら Mac をリプートすれ ー邸しファイルが表示されるようになる、この設疋変更は 全フォルダに適用される、 Finder を再起動 3- るには Com- mand 十 Option 十 Esc キーを押して、、アプリケーションの 強制終了 " から Finder を選択すればよい、その場合ボタン が、、再度開く " という表示に切り替わるが実際には強制終 了であり、 Finder の状態カ皮棄されてしまうのでお勧め できない、 Mac らしい方法としては AppleScript などを 使って Finder に quit イベントを送るか、 TinkerTool で Finder に cmd 十 Q を割り当てる方法がある、 quit イベ ントは Terminal から、 osascript —e 'tell application ” Finder ” to quit"' を実行することでも送れる、、、面倒な 場合 " はリプートまでしなくてもログアウトしてログイン しなおせばよい、といったフォローがきました。 みるく UNIX MAGAZ 工 NE 2004.9 UNIX 的な実現方法 F ⅲ der のフォルダ・ウインドウ内に、、隠しファイル " を 表示させるには、 Finder そのものの設定変更が必要とな るため、一殳的な UNIX の操作では実現できません。し かし、設定を変更した Finder の再起動は、前述のような Mac OS 的な方法だけでなく、 UNIX の流儀でおこなう ことができます。 Finder の停止には、 UNIX でプロセスを終了させる一 般的な方法である、 ps でプロセスを確認し、 kill コマンド で PID を指定して停止シグナルを送る " カ駛えます。もち ろんこれには Terminal カ琵、要ですが、 Terminal さえ開 いてしまえば、停止だけでなくコマンドラインからパスを 指定して Finder を起動することもできます。ただし、起 動の際にコマンドラインから指定するのは、 Finder のフォ ルダ・ウインドウに表示される、、 F ⅲ der " ではありません。 じつは UNIX のシェルからみるとこれは Finder. app と いうディレクトリになっていて、そのなかに収納されてい るプログラムの実体を指定することになります。 さらに、コマンドラインから単純に Finder を起動する と、そのままフォアグラウンドで稼動し続けてシェルのプ ロンプトが戻ってきません。しかし、 Ctrl 十 z で Finder のプロセスを一時停止して、 bg コマンドでバックグラウ ンド稼動に切り替えることで、その後も Terminal を利用 することができます。 Ctrl 十 Z で一時停止した状態のとき にマウスで各ウインドウを操作しても反応がありませんが、 bg を実行するとすぐに応答カ弡ってくるようになります。 やはり UNIX Mac OS X は Terminal を使わずにいると UNIX べー スであることをあまり感じませんが、今回の話題のように ファイルを表示できるようにしたり、 Terminal からコ マンドを実行したり、 ps でプロセス一覧を表示したり、 kill で停止させたり、パスを指定してアプリケーションを起動 させたりすると、やはり UNIX なのだと感じます。 ・今月の話題から ( 2004 年 7 月 16 日現在 ) Newsgroups: . news. group . news. miSC, questions.fj Subject: [*FINAL* Announce] [CFV] NGMP Revi- sion ( 2004.6.24 ) 巧でニュースグループを作成 / 削除するときの手続きや、 129
文房具としての 連載。こ 06 し叔 & t login: Thu Jul Password . ー og ーれ : r00 を etBSD/i386 (serah) ・日Ⅲ山口一 5 ー ? . 2 ? : 3 ー 図 3 新しいカーネルでの走カ 15 17 : 26 : 2994 0 れ CO れ & 0 ー e ( co れ so ーを ) JST 2 日日 4 The Regents of the University Of Ca い fO ロⅱれ . Ail rights r 3 rv 住心 ・ 0 リ「一 ght (c) ー 98 日 , 1983 , 1986 , 1988 , ー 99 日 , 1991 、一 993 , ー 994 RII rights reserved. T 2 NetBSD Foundat ー 0 れ , lnc. ・ 0 リ r ー ght (c) 1996. 199 ?. 1998 , 1999 , 29a 日 , 29B1 , 2992 , 29B3 ul 15 17 : 2 ? : 38 serah ー 0 リ i れ : 費 00T LOGIH (root) ON console ul 15 1 ? : 2 ? : 38 se 「 ah ー og い、 : ROOT LUGIN ( r00 を ) ON C0n30 ー 0 h:/10cal/src/SYS/arCh/i386/c0Hpile'obj/SERRH i386 etBSD serah 2 . ØG NetBSD 2. BG (SERfiH) 物 1 : Ho れ謹収ー 5 21 : 4 ? : 46 JST 2994 「 00t0 & e 「 。 0r0 わ物収れは日一 recO ”第 n 臧 C 「 e 驫 t い 19 驫 no れ・ - r00 を account れ d using S 談 ( 1 ) for ′ 00 を tnaHe -aTerMinal type is を 19a. 0 0 れ e Hail. ー co ”日一 0 NetBSDt ー BSI) 2 .96 ( S ERfiH ) 物 1 : 川 Jul 5 21- : 4 ? : 4Ø JS ↑ 2994 access . これでカーネルの構築はおしまいです。続いてユーザー く、カーネルを作った時刻なども表示されています。 として OS の情報を表示しています。こちらはもっと詳し $ uname —a また、 uname コマンドでも確認できます。図 3 では、 アップデートされています。 では、、 2. OG " と表示されているので、たしかに current に 図 3 のように、カーネルのバージョンが表示されます。図 起動したら、さっそく口グインしてみましよう。すると # reboot 次に、新しいカーネルでシステムを起動しましよう。 # make install ー & kernelinst .10g # cd /usr/src/sys/arch/ARCH/compi1e/KERNEL が違うので注意してください。 実行してカーネルをインストールできます。ディレクトリ Ⅳ力にカーネルができます。この場合、以下のコマンドを 場合には、 /usr/src/sys/arch/ARCH/compiIe/KER- config コマンドと make を利用してカーネルを構築した # make install は tee kernelinst .10g KERNEL # cd /usr/src/sys/arch/ARCH/compi1e/obj/=> のカーネルを / にコピーします。 ーネル netbsd ができます。以下のコマンドを使って、 ユーサーランドのアップデート ランドの構築をおこないましよう。 138 こでも build. sh を使います。 もちろん、 カーネルができたら、次はユーザーランドを構築します。 まずはユーザーランドを構築してシステムにインストー ルしましよう。 ユーサーランドの構築とインストール 以下のコマンドでユーザーランドを構築できます。 # cd /usr/src # . /build. sh build tee build. 10g コンパイル時にはファイルシステムへの読み書きが頻 発します。一般に入出力処理はたいへん手間がかかるた め、処理が終るまで待つのではなく、そのあいだに別のフ ァイルをコンパイルすると効率が - ヒがる場合があります。 make には、並列にコンパイルする数を選べる一 j オプショ ンがありますが、 b ⅲ ld. sh でもこのオプションカ駛えます。 シングル・プロセッサの場合は、、一 j 3 " あたりを指定する と、ビルドの時間を短縮できるかもしれません。 ビルドが正しく終了すると、図 4 のようなメッセージ カ咄力されます。これは Pentium III 650MHz 、メモリ 384MB の環境で構築した場合で、 6 時間以上かかってい ます 2 。 正しくユーザーランドが構築できたら、システムにイン ストールしましよう。以下のコマンドで、現在のシステム に新しく作ったバイナリ群をインストールします。 # . /build. sh install=/ ー & tee install .10g これでユーザーランドのバイナリ群のインストールはお しまいです。バイナリ群カ噺しくなると、その設疋ファイ ルにも変更や新たに追加された設定があるかもしれません。 これに対処するために、変更があった設定ファイルも更新 しましよう ( 最近は設定ファイルの更新作業も半自動でお こなえます ) 。 /etc 以下のファイルの更新 /etc 以下に配置されている設定ファイル群を最新のもの に更新しましよう。これには etcupdate コマンドを利用 します。 2 ふだん使用している ThinkPad T23 カ気章してしまったため、 T20 に T23 で吏っていたハードディスクを接続して暮しています。このように引算 機が章したときに、ハードディスクを別の言 1 機に接続するだけで簡単に 、秘主 " できるのも、 UNIX 系 OS の強みでしよう。もちろん、 X の言定 は書き換える尼要があるでしようが。 UNIX MAGAZINE 2004.9
特集プログラミンクの次の一歩 図 3 pmap で csh のプロセスをる砡忍 144K r x 16K rwx 1184K r——s— ることで実行していましたが、そのぶん、プログラム自体 T IME CMD PID TTY csh 4160 : % pmap 4160 00010000 00044000 00048000 FF080000 FF200000 FF214000 FF220000 FF252000 FF260000 FF280000 FF33C000 FF342000 FF350000 FF360000 FF39A000 FF3A2000 FF3B0000 FF3C0000 FF3F6000 FFBEEOOO tota1 176K 24K 8K 144K 16K 16K 688K 24K 8K 8K 168K 32K 8K 8K 160K 16K 72K 2920K rWX— rWX— rWX— rWX ー rWX ー rWX ー rWX ー rWX ー rWX— /usr/bin/csh /usr/bin/csh [ heap ] dev: 85 , 30 ino : 665692 /usr/1ib/10ca1e/ja-JP. eucJP/meth0ds-ja—JP . eucJP . so . 2 /usr/1ib/10ca1e/ja-JP. eucJP/methods—ja—JP . eucJP . so . 2 /usr/1ib/10ca1e/ja-JP. eucJP/ja-JP. eucJP . so . 2 /usr/1ib/10ca1e/ja-JP. eucJP/ja—JP. eucJP . so . 2 /usr/p1atform/sun4u/1ib/1ibc—psr. so. 1 [ stack ] /usr/lib/ld. so . 1 /usr/lib/ld. so . 1 /usr/lib/libdl . so . 1 /usr/lib/libcurses . SO . 1 /usr/lib/libcurses . so . 1 /usr/lib/libcurses . so . 1 [ 。Ⅱ ] /usr/lib/libc . so . 1 /usr/lib/libc . so . 1 /usr/lib/libc . SO . 1 がいくっか用意されていますが、現在動いているプロセス はネ礬隹になっていました。もちろん、、、工夫 " をしたぶんの よけいな処理が増えるわけですから、処理時間にも大きく 影響します。これが、 64bit のコンピュータ環境になると、 18EB ( 工クサバイト ) のアドレス空間にひろがります。 れなら、データをひとまとめにして ( イ反想的な ) メモリ上に 置いておくこともできますし、プログラミングもかなり楽 になり、もちろん高速な処理も可能になります。このよう に、 64bit のアドレス空間を使うと大きなプログラムも作 りやすくなります。ただし、アドレス空間の基本的な構造 は 32bit の環境ととくに変わりありません。 pmap によるアドレスマップの確認 UNIX のプロセスは、実行されるとこのような空間内 のアドレスマップをみるには pmap を使います。 pmap コマンドの引数にプロセスの番号を指定すると、そのプロ セスのアドレスマップを確認することができます。 まず、プロセス番号を調べるために ps コマンドを実行 します。 % ps 4212 4160 4188 4189 pts/3 pts/3 pts/3 pts/3 0 : 00 0 : 00 0 : 00 more 0 : 00 diff a . c b . c csh PS に配置されて動くことになります。 ・・と言葉で説明した だけでは、いまひとっ具体的なイメージが思い浮かばない かもしれないので、実際に動いているプロセスのアドレス マップをみてみましよう。アドレスマップとは、プロセス がアドレス空間にどのように配置されているかを示すもの です。 最近の SoIaris には、実行中のプロセスのアドレスマッ プを簡単に見られるコマンドがあるので、これを使います。 SoIaris には、プロセスのた態を確認するためのコマンド UN 工 X MAGAZ 工 NE 2004.9 どのプロセスを確認してもかまいませんが、ここでは csh プロセスについてみてみましよう。プロセス番号は、 ps コ マンドの出力の、、 PID " の欄を見れば分かります。 csh の プロセス番号は 4160 ですから、これを引数にして pmap コマンドを実行します ( 図 3 ) 。 pmap コマンドでは、図 1 とは逆にアドレスは小さいほ うから表示されています。これを図 1 と同じアドレス順で 示すと、図 4 のようになります。 アドレスのもっとも先頭に近い部分 0X00010000 から の領域が /usr/bin/csh のテキスト領域、次の 0X000440 00 からの領域がデータ領域です。その次に続く領域 0X00 048000 には、ヒープが割り当てられています ( 実際には、 27
連載 / ネットワークとセキュリティ 図 1 iptables の言綻例 # /sbin/iptables —A OUTPUT -p tcp # /sbin/iptables —A OUTPUT —p tcp # /sbin/iptables —A OUTPUT —p tcp ネットワーク上で未使用の IP アドレスを dumnet 用に 割り当てる 運よく囀吏用の IP アドレスがある場合に、それを dum- net 専用として割り当てます。この方法は、すべてのポート —tcp-flags RST RST -s 192.168.12.34 ¯j DROP —sport 80 -s 192 . 168 . 12 . 34 -j ACCEPT —sport 22 -s 192 . 168 . 12 . 34 -j ACCEPT 宛のバケットの内容を入手でき、通常発生するトラフィッ クの景彡響を受けないため、本格的に運用するのであれば、 ちらがお勧めです。 dumnet がバケットを収集する場合には、 dumnet に割 り当てた IP アドレス宛のトラフィックがホストまで到達 する必要があります。そのため、 dumnet を運用するネッ トワーク上のルータで、スタティックな ARP 工ントリを 追加する必要があります。 こでは、 dumnet に割り当てる IP アドレスが 192. 168.12.34 、 dumnet を動かすホストの NIC の MAC ア ドレスが 00 ー 00 ー 01 ー 29 ー be ー ef だと仮定して、ルータ上での ARP 工ントリの設定方法を説明します。 Cisco IOS の搭載されたルータやレイヤ 3 スイッチを 利用している場合には、次のコマンドを入力します ( 誌面 # arp —s 192.168.12.34 00 : 00 : 01 : 29 : be : ef のコマンドを入力します。 *BSD や Linux をルータとして使っているのなら、次 0000.0129. beef arpa router(config)# arp 192 . 168.12.34 - router# configure terminal の都合上、で折り返しています。以下同様 ) 。 56 http://www.insecure.org/sploits/arp ・ games. html 3 ARP and ICMP redirection games 必要です。 arp poisoning を使うのは、その他の手段カ駛 るトリッキーな手法なので、利用する際には十分な注意が poisoning は Man ⅲ the Middle 攻撃の一種ともいえ ス宛のトラフィックを誘導することができます。なお、 arp ⅲ g3 をおこなうことで、 dumnet に割り当てた IP アドレ る arpredir コマンドを使い、ルータに対して arp poison- す。そのような場合には、 dumnet のパッケージに含まれ タティックな ARP 工ントリか轂定できないことがありま 一部のプロードバンド・ルータなどでは、どうしてもス えない場合に限定すべきです。 既存のホストの dumnet を動かす すでに動いているホスト上の、サービスを提供していな いポートで dumnet を動作させる方法です。この方法は dumnet 専用の IP アドレスカ坏要で、すでにサービスを 動かしているホスト上で空いているポートに対するアクセ スを確認したい場合に便利です。 この方法を利用するときは、以下の 2 点に注意する必要 があります。 ・ dumnet が OS の TCP/IP スタックに代わって ACK フラグの付いた TCP バケットを返さないように設定す る dumnet には -N という引数があり、 TCP 接続をエミ ュレートしないポート番号を指定できます。また、 -I 引 数を用いて ICMP ECHO Request に dumnet 自体 カ答しないように設定します。たとえば、 SSH (TCP 22 番ポート ) と HTTP (TCP 80 番ポート ) カ働いて いるホスト上で dumnet を稼動させる場合は、次のよ うにコマンドライン引数を設定します。 # dumnet -N 22 , 80 ーエその他の引数 ・閉じられたポートへのアクセスを受けたとき、 OS の TCP/IP スタックが RST フラグの付いた TCP パ ケットを送信しないように設疋する 通常、サービスを提供していないポートに対してアクセ スがあった場合、 OS の TCP/IP スタックが RST フ ラグ付きの TCP 応答を返します。しかし、 RST が返 されると TCP セッションが切断されてしまう可能性が あります。サービスを提供していないポートが開かれて いるかのようにみせかけるには、そのポートに SYN パ ケットが送られてきても、 RST を返さないようにする 必要があります。 図 1 に、 Linux 上で動くバケットフィルタ iptables の 設定例を示します。このホストの IP アドレスは 192.168. 12.34 で、さきほどの例と同様に SSH と HTTP のトラ フィックは通常どおり扱い、その他のポート宛のトラフィ UNIX MAGAZINE 2004.9
管理組織などについて記されている「ニュースグループ管 実行時の王艤は Windows から TeInet 接続して /bin/sh 理の手引き (NGMP) 」の改訂案に関する投票の呼びかけ を動かしており、 rm コマンドは途中で止めなかったらし 己事です。今回提案された改訂の内容は、ニュースグル い、コマンドが終了しても TeInet 接続やシェルの動作は ープ管理委員や、委員選出のための選挙管理委員のなり手 継続していたようだ、という情報が寄せられましたが、け 不足対策に関するものです。投票期間は 6 月 24 日から 7 っきよくこれといった原因が分からないままこの話題への 月 14 日で、すでに終了しています。 フォローカ鮗ってしまいました。 Newsgroups: fj.comp.lang. c,fj. mail.reader Newsgroups: fj unix Subject: Gcc 3. x and varargs. h, MH stdarg. h patch Subject: rm -rf / * 全てが消えるわけじゃない GNU の C コンパイラ GCC 3. x では varargs. h カイ吏 知合いが root ユーザーで、、 rm —rf / * " を実行してしま えなくなったようですが、皆さんは varargs. h を使ったプ い、大変な目に遭いました。しかし、すべてかどうかは未確 ログラムにどのように対処しているのでしようか。具体的 認ですが、 /var や /usr の下のファイルはコマンド実行後 にはメール・ソフトウェア MH のコンパイルが通らなく も残っていたそうです。これはなぜ消えなかったのでしょ なって困っています、という質問記事です。 うか、という疑問記事です。 これに対して、 varargs. h が使えないのは GCC 3.3 これに対して、なんらかのプロセスカそのファイルを開 以降のようだ、 GCC 3.3 以降で varargs. h を使って いていたのではないか、この場合はすくなくともディレク いるソースをコンパイルすると、く varargs. h 〉の代わり トリ・エントリは消えるはずである、実行中のファイルで く stdarg. h 〉を使うように変更しろ " というメッセー あれば、、 text busy" になるのではないか、実際に試してみ ジが表示されるので stdarg. h を使えばよいのではない たらファイルへの書込みは text busy になるカ哨リ除できて か、 varargs. h と stdarg. h では多少文法が異なるが、 しまった、 FreeBSD 4. x の rm では実行中のファイルを varargs. h を使う関数はたいてい小さいので変更はそれほ 削除しようとすると rm -i と同様に確認された、 SunOS ど大変ではないと思う、 MH のソースで varargs. h を使っ 5.8 では実行中のファイルにも書き込めてしまった、ファイ ているのは 3 つのソースコード・ファイルだけで、そのう ルモードが、、一 r ー -r- -r- - " になっていたのではないか、 root ちの 2 つはすでに varargs. h と stdarg. h の両方に対応 で—f オプションが指定されていたらこの場合でも消えて している、 stdarg. h は途中まで必須の引数を明示的に書い しまうはずである、 root であれば一 f オプションがなくて て、そのあとにオプションの可変個数の引数を書けるのが も消せる、 BSD 系 UNIX でファイルに noschg フラグ 便利である、 FreeBSD の最近の ports に、 MH のソース が設疋されていたのかもしれない、同様に Linux の場合 を varargs. h から stdarg. h へ書き換えるパッチがあるの は chattr 十 i カ第ス疋されていたのかもしれない、たんにコ で参考になるだろう、このパッチは一ヨ殳的な書換えの例と マンド実行後に気づいて途中で止めたのではないか、処理 しても参考になる、といったフォローがきました。 の途中に NFS などの特別なファイルシステムがあって止 まったのではないか、 /var や /usr がなんらかのパーティ Newsgroups: fj. OS 」 inux. setup ションをマウントしていてそちらは消えたが、下に隠れて Subject: kernel を ver-up したら USB がおかしくなった ? いたディレクトリ内のファイルカ曵ったのではないか、端 カーネル 2.4.18 の Red HatLinux8.0 を使っていまし 末工ミュレータ上で rm -rf / * を実行していて、端末工 たが、カーネル 2.4.26 をソースコードからコンパイルして ミュレータ本体の実行ファイルが消えた時点で端末工ミュ 入れ替えました。すると、起動時のメッセージでは正常に レータが異常終了し、その端末に関係付けられていたプロ プートしているようなのに、 /var/log/messages に残って セスも強制終了させられて rm カ阯まったのではないか、 いるログではいったん USB ハプを認識してすぐに解除し といったフォローがきました。 ています。とりあえず起動後に、、 /sbin/modprobe usb- uhci" を実行させれば、、 usbcore モジュールがない " とい これらに対して元記事の才高者から、 OS は Linux 系の うエラーは出るものの USB カ駛えるようになります。ま FedoraCore 1 で、 NFS マウントなどはなく、コマンド 一三ロ 130 UNIX MAGAZ 工 NE 2004.9