Linux Journal 6月号発売中。今月の特集は Linux を支える人たち。
▼▼▼ディストリビューション関連ニュース▼▼▼Best Linux のロシア語バージョンが誕生。
Best Linux 2000 R2-Moscow
ラスベガスで開催された Networld+Interop (N+I) で Axis Communications は LAN やインターネットへのワイヤレスの広帯域接続を可能にするソリューションを展示した。第4四半期には広範囲の製品が登場する模様。Bluetooth アクセスポイントは携帯電話、PDA、ラップトップなどがインターネットやネットワークにアクセスできる領域を形成する。この領域によってユーザのサービス範囲が拡大される。将来のホテルではホテルの部屋から会社のメールをチェックしたり、イントラネットにアクセスしたり、はたまた PDA でファクスの送信、食事のオーダー、チェックアウトなどが可能になるかもしれない。今回のモデルには Axis のワンチップシステムと Bluetooth スタックを組込んだ組込み Linux が採用されている。
●NewlixNwelix Corporation は 3D Microcomputers Wholesale and Distribution との戦略的提携を発表した。Newlix はインテルベースのシステムに高性能のアレイを提供している。主力商品の Newlix OfficeServer はプラグアンドプレイ、ウェブベースでの環境設定に対応した堅牢なネットワーク OS だ。一方の 3D Microcomputers はカナダのコンピュータシステムメーカの大手だ。
Newlix Corporation は Look Communications Inc. との提携を発表した。Newlix OfficeServer の販売拡大が目的だ。Newlix OfficeServer は 中小規模ビジネス向けの安全なインターネットアクセスを可能にする Linux ベースのターンキーネットワーク OS だ。Look Communications は大手のワイヤレスキャリアであり、ISP である。
Newlix Corporation (www.newlix.com) はオタワに本社を置く株式未公開の企業だ。株主の1社は Corel Corporation。中小規模ビジネス向けのネットワーク OS 用のソフトウェアの開発、OEM、VAR 向けのコア製品提供に注力している。
●Red Hat Red Hat 64ビット Itanium Linux をリリース (ZDnet の記事)
(
Red Hat のプレスリリース)
RedHat Inc. は組込み用 Linux 開発ツール、Red Hat Embedded DevKit(EDK)を発表した。EDK は幅広いプラットフォームに対応した組込み用 Linux アプリケーション開発の統合環境。ターゲットはインターネットのインフラ用アプライアンスやコンシューマ用アプライアンスメーカー、その他通信、組込みエンタープライズ市場などだ。価格は199ドル95セントから。EDK の特徴は Red Hat が築いてきた優れたサポート体制で、Red Hat は EDK 用の2種のサポートを提供する。小規模ワークグループ向けの付帯サービスと大規模開発グループ向けのプラチナサポートだ。プラチナサポートは無制限の要求に対し優先的な回答が得られる。
www.redhat.com/store
バンクーバのディストリビュータ
www.lutelinux.com
Filesystem Hierarchy Standard (FHS) 2.1 が完成。FHS 2.1 は FSSTND 1.2 や FHS 2.0 に替わるものだ。FHS はファイルやディレクトリの利用方法を定義するものでその仕様は Linux ディストリビュータや Unix OS でも採用されている。FHS やその前身の FSSTND は Debian、Red Hat、Caldera、SuSE など多数のディストリビュータが採用している。
FHS 2.1 に関する情報はhttp://www.pathname.com/fhs/
|
Strictly eBusiness Solutions Expo |
June 7 & 8, 2000 Minneapolis Convention Center Minneapolis, MN Visit www.strictlyebusinessexpo.com |
|
USENIX |
June 19-23, 2000 San Diego, CA www.usenix.org/events/usenix2000/ |
|
LinuxFest |
June 20-24, 2000 Kansas City, KS www.linuxfest.com |
|
PC Expo |
June 27-29, 2000 New York, NY www.pcexpo.com |
|
LinuxConference |
June 27-28, 2000 Zürich, Switzerland www.linux-conference.ch |
|
"Libre" Software Meeting #1 (Rencontres mondiales du logiciels libre), sponsored by ABUL (Linux Users Bordeaux Association) |
July 5-9, 2000 Bordeaux, France French: lsm.abul.org/lsm-fr.html English: lsm.abul.org |
|
Summer COMDEX |
July 12-14, 2000 Toronto, Canada www.zdevents.com/comdex |
|
* O'Reilly/2000 Open Source Software Convention |
July 17-20, 2000 Monterey, CA conferences.oreilly.com/convention2000.html |
|
Ottawa Linux Symposium |
July 19-22, 2000 Ottawa, Canada www.ottawalinuxsymposium.org |
|
IEEE Computer Fair 2000 Focus: Open Source Systems |
August 25-26, 2000 Huntsville, Alabama www.ieee-computer-fair.org |
|
Atlanta Linux Showcase |
October 10-14, 2000 Atlanta, GA www.linuxshowcase.org |
|
Fall COMDEX |
November 13-17, 2000 Las Vegas, NV www.zdevents.com/comdex |
|
USENIX Winter - LISA 2000 |
December 3-8, 2000 New Orleans, LA www.usenix.org |
E-Commerce Times の Linux 関連ニュース
http://www.ecommercetimes.com/linux/
Micron Electronics のウェブホスティング子会社 HostPro, Inc.(www.hostpro.net) と Cobalt Networks, Inc., (www.cobalt.com) が提携。Cobalt RaQ 3 と HostPro のウェブホスティングの販売増を狙う。
Cobalt Networks Inc. は ウェブサイト用の高性能のクラスタリングソリューション、Cobalt StaQware を発表した。これは Cobalt RaQ 3i 上で動作し、複雑な設定は必要ない。
●Linux の RAID ソリューションLInux 対応の RAID 製品。SCSI、IDE 両ディスクドライブ対応で OS に依存しない。
www.raidweb.com
Cybernet Systems Corporation は Linux 用 NetMAX インターネットアプライアンスソフトウェア2製品を発表した。旧製品と同様低価格ながら機能は大幅にアップしインストールも容易。NetMAX インターネットサーバスイートは一つの IP アドレスで複数のドメインをホストすることも可能で、ファイアウォールの機能も改善している。
●ストリーミングサーバコミュニケーションサーバ、組込みソフトのサービスプロバイダ、Computer I/O Corporation は Easy I/O (TM) T1/E1 ストリーミングサーバを発表した。T1/E1 ストリーミングサーバは ユーザの LAN 環境から T1/E1 DS0 にダイレクトにアクセスできる。
●LinuxMall と EBIZ (TheLinuxStore) が合併LinuxMall.com と TheLinuxStore.com が合併する。合併によりインターネット最大の Linux ショッピングモールとなる。合併後の収益は2,500万ドル以上。合併後の名称は LinuxMall.com となる。合併後は NASDAQ での上場を目指す。
●Software Carpentry Design の決勝戦Software Carpentry Project がオープンソースデザイン大会の決勝戦を迎える。
http://www.software-carpentry.com/first-round-results.html
●CommuniGate Pro Mail Server の Linux StrongARM 版Stalker Software はメッセージングサーバの Linux StrongARM バージョンを発表した。CommuniGate Pro は非常にポータブルなメッセージングシステムで、現在のインストールベースは小規模のISP から大規模の ISP やフォーチュン 500 の企業にまで及ぶ。プラットフォームは PowerPC、MIPS、Alpha、Sparc、StrongARM 上の Linux。シングルサーバで100,000アカウントをサポートし、CommuniGate Pro のクラスタリング機構を使用すれば事実上アカウント数は無制限となる。MIPS ベースの Cobalt Cubes で使用される CommuniGate Pro は理想的なインターネットアプライアンスだろう。トライアルバージョンはhttp://www.stalker.com/CommuniGatePro/ からダウンロードできる。
●英国で初の Linux コンファレンス英国で初めての Linux コンファレンスが開かれる。場所はロンドンのオリンピアコンファレンスセンターで幹事は SuSE inux LTD. が務める。テーマは企業サーバとしては認識され始めている Linux をデスクトップとしても広めようというもので IBM も参加している。
http://www.suse.com
Magic Software は Sintec Call Centers Ltd. と ITM を買収した。両社とも Magic Solutions Partner だ。
Magic Software Enterprise は フードサービス企業 Compass Group PLC に e-procurement ソリューションを提供する。e-procurement ソリューションは Magic のフランス子会社が開発したもので Magic の B2B ソリューションである Magic eMerchant を基に構築されている。アプリケーションは6月には稼動する予定。
http://www.magic-sw.com
Lutris Technologies は Solemate にインタラクティブの custmatix (www.customatix.com) ウェブサイトを提供する。Customatix.com はインタラクティブの E-commerce サイトで、クリックするだけで自分にあった靴を作ることができる。customatix.com は オープンソースの Java/XML アプリケーションサーバ、Enhydra (www.enhydra.org) を利用している。
●Linux リンクHow to publish a trade secret (Microsoft's Keberos 仕様)
Microsoft's Gamble of a Lifetime ソフトウェアベンダからASPへ
オープンソース
Napster と Gnutella
BORG(BMRT Ordinary Rendering GUI) の最新バージョン (0.2.20) のダウンロードがwww.project-borg.org から可能。Linux, WinNT, Solaris などの BMRT 対応のプラットフォームで動作する。Java 1.1.7 以上が必要。
●Linux アカウンティングソフトフル機能の Linux 版 AccounttiX が発表された。詳細な情報はwww.accountixinc.com を参照。
●Loki: Heavy Gear IIHeavy Gear II から Loki は 3D オーディオとジョイスティックをサポートする。Heavy Gear II は Linux ネットワークに最適化されており、リアルタイムのネットワーク対戦が可能。2000年中にはさらに1ダース以上のゲームの Linux への移植が予定されている。
Loki は OpenAL を使った 3D サウンドサポートに注力している。Loki は1999年には16ゲームをリリース、2000年には16タイトルのリリースを予定している。
www.lokigames.com
Quake III Arena 用の Linux SDK がリリースされた。ダウンロードはunsupported beta versionから。
●その他のソフトウェアKylix, Borlandの Delphi Linux 版
Aestiva HTML/OS, ウェブデータベース構築
CRiSP: プログラマ用のエディタ、FTPクライアント、vi/emacs エミュレーションなど機能豊富。21日有効の評価版
Cybozu 日本語オフィススイートの英語版、60日有効の評価版
ベクタドローイングアプリケーション、Canvas 7。ベータ版のダウンロードはDeneba のサイト から。
MontaVista: Linux カーネル用のリアルタイムスケジューラー。
http://www.mvista.com/realtime/rtsched.html
Linux 用 EiconCard Connections:EiconCard ネットワークインタフェースカードと併用して多様な通信機能を提供する
OperaはRSAの RASFE Crypto-Ci 1.0 暗号化ソフトウェアをオペラブラウザに利用。
ISP の増加に伴いサービスも改善しており、料金も下がっている。それでも電話代は発生する。たとえ電話代がフリーになっても ISP の料金が発生する。フリーの ISP はユーザがインターネットにアクセスしているときに広告を表示する。Linux 版のフリーの ISP があったとしても広告が表示されるのではどうだろうか。そこでフリーで豊富な機能を提供する Linux ISP について考えてみたい。
フリーの Linux ISP のメリットは何か。次の世代の Linux ユーザを育てることと将来の IT 時代のために現在のインフラを渡すことだ。現在インターネット、コンピュータなどにアクセスが限られているのは子供だ。電話が従量制だったり、親がコンピュータを独占しては子供のアクセスは制限されてしまう。スポーツなどのように充実した環境を整えることは重要だ。子供のうちに十分なインフラにアクセスできるようになれば将来は明るい。Linux を使用させれば現在のデスクトップ競争などもなくなるだろう。
状況は変わりつつあるのかもしれないが人々は与えられたもの (OS) を使わされている。いずれは選択が可能になるのだろうがすぐにではない。Linux を広める努力はしなければならない。フリーのインターネットアクセスを提供するなどでだ。ウェブブラウザ、オフィススイート、ドローソフトなどエンドユーザに必要なものは揃っている。
Linux ユーザが増えれば Linux 自体への関心も高まる。バグリポートやユーザの要求が増えればそれだけ Linux の品質も改善されるというものだ。Linus や Alan のいないコミュニティは考えられないが将来のために新たな種をまく必要もある。これを読んでいる方もいつかはコミュニティへの貢献をしてみたいと思いませんか。
いずれの国にも共通のバックボーンがない。学問と商業のバックボーンは別だ。Linux のミラーやリポジトリは世界に分散しているがこれがまとまるとミラーサイトがあってもダウンロードは遅くなるだろう。ミラーサイトは重要だがフリーの ISP、全国的規模の ISP も重要だ。ここで議論する 0800-Linux ISP は全国的なものでなければならない。PPP リンクも IP ヘッダーだけではない別な圧縮も考えなければならない。 さらにシリアルロードバランスの利用や ISDN/xDSL も念頭に置かなければならない。
安全性はどうか。現在の ISP の機能で十分だろうか。「ビッグブラザー」の存在を忘れてはならない。0800-Linux ISP では暗号化 PPP、PGP/GPG の使用などで安全性を高めることができる。
ユーザベースが拡大すればそこに市場が形成される。ディストリビューション、サポート、Linux プレインストール PC の需要増大など新たな経済の時代が訪れようとしている今、そのきっかけを作らなければならない。その他将来訪れるだろう IT 技術者の不足にもこのオープン ISP 計画が役に立つ。コンピュータやインターネットに触れる人が多くなれば技能を有する人も多くなる。
フリーの Linux ISP が Linux コミュニティに有用なものだとしてそれを達成する資金はどうするか。既存の Linux/ オープンソースのファンドを利用することも可能だ。もしこのプロジェクトが実行されれば Linux ディストリビューションの企業が利益を得ることは確かだ。例えば SuSE、RedHat、Corel、Mandrake などは今までも多数のプロジェクトを支援してきた。このプロジェクトが実を結べばディストリビュータはフリーインターネットも売り込むことが可能になる。彼らの支援も得られるだろう。その他 Linux 関連書籍の出版社、Un*x のベンダ、ハードウェアベンダの支援も得られるだろう。Linux をプリインストールし、フリーのアプリケーション、オフィススイート、インターネットをバンドルしたマシンが売れればハードウェアベンダは M* に余計な支払いをしなくてすむ。
政府の立場はどうだろう。現在はあらゆる人々が情報、テクノロジに容易にアクセスできるようになったが南北間の情報格差は今後も拡大するだろう。サービス、情報、テクノロジにアクセスする人々が増加すればそれだけ格差が拡大する。インフラの充実ということを考えれば政府としても支援する理由がある。例えばプロジェクトに対する資金援助の際の減税などで。エンドユーザから見た場合はどうか。プロジェクトの趣旨からエンドユーザに課金をするわけにはいかない。エンドユーザは Linux をプリインストールしたマシンを手に入れ、0800-Linux とダイアルすればインターネットにアクセスできる。エンドユーザの支援としては例えばハードウェアの寄贈とか 既存の ISP への料金の何分の一かの寄付などが可能ではないだろうか。
このプロジェクトの実践にはまずメーリングリストを作り ダイアルアップでインターネットにアクセスしている Linux ユーザを確認する。フリーの Linux ユーザだけの ISP を作るには多額の資金が必要だ。ポイントを変えてみよう。資金調達ができフリーの ISP ができたとしたらこれは価値があるだろうか。もしそうなら資金調達の方法はいろいろある。これは Linux コミュニティ内部で実践しなくてはならないプロジェクトだ。
今月の漫画 HelpDex をご覧になるには ここ をクリックしてください。
Linux Professional Institute (LPI) は Linux のキャリア増進、収益性拡大のための人材を広く募集している。これまでにも LPI と支援団体、企業はかなりの時間と金額を公正なテストシステムの導入に費やしてきた。LPI の認定テストは Virtual University Enterprises (VUE) を通して広範囲に行われている。現在 LPI はレベル2 認定プログラムに向けて作業を続けている。この作業に参加を希望する人はkara@lpi.org か scott@lpi.org へ連絡を。
今年は飛躍の年だ。LPI はフランス、ドイツ、オーストラリア、カナダ、アメリカなどでイベントを予定している。4月の Comdex and Linux Business Expo ではレベルワンのテストが行われ200人が受験した。現在ロンドンのオリンピアコンベンションセンターで6月1-2日(www.itevents.co.uk)、トロントで7月12-14日に Linux Business Expo (www.zdevents.com)、8月15-17日のサンノゼの Linux World (www.idg.com/events) などが予定されている。LPI は今後も最新の認定プログラムを提供するつもりでいる。ユーザの知識を資格で形のあるものに。
Linux には適当な CAD プログラムがないと言われたが、いくつかの選択肢がある。それぞれパワーや機能に差がある。
Qcad は多分最初の GPL CAD パッケージだ。Qcad はシンプルな 2-D エディタで フォーマットは DXF ファイルだ。名前は Qt ツールキットからきている。だが KDE が必ずしも必要ではない。筆者は Xfce と AfterStep で使用している。シンプルなアイコンメニューは機能的で利用しやすい。直線や円弧は座標を使って簡単に描くことができる。フォントは限られているようだが増やすことも可能だ。NACA のウィングセクションを取り込んでみたが正常だった。一部分を修正して保存し AC3D で表示してみたが問題はない。AC3D ユーザには手ごろな平面図エディタとして使えるだろう。
CAM Expert は Qcad の商用版という感じだ。インタフェースは似ているが NC-プログラムの機能が豊富だ。NC-プログラムに限らず研削機械、CAM シミュレーションなど高機能だ。
http://www.ribbonsoft.com/から体験版がダウンロードできる。
SISCAD-P は 2-D パラメトリックの CAD システムだ。インストールは SuSE ユーザでなければ若干複雑だがそれだけのことはある。インタフェースは Sketcher に似ているが、非常に高機能だ。機能が制限されたデモバージョンがダウンロードできる。(ftp://tsx-11.mit.edu/pub/linux/packages/cad/)
ME10 は CoCreate の 2-D パラメトリック CAD だ。CoCreate は Hewlett-Packard の子会社で学習期間は非常に短い。操作はアイコンメニューから行う。特徴はパラメトリックでアセンブリはパーツの複数のコピーやインスタンスを含む。パーツが修正されるとインスタンスもアップデートされる。同様にアセンブリ自体も他のアセンブリのインスタンスとして挿入することができる。ビューは独自のブラウザを使用する。機能限定の体験版がダウンロードできる。(http://www.cocreate.com/english/products/2d/index.htm)
CADDA はDAVEG のCAD だ。体験版は用意されていなかったが、外見はよさそうだ。CADDA は CAD、CAM の機能を有する。CAD データは 3-D、2-D モデルとしてインポートできる。CADDA は CNC マシンの工程で直接利用できる3D-CAD データを作成できる。また CNC マシンと直接接続することも可能。プラットフォームは HP-UX だったが1998年に 初めて Linux バージョンがリリースされ、現在のユーザは300に上る。詳しい情報はhttp://www.daveg.com/index_e.htmlから得られる。
Varicad はオプションでプルダウンメニューとアイコンメニューとを選択できる。プルダウンメニューは階層が深くなってしまうが、アイコンメニューはあまり直感的ではない。Varicad は昨年 LJ で好評だったこともありユーザは多い。DXF、IGS フォーマットをインポート、エクスポートでき、成形や 2-D 画像の回転などが可能。扱う立体はプリズム、円筒、関節、ピラミッド、錐体、螺旋など多種にわたる。アンドゥ、リドゥは分かりやすい。保存機能に制限のある体験版がダウンロードできる。さらにトライアルキーを取得すれば30日間使用できる。http://www.varicad.com/。
Bentley は Microstation 製品で良く知られている。商用版はリリースされていないがアカデミック版が存在する。ホームページには商用版への請願書が用意されている。ユーザが増えれば考えるということなのだろう。アカデミック版は UNIX の商用版に比べ Paranoid ライブラリが付属していないだけだが、モデラー、TriForma、MS/J などが Paranoid ライブラリを使用している。http://www.bentley.com/academic/products/linux2.htm。
Varimetrix は リリースされて3年になる。最新の製品は Vision だ。以前の VX Classic ともども商用版で個人ユーザがおいそれと購入できる価格ではない。そのために得られる情報も限られている。動作環境が Windows 95 以降ということになっているが Linux/Wine で快適に動作する。VX Classic はモジュールに分解できる。モジュールはモデリング、VX Assembly、製図、VX Manufacturing からなる。VX Manufacturing は CAM ツールだ。モジュールの機能は非常に多岐にわたる。ウェブページには何の記載もないが Vision の Linux 版は商用版がリリースされている。http://www.vx.com/。
フリーの GPL から高価な商用版までいろいろなオプションがあります。今後リリース予定の製品もあります。Matra Datavision は Cascade ライブラリをオープンソースとして公開する予定です。今後に期待しましょう。同社のホームページ、http://opencascade.org/からは目を離せません。これからは GPL プロジェクトも商用版も区別なく理解しサポートしていくことが大事だと思います。
この記事を読む前にCreating Installation Cds from various Linux Distributions. に目を通しておいてください。cdrecord の使い方が分かります。CDROM にライブの Linux ファイルシステムを作れば
まず EXT2 CDROM とブート可能なフロッピディスクが必要だ。iso9660 フォーマットの方が簡単だしそれを使う人にはこの部分は必要ない。ext2 フォーマットを使えば簡単にハードディスクでテストができる。テストするハードディスクはリードオンリーにする必要がある。
ISO9660 フォーマットの CDROM の作り方も簡単に説明しよう。ISO9660 フォーマットの CDROM を使うことはその CDROM からシステムを起動できるということだ。これにはループバックデバイスやパーティションは必要ない。必要なのはディレクトリと "mkisofs" というプログラムだけだ。
ブート可能な CDROM を作るコマンドは次の通り。
mkisofs -aJIL -r -o /tmp/Boot_Image /CDROM
/CDROM はCDROM に焼くイメージのあるディレクトリ
ライブファイルシステムを作る上でもっとも大変なことは重要なファイルをコピーして設定することだ。Linux ファイルシステムと基本的に同じディレクトリ構造を持たなければならない。/usr 以下のファイルは重要なものだけを使えばいい。/tmp はラムディスクにマウントする。/var は /tmp/var だ。/tmp/Boot_Image に必要なディレクトリを作成し、必要なファイルをコピーする。次に etc/inittab ファイルを開いて runlevel を 1 に変更する。
id:5:initdefault: を
id:1:initdefault: に修正
etc/fstab の設定は例えば次のようにする。
/dev/hdc /
ext2 defaults
1 1
/dev/fd0 /mnt/floppy
ext2 noauto,owner 0 0
none /proc
proc defaults
0 0
none /dev/pts
devpts gid=5,mode=620 0 0
/dev/hda6
swap
swap defaults
スワップファイルの設定は実際の環境に合わせて変更する。
etc/rc.d/rc.local に次のコマンドを追加する。
mkfs -t ext2 /dev/ram0
mount /dev/ram0 /tmp
chmod 777 /tmp
chmod +t /tmp
ラムディスクを持ったブートディスクを作成する。
mkbootdisk `uname -r`
フロッピディスクをマウントして lilo.conf ファイルに "ramdisk=35000" を追加する。lilo.conf の内容は次のようになる。
boot=/dev/fd0
timeout=100
message=/boot/message
prompt
image=/vmlinuz-2.2.12-32
label=linux
### /dev/hdc は実際の cdrom デバイス名
root=/dev/hdc
ramdisk=35000
image=/vmlinuz-2.2.12-32
label=rescue
append="load_ramdisk=2 prompt_ramdisk=1"
root=/dev/fd0
liloコマンドを実行してフロッピディスクをアンマウントする。
lilo -r /mnt/floppy_test
umount /dev/fd0
これで CDROM を root にしたブート可能なフロッピディスクが出来上がった。フロッピディスクのイメージも CDROM に焼きこむなら lilo.conf は次のようになる。
boot=/dev/hdc
timeout=100
message=/boot/message
prompt
image=/vmlinuz-2.2.12-32
label=linux
root=/dev/hdc
ramdisk=35000
フロッピディスクをアンマウントしてフロッピのイメージを CDROM に焼く。
dd if=/dev/fd0 of=/tmp/Bootimage
この記事が大変大雑把なものになってしまいました。他の方々の力を借りてより良いものにしたいと思います。次回はもっと整理をするつもりです。
前回は繰り返しと条件分岐について説明しました。今回は便利なツールを紹介します。以前、クリッパデータベースを操作するスクリプトを書いていたとき "bash" の限界から大分苦労したことがあります。結局 "awk" を使って書き直しました。要した時間はわずか15分です。ツールを変えることに慎重になりすぎる必要はありません。
非常に使用頻度の高い "cat" は本来の機能以外にも便利な機能がたくさんある。-v オプションは EOF と TAB を除いて "^" で表示する。コマンドを実行して「バイナリファイル」というエラーメッセージが出る場合などに有効。"tr" コマンドの代役にもなる。-A オプションはすべてのキャラクタを表示する。行末と TAB を "$"、"I" で表示する。-n オプションは行番号を付加する。スクリプトを実行しているときに1-2行の文字列を挿入するようなミニエディタやスクリプトの最初に表示するエラーメッセージなどにも利用できる。次の二つのスクリプトを比較して欲しい。
...Syntax:
guess [-fnrs]
-f Force mode:
if no mental activity is detected,
take a Scientific Wild-Ass Guess (SWAG) and execute.
-n Read your
neighbor's mind; commonly used to retrieve
the URLs of really good porno sites.
-r Reboot
brain via TCP (Telepathic Control Protocol) - for
those times when you're drawing a complete blank.
-s Read the
supervisor's mind; implies the '-f' option.
!
exit
...
二つの感嘆符の間の文字列がフォーマットされて stdout (ディスプレイ) に表示される。
一文字を処理する場合には "tr" が便利だ。例えば DOS のテキストを Unix のテキストに変換するスクリプトは次のようになる。
#!/bin/bash
[ -z $1 ] && { echo
"d2u - converts DOS text to Unix."; echo \
"Syntax: d2u <file>"; exit }
cat $1|tr -d '\015'
少し道草をしよう。前回 "if" 節の説明をしたがもう一度繰り返そう。ここではステートメントや文法にあわせたコマンドを書く代わりにコマンドの戻り値を使う。コマンドは起動すると終了時に必ず値を返す。通常は正常終了の 0 と 異常終了の 1 だ。文字列の長さを返す関数の場合には文字列の長さになる。これをわれわれのスクリプトにも採用する。終了時に複数のメッセージを生成するなら ステートメントの最後に "exit n" を使おう。n が返されるコードだ。ただしこのコードは内部のフラッグで目に見えるものではない。テストのために "bash" では簡単な方法が準備されている。"&&" (論理積) と "||" (論理和) だ。上記のスクリプトは「もし $1 がなければ次のステートメントを実行する」という意味だ。"A && B" ステートメントは A が真で B も真なら(B がコマンドならこの場合は実行される)、"A || B" ステートメントは A が偽なら B が真(B がコマンドなら実行される)となる。次の二つのスクリプトは同じ動作をする。
if [ -z $1 ] then
echo "Enter a parameter."
else
echo
"Parameter entered."
fi
[ -z $1 ] &&
echo "Enter a parameter." || "Parameter entered."
二つ目のスクリプトは少し分かりにくい。"&&" の後に続く部分が偽なら "||" に続く部分が実行される。"d2u" スクリプトに話を戻そう。2行目の最後の "\" は次の行に続くという意味だ。行が長くなる場合には読みやすくなる。ただしコマンドや引用符の途中では使わないようにしよう。それではスクリプトの肝心な部分に話を戻そう。"cat $1|tr -d '\015'" は本来のテキストをパイプで 'tr' に送り、DOS の CR を削除している。改行には DOS では "CR/LF" が使われ、Unix では "LF" が使われる。"tr" の man ページも参照してください。非常に役に立つコマンドです。
head/tail も非常に便利なコマンドで文法もほとんど同じだ。基本的な動作は与えられたファイルの最初の10行/最後の10行を表示する。ファイルの特定の行を示すスクリプトの例は次のようになる。
...
handle=5
line="$(head -$handle $1|tail
-1)"
...
変数 handle の値は "5" なので "head -5" で特定のファイルの先頭から5行を読み込み "tail -1" で渡された行の最後の行を表示する。 同様のことはより強力なツール、"sed" でもできるが、同じことができるなら簡単なツールを使うというのが原則だ。工夫すれば大きなファイルの内容をチェックすることもできる。例えば複数のデータベースのファイルから特定の文字列を検索しファイル名を表示するには次のようにする。
...
for fname in *dbf
do
head
-c10k $fname|grep -is "cost_in_sheckels_per_cubit" && echo $fname
done
...
"grep" は後で説明しよう。"head -c10K $fname" でファイルの先頭から10Kバイトを読み込み、"grep -is 'cost_in_sheckels_per_cubit'" で特定の文字列を検索する。見つかればファイル名を表示する。"tail" のオプションに "+" を付けると先頭何行目から表示をする。
cut/paste はフォーマットされたデータの項目を扱う便利なツールだ。ディレクトリの中の100K以上のファイルを検索し週に一度メールで報告するというスクリプトの例は次のようになる。
...
ls -r --sort=size $dir|tr -s
' '|cut -d ' ' -f 5,9|grep \
-E
^'[1-9]{6,} '|mail joe@thefarm.com -s "Logfile info"
...
"ls -r --sort=size $dir" はディレクトリの中のファイルをサイズの小さな順にソートして表示する。結果はパイプで "tr -s ' '" に渡され複数のスペースが一つに置きかえられる。結果をパイプで "cut -d ' ' -f 5,9" に渡す。再びパイプを使い、"grep" で最初が 1-9 で始まり5回続くものを検索し結果をメールで報告する。
paste はファイルを行ごとに統合するツールだ。曲名とアーティストが羅列されたリストから曲名を引用符で囲みたい場合のスクリプトは次のようになる。
#!/bin/bash
# Single-use file; no error
checking
cut -f 1 $1 > groups
# 'Tab' is the default separator
cut -f 2- $1 > songs
for n in $(seq $(grep -c $
songs))
do
echo
'"'>>quotes
done
paste -d "" quotes songs quotes
> list1
paste list1 groups > list
rm quotes songs groups list1
まずファイルの最初のアーティストを "groups" ファイルへ、残りの曲名を "songs" ファイルに分ける。"songs" と同じ行数の "quotes" ファイルを作成する。これには引用符が入っているだけだ。"paste" で引用符、曲名、引用符のファイルを作り、さらに "paste" でアーティストを加える。最後に作業ファイルを削除すれば終了だ。
grepは正規表現を使用してファイルからマッチした文字列を検索するツールだ。例えば400以上のファイルがあるディレクトリで "Who hath desired the Sea" を検索したい場合、
Odin:~$ grep -iA 12 "who hath
desired the sea" *
を実行すると結果は次のようになる。
Poems.txt-Who hath desired the
Sea? - the sight of salt water unbounded -
Poems.txt-The heave and the
halt and the hurl and the crash of the comber
Poems.txt-
wind-hounded?
Poems.txt-The sleek-barrelled
swell before storm, grey, foamless, enormous,
Poems.txt-
and growing -
Poems.txt:Stark calm on the
lap of the Line or the crazy-eyed hurricane
Poems.txt-
blowing -
Poems.txt-His Sea in no showing
the same - his Sea and the same 'neath each
Poems.txt-
showing:
Poems.txt-
His Sea as she slackens or thrills?
Poems.txt-So and no otherwise
- so and no otherwise - hillmen desire their
Poems.txt-
Hills!
Odin:~$
grep には多様なオプションがあり、詳細な検索方法や表示方法を指定することができる。上の例では "-A" でパターンがマッチした行以降の12行を表示し、"-i" オプションで大文字小文字の区別をしないと指定している。これまでのスクリプトの例でも何度も使用されており、実際の環境でも "grep" の使用頻度は非常に多い。バイナリファイルの中のテキストの検索なども可能だ。
良いシェルスクリプトを書くにはそれぞれのツールについての十分な知識が必要になる。"man" を常に参照するようにしよう。これらのツール以外にも便利なツールはたくさんあるがとりあえずこの6個のツールからはじめて欲しい。これらのツールは常に使われるものでしかもシェルスクリプトの幅を大きく広げてくれるものだ。
C++ では演算子のオーバーロードという手法があり、これを利用することでクラスの計算などが通常の数字や浮動小数点数などの計算と同じように処理することができる。Python にも同じような機能があるが実装はシンプルで明快だ。今回は Python のスペシャルメソッドを簡単に説明しよう。
Python でのクラス定義は次のようになる。
class foo: def __init__(self, n): print 'Constructor called' self.n = n def hello(self): print 'Hello world' def change(self, n): print 'Changing self.n' self.n = n f = foo(10) # データ n に10という値を持つクラス foo を作成 print f.n # n を表示 f.m = 20 # 新たなデータの追加も可能 f.hello() # 'Hello world' と表示 foo.change(f, 40) print f.n # 40 を表示__init__ は C++ のコンストラクタと同じような特別なメソッドでオブジェクトが作成されるときに自動的に呼び出される。メンバ関数には引数として "self" が渡されている。f.hello() が呼び出されるときはクラス foo が引数を f として呼び出される。この引数が通常 "self" と呼ばれている。C++ の "this" と同じようなものだ。
次のクラス定義を見てみよう。
class foo: def __init__(self, n): self.n = n def __add__(self, right): t = foo(0) t.n = self.n + right.n return t次に foo のオブジェクト f1、f2 を作成し加算する。
f1 = foo(10) # f1.n is 10 f2 = foo(20) # f2.n is 20 f3 = f1 + f2 print f3.n # prints 30これを実行すると Python のインタプリタは f1.__add__(f2) を呼び出す。関数 __add__ の "self" には f1 が、"right" には f2 が入る。
次に __add__ スペシャルメソッドの別な面を見てみよう。
class foo: def __init__(self, n): self.n = n def __radd__(self, left): t = foo(0) t.n = self.n + left.n print 'left.n is', left.n return t f1 = foo(10) f2 = foo(20) f3 = f1 + f2 # prints 'left.n is 10'上の例との違いは f1+f2 が f2.__radd__(f1) になっていることだ。
__str__ スペシャルメソッド
class foo: def __init__(self, n1, n2): self.n1 = n1 self.n2 = n2 def __str__(self): return 'foo instance:'+'n1='+`self.n1`+','+'n2='+`self.n2`を定義し実行すると次のようになる。
f1 = foo(10,20) print f1 # prints 'foo instance: n1=10,n2=20'Python に興味を持ったら Python Language Reference を参照し、__repr__ も見てください。
次は真偽を判定する機能です。__nonzero__ は呼ばれると 0 か 1 を返します。定義されていない場合は __len__ が定義されていれば __len__ が呼ばれます。どちらも定義されていなければ真とみなされる。使用例は次のとおり。
class foo: def __nonzero__(self): return 0 class baz: def __len__(self): return 0 class abc: pass f1 = foo() f2 = baz() f3 = abc() if (not f1): print 'foo: false' # prints 'foo: false' if (not f2): print 'baz: false' # prints 'baz: false' if (not f3): print 'abc: false' # does not print anything
次は list を考えてみよう。list の特徴はインデックスをつけられるということだ。つまり "print a[i]" という書き方ができる。そのための関数が __getitem__ だ。使用例は次のようになる。
class foo: def __init__(self, limit): self.limit = limit def __getitem__(self, key): if ((key > self.limit-1) or (key < -(self.limit-1))): raise IndexError else: return 2*key f = foo(10) # f acts like a 20 element array print f[0], f[1] # prints 0, 2 print f[-3] # prints -6 print f[10] # generates IndexErrorその他利用できる関数は __setitem__、__delitem__、__getslice__、__setslice__、__delslice__ などだ。
__getattr__(self, name) は第二引数に渡された属性の参照が失敗したときに呼ばれる。戻り値は AttributeError か属性の値だ。使用例は次のとおり。
class foo: def __getattr__(self, name): return 'no such attribute' f = foo() f.n = 100 print f.n # prints 100 print f.m # prints 'no such attribute'getattr(object, name) という組込みファンクションも同じような機能を提供している。
Python のディストリビューションには便利なドキュメントが添付されている。もし読者が Python の入門者ならtutorial を参照することを薦める。言語、ライブラリの説明も載っている。
Linux ユーザで仕事で出かける機会の多い人はラップトップが欲しいと考えることが多いと思います。そう言う筆者も昨年9月に theLinuxStore からラップトップを購入しました。その経験を Linux Gazette の読者と共有したいと思います。購入したラップトップの仕様は次の通りです。
| CPU | AMD K6-2 3D 300 |
|---|---|
| ディスプレイ | 13.3" XVGA (1024x768) TFT カラー液晶 |
| メモリ | 64 メガバイト |
| ビデオカード | Neomagic NM2160 128-bit, 2MB RAM |
| ハードディスクドライブ | 4.3 ギガバイト |
| マウス | ps/2 互換タッチパネル |
| cdrom | 24X |
| 3.5" フロッピ | 1.44 |
| サウンド | 16-ビット, マイクロフォン, スピーカ |
| 外部インタフェース | 外部モニタ, パラレル, Fasr irda, usb, etc. |
手に入れたマシンは仕事で出かけるときに携帯し非常に助かりました。Linux ドライバの入門コースを受講したときには後で実際に復習ができてとても助かりました。でもマシンが壊れてしまうことほど悪いことはありません。それが現実になってしまいました。液晶パネルが壊れてしまったのです。又 theLinuxStore に電話をしマシンを修理のために発送しました。UPS の追跡システムで マシンが theLinuxStore に到着したのは4月17日だと分かりました。theLinuxStore はマシンを修理のためにベンダに発送しました。5月23日現在、マシンの修理がいつ終了するかに関して theLinuxStore から何の返事もありません。これがいつ解決するか分かりませんが、分かった時点で Linux Gazette 上でお知らせするつもりです。
Linux Gazette の3月号でセキュリティを考慮したゲートウェイの構築方法を説明しました。今回は非常にスリムなゲートウェイを構築してみます。容量は130メガバイト程度プラススワップ領域。X Windows はインストールしないが、Midnight Commander はインストールする。前提条件は読者が Linux のインストールに関する知識がありケーブルモデムや DSLなどでインターネットに常時接続していること。
必要なシステムは 486、メモリ16MB、200MB ハードディスクドライブ、ネットワークカードが2枚、それに CD-ROM かネットワーク経由でインストール可能なこと。筆者が使用するマシンは50ドルで買った486 DX2 66、16MB RAM、512MB ハードディスクドライブ、サウンドカード、4X IDE CDROM のマシンから 486DX4 100、40MB RAM、サウンドカードをはずしてネットワークカードを2枚装着、あまっていたSCSIカードと 320MB の SCSI ハードディスクドライブ搭載に変更しました。使用するのは RedHat Linux 6.x です。どのディストリビューションでも動作すると思います。モニタが必要なのはインストール時だけです。まず始めに openssh のバイナリファイルを手に入れます。RedHat 6.2 を使っているなら ftp://thermo.stat.ncsu.edu/pub/openssh-usa から次のファイルをゲットしてください。
Linux をインストールし設定します。デフォルトの設定と違っている部分だけ説明します。
Partition Minimum size % of total Mine / 40 MB 10% 75 MB /boot 5 MB 5 MB 5 MB /home 100 MB 25% 200 MB /tmp 40 MB 10% 75 MB /usr 220 MB 45% 320 MB 1 /var 40 MB 10% 75 MB swap 64 MB 2X RAM 80 MB 2
rpm -e --nodeps pump mt-st eject bc mailcap apmd kernel-pcmcia-cs getty_ps setconsole setserial raidtools rmt sendmailLinux の習熟度により Linuxconf, kudzu, kbdconfig, authconfig, timeconfig, mouseconfig, ntsysv, setuptool などもアンインストールしてかまわない。
セキュリティの観点からファイアウォールが動作しているマシンで DNS サービスを動作させることは薦められません。個々のクライアントは ISP を使用する設定にするか、別のマシン上で動作させるべきです。ファイアウォール上では inetd サービスも必要ないと思います。開いているポートは ssh の22だけにすべきです。ネットワーク上に複数のユーザがいる場合は プロキシ/キャッシュ プログラムを走らせてもいいかもしれません。お勧めは Squid です。キャッシュをしないプログラムにはhttp://www.waldherr.org/junkbuster からダウンロードできる Junkbuster がある。これなら高性能の CPU や 大量のメモリなどを必要としない。ファイアウォールにはSeawall や pmfirewall などがある。pmfirewall は設定も簡単だがオプションも逆に少ない。