>>3515 zsh ありがとうございます。 行の編集についてはできました。 しかし、日付の操作については、 http://x68000.startshop.co.jp/~68user/unix/prgmemo.html#date を参考にしてやって見ました。 タイムゾーンを設定して、URLの例にあるのでは、上手くいったのですが % env TZ=JST+15 date (1日前の時刻を表示) % env TZ=JST-33 date (1日後の時刻を表示) 2日前では、 -9+48=39 % env TZ=JST+39 date は上手く行きませんでした。 環境は、HP-UX11.00、Bシェルです。 |
初めて投稿いたします。 UNIXのコマンドで、split というファイル分割コマンドがありますが、分割後のファイルをWindowsで結合させるための、MS-DOS コマンド、あるいは、フリーのソフトを知らないでしょうか。 |
>>3517 せんべい > 分割後のファイルをWindowsで結合させるための、MS-DOS コマンド copy a.txt+b.txt+c.txt out.txt でできたような気がします。 > あるいは、フリーのソフトを知らないでしょうか。 http://www.so-net.ne.jp/download/win/util/file/spl_mrg/ など。 |
はじめまして,unix初心者です,教えて下さい。 異常終了させてしまい,1つのハードがmountされません。fsckを使って修復しようとしたのですが,エラーメッセージによると部分的なセクターが破損しているため修復できないとの内容でした。破損している箇所だけのフォーマットは可能なのでしょうか?もしあれば方法を教えて下さい。お願い致します。 |
>>3519 初心者 詳しくないのでなんともいえませんが (これまで fsck でこけた 経験がないので)、少なくとも以下の情報は必要でしょう。 - OS 名とバージョン - ファイルシステム名 (ufs, ext2 など) - 正確なエラーメッセージ (エラーメッセージで検索できるよう原文を提示する) 検索のキーワードとしては「スーパーブロック」ですかねぇ。 |
unixのfindコマンドについて教えて下さい。 findを使用するとファイルの検索ができますが、 自分がいるカレントのみを検索し、その配下にあるディレクトリ を検索したくないのですが、どうすれば可能でしょうか。 例えば、 現在位置 cd /tmp/tool/bin /tmp/tool/bin 入るとします。 find .. -name ".log" -type f -print と行うと、tool及び、bin配下やよのたのディレクトリを検索 find .. ! -depth -name "*.log" -print と行うと検索しない。 1つもだった、ところのファイルのみを検索したい |
>>3521 yabu -maxdepth 1 でいけるでしょうが、-maxdepth に対応 していない find もあります。 単にファイル名でマッチさせたいだけあれば、 % echo *.log でもいいでしょう。 |
Sunでaliasの設定でつまづいてます。。(alias rm="rm -i") シェルはshなので.profileに記述しましたが効きません。 ネット検索しましたがshでのalias設定なしとありました。 shでのalias設定はどう行えばいいでしょうか? ご教授お願いします |
>>3522 68user >-maxdepth 1 でいけるでしょうが、-maxdepth に対応 >していない find もあります。 HP-UX、SunOSともに対応していませんでした。 >単にファイル名でマッチさせたいだけあれば、 > % echo *.log >でもいいでしょう。 でやらせていただきました。 |
IE などブラウザ上のボタンなどの操作を外部からしたいのですがしたいのですが、可能でしょうか? 例、VC++ のソフトで、Yahoo の検索を検索キーワードを入力や検索ボタンを押したい。 例、証券会社のHPで定期的に株価更新のため株価ボタンを押す。 などです。 ここの主旨から外れるかも知れませんが、宜しくお願いします。 |
>>3523 moko まずは $ . $HOME/.profile としましょう。それで alias が効かないなら .profile の書き方が悪い。alias が効くなら .profile が読み込まれ ていないか、.profile 読み込み後に unalias されている んでしょう。 >>3525 external 詳しいところは知らないので、キーワードだけ並べておきます。 COM (Component Object Model) OLE (Object Linking and Embedding) ActiveX |
初歩的な質問ですが、Solarisのhostsについて教えて下さい。 他の端末と通信する為には/etc/inet/hostsにIPを書くと思っています。 でも、/etc/hostsにも同じhostsがあり、両方直しています。 /etc/hostsには/etc/inet/hostsと違った意味があるのでしょうか。 宜しくお願いします。 |
>>3527 yuki http://www.freebsd.org/cgi/man.cgi?query=hosts&manpath=SunOS+5.9 NOTES /etc/inet/hosts is the official SVR4 name of the hosts file. The symbolic link /etc/hosts exists for BSD compatibility. というわけで、同じでしょう。 |
Volumeの初期化に関して,どうのような操作をすれば良いか教えてください。digital unix 4.0 |
crontabを実行した時間がわかるようにするためにはどのような書き方をしたらよいかわかりません。教えていただけないでしょうか。 よろしくお願いいたします。 |
こんばんは。 Perlのほうが文字列処理などが書きやすい、でもCのほうが速度が速かったりするなどの理由から、XSを使用して二つの言語を合わせてみようと思いました。 そこで、CのヘッダをXSにかけてからPerlを実行したのですが、 "Your vendor has not defined Prime macro Prime" というエラーが出てしまいます。 XSによって生成されたのはPrimeというディレクトリで、その中にあるPrime.pmに、Perlから第一引数として数字を渡すものでした。 Perlのほうからは、 Prime::Prime($ARGV[0]) として呼び出しましたが、何がいけなかったのか、教えていただきたく思います。 よろしくお願いします。 |
AIXに付いて教えて! AIXマシンでは、gettimeofday()関数が使えない! よくよく調べると、コンパイル時、XOPEN_SOURCEを指定している為 である事が判ったが、XOPEN_SOURCEを外す訳にもいかず困ってます。 gettimeofday()関数と同じ機能で、置き換えられる関数ってないでしょうか? |
>>3529 kai Volume ってなんですか? 音量のことですか? であれば わかりません (ioctl とか使うんですかね)。 >>3530 momo 1. cron から実行するスクリプト内でファイルに時刻を記録する 2. * * * * * date>>/foo/bar/log; command とする。 3. /var/cron/logs などにあるログを見る。 >>3531 ken XS はよく知りませんが、perl のバージョンも、何をどうやったの かも書かれていないので何ともいえません。 下記は perl 5.005_03 の例ですが、まずはここからでしょう。 % h2xs -A -n Prime % cd Prime int Prime(num) int num; CODE: RETVAL = 2*num; OUTPUT: RETVAL % perl Makefile.pl % make hoge.pl を作成 % cat hoge.pl use ExtUtils::testlib; use Prime; print Prime::Prime(123),"\n"; % perl hoge.pl 246 >>3532 Hiro なぜ XOPEN_SOURCE が指定されていると gettimeofday が使えない のかよくわかりませんが、古い形のプロトタイプ宣言が〜とかいう 話ではないかと思うので、mygettimeofday.c を作って、 #include <sys/time.h> int gettimeofday (struct timeval *, void *) #undef XOPEN_SOURCE int mygettimeofday (struct timeval *Tp, void *Tzp){ return gettimeofday(Tp, Tzp); } とするとか。 |
>>3533 68user > int gettimeofday (struct timeval *, void *) #undef XOPEN_SOURCE int gettimeofday (struct timeval *, void *); #undef XOPEN_SOURCE のタイプミスです。 |
さきほどXSのことを質問させていただいたのですが、なんとか解決しました(汗 どうやら、根本的に思い違いをしていたのが原因のようで...。 わざわざのご回答、ありがとうございます。 もう少しぼくが早く解決して書き込んでいれば良かったのですけどね。 |
>>3528 68user The symbolic linkでしたか。 ぜんぜん気がつきませんでした。有難うございました。 |
はじめまして。タカと申します。 Perl関連について御教授ください。 Windows端末にてActivePerl-5.8.2.808-MSWin32-x86をインストールし Perlを作成しております。 そこで、PerlでExcelファイルに出力するプログラムを 作ろうと思っております。 その為、Spreadsheet-WriteExcel-0.42モジュールを、 ダウンロードしました。 本モジュールはWindowsでも機能すると表示されているのですが、 どうやって使用すればいいのか分かりません。 Spreadsheet::WriteExcel version 0.33(日本語訳)の HPを見ているのですが、私の知識不足で不明です。 もしご存知であれば御教授いただきたいのですが、 よろしくお願いいたします。 |
>>3537 タカ http://member.nifty.ne.jp/hippo2000/perltips/module_install.htm によると、ActivePerl の場合は PPM なるものを使うそうです。 # わたしは使ったことはありません。 |
ありがとうございました。 ちょっと試してみます。 |
クッキーに関する↓の冒頭でRFCに盛り込まれていないとありますが、 どうも2109で触れているそうですよ。 http://x68000.startshop.co.jp/~68user/webcgi/cookie.html 参考にさせていただいたサイト: http://www.nonki.net/technical/report/http-cookie/ http://www.ietf.org/rfc/rfc2109.txt |
>>3540 has ありがとうございます。とりあえずそこだけ直しておきます。 > どうも2109で触れているそうですよ。 RFC 2109 は obsolete で、今は RFC 2965 です。 http://www.studyinghttp.net/rfc_ja/rfc2965_ja.html でもまぁ、Set-Cookie2 は全然流行っていませんけどね。 |
はじめまして 右院堂 と申します。 いきなり質問で エゴ丸出しで申し訳ないですが ASP には Response.Buffer = True というのがあって、 ある html の form から 呼ばれた asp が 呼び元へ 自分の form を Response.Redirect で 返す時、Response.Redirect が実行されるまで HTMLヘッダーの出力を引き伸ばすことが出来ます。 これをやらないと HTMLヘッダーが 自分自身として Redirectされる前に出力されてしまうからです。 Perl では これに相当する記述はあるんでしょうか。 |
>>3542 右院堂 ASP はよく知りませんが、素の perl を使う場合は (そういう機能を 持つモジュールを使わない限りは) 相当する機能はないです (そういう 機能を持つモジュールの存在は知りません)。 $buf .= "出力文字列1"; $buf .= "出力文字列2"; ... print $buf; や、 open(STDOUT, "> /foo/bar/tmp.$$"); print "出力文字列1"; print "出力文字列2"; ... close(STDOUT); open(IN, "/foo/bar/tmp.$$"); print <IN>; close(IN); などと自分でバッファに保存し、最終的に出力するのが よいと思われます。 |
ポートに関しては初心者です。 すいませんが、ポート番号について教えて下さい。 Solarisを使用していますが、ポート番号は任意の決め事ですか? 現在使用しているSolarisは下記設定になっているようです。 WEBサーバはポート=80、FTP=20、プリントサーバ=9100 これらは、標準で決まっているのでしょうか? また、相手側を意識せず勝手にきめてもよいのでしょうか? 他に、ポートの設定をみる方法とかありましたらご教授下さい。 宜しくお願いします。 |
>>3544 yuki > Solarisを使用していますが、ポート番号は任意の決め事ですか? おおまかな指針はありますが、任意です。 > WEBサーバはポート=80、FTP=20、プリントサーバ=9100 デフォルトではそのような設定になっていますが、ほとんどの 場合は (サーバソフトウェアが対応していれば) ポートは変更 できるでしょう。ポート変更方法は各サーバソフトウェアの マニュアルに書いてあるはずです。 > また、相手側を意識せず勝手にきめてもよいのでしょうか? 標準的でないポートを使用するよう設定変更してもいいですが、 利用者に通知しないと使うことができません。 例えば web サーバであれば http://www.example.co.jp/ ではなく http://www.example.co.jp:8080/ にアクセスするようアナウンスしないといけませんし、プリンタで あれば自組織の環境設定手順書に 「プリンタの設定時に、ポート xxxx を使用するように設定してください」 と書いておく必要がある、といった感じです。 というわけで、標準的でないポートを使うことはできますが、 なにかとめんどくさい、という感じです。また、外部向けの サービスであれば、ファイアウォールで弾かれたりする危険性は 高まりますね。 |
irix使ってますが、ls -lでfileの詳細を見ると、拡張子の後に*が表示されてます。これはなにを意味するのでしょうか? |
>>3546 yosi 実行ファイルと思われます。ls の -F オプションの説明を読んでください。 |
UNIXのCシェル2点につてい教えて下さい。 1点目 以下の、a.txtファイルから第1フィールドの値を 先頭の'0' or "> 0 "のゴミを取って、10桁(先頭0なし)だけを また、第1フィールドの文末の半角スペースや’|’を取ってとり だしたいのですが、第1フィールはawkを使って取得できますが、 その後に編集ができません。たしか、sedの何かを使えば数字のみ だけを取り出せたと思うのですが、浮かんできません。 教えていただけないでしょうか。 cat a.txt | awk -F"," '{ print $1 }' | sed a.txt 09012345678,aaaa 07055593850,bbbb 9098765432,cccc 7012345678,ddddd > 07012345679 | ,eeeee 07012345670 ,ffff 出力結果 9012345678 7055593850 9098765432 7012345678 7012345679 7012345670 2点目 Cシェルで定義ファイルに設定してある項目を読み込むには どうしたらよいのですか。 定義ファイル MN=ABCDEFG FILE=/work/temp.txt set PARM1 = `grep ^MN 定義ファイル| awk -F"=" '{ print $1 }'` set PARM2 = `grep ^FILE 定義ファイル| awk -F"=" '{ print $1 }'` と繰り返すかないのでしょうか。 また、何も、タブとか半角スペースから始まっている場合もあると思うの ですが、どうすればよいのですか。 |
>>3548 つくも 1点目はawkのみで可能。 (古いawkではダメとかあるかも知れないけど。) ------ awk 'BEGIN { FS = "," ; } { i = match($1,"[1-9]"); print substr($1,i,10); }' a.txt ------ 2点目は、こんな事が許されるのか判りませんが ------ eval `awk 'BEGIN{ FS="=" }{ if(NF != 0) print "set " $1 " " $2}' param.txt` ------ 大人しく定義ファイルで「set A=val」と書いて sourceすべきだと思いますが・・・ |
>>3549 zsh 2点目は以下の間違い。 ------ eval `awk 'BEGIN{ FS="=" }{ if(NF != 0) print "set " $1 "=" $2 }' param.txt` ------ >68user様 半角カナ失礼しました。 |
>>3549 zsh >>3550 zsh ありがとうございました。 両方ともできました。 ただ、2点目については、定義ファイルでの変数名とシェル内での設定 する変数名がことなっていたので最初は誤ってしまいました。 |
はじめまして、恵美といいます。 いろいろ検索していましたら、このページにたどり着きました。 私は某会社のSE見習いなのですけれど、perlのリファレンスでつまづき悩んでいます。 ハッシュのリファレンスを上手にコピーする方法がよく、...いえ...さっぱりわからないです。 会社の人にきいたら、リファレンスは知らないと言われ、ダブルショックでした。 リファレンスを、1つ1つコピーすると $hash->{'str'} = $hash2->{'str'}; これだけなのですが、複数の値を同時にコピーするといつも失敗してます。 普通のハッシュでスライスを使うと、 my %hash = (a=>1,b=>2,c=>3); my %hash2 = (x=>11,y=>12,z=>13); @hash{'a','c'} = @hash2{'x','z'}; print $hash{'a'},$hash{'c'},"\n"; 11 13 となるのですけれど、同じことをリファレンスでやると失敗するんですよ。 $hash = {a=>1,b=>2,c=>3}; $hash2 = {x=>11,y=>12,z=>13} このとき、 print $hash->{'a'},$hash->{'c'},"\n"; の答えはどうしたら、 11 13 になるのでしょうか。 よろしくお願いします。 |
>>3552 恵美 - ($x{'k1'}, $x{'k2'}) は @x{'k1','k2'} と等価 (*1)。 - ハッシュのリファレンス $y のデリファレンスは $$y{'k1'} ($y->{'k1'} と同じ)。 をふまえた上で、今回は ($$y{'k1'}, $$y{'k2'}) を代入したい ので、*1 を素直に置き換えると @$hash{'a','c'} = @$hash2{'x','z'}; となります。 てゆーか、ハッシュスライスは使わない方がいいですよ。配列と 間違えやすいので、可読性低すぎです。わたしなら 2 項目であれば $hash->{'a'} = $hash2->{'x'}; $hash->{'c'} = $hash2->{'z'}; と 2行で書きます。 どうしても短く書きたい場合でも ($hash->{'a'}, $hash->{'c'}) = ($hash2->{'x'}, $hash2->{'z'}); とします。 項目数が多いなら my %map_table = ('x'=>'a', 'z'=>'c'); while (my ($fromkey, $tokey) = each %map_table){ $hash->{$tokey} = $hash2{$fromkey}; } とか。長くはなりますが、項目の対応がもっともわかりやすく、タイプ ミス ($hash と $hash2 を書き間違えるとか) の可能性も減ります。 |
こんにちは恵美です。 どうもありがとうです(^^)v すっかり解決して嬉しいです。 リファレンスはいまいちよくわかってないけど... 複数行で記述するのを1行でって思ってずっと悩んでいたんだけど、心の中を読まれちゃったかな... なんか、すごすぎるページなのでちょくちょく見に来ます。 おやすみなさい。 今日はありがとう(^^) |
はじめまして、瀧上と申します。 現在UNIX環境でのバッチ処理方式・環境設計を行っています。 開発経験はあるのですが、環境構築からやるのは初めてで頭を悩ましています。宜しければ下記の点についてご教授下さい。 デバッグメッセージの出力有無の切替について教えて下さい。 開発言語はCシェル&Cです。 以前のプロジェクトではC言語におけるデバッグメッセージを出力するしないを、環境変数で設定してしました。おそらく、これを見る事によりデバッグメッセージ出力用の共通関数にデバッグのON/OFFを切り替えさせていたのだと思います。 もし、上記以外に一般的な(適切)な方法があるなら教えて下さい。 レベルの低い質問で申し訳ないのですが、よろしくお願い致します。 ※UNIXの環境構築や、ジョブスケジューラにおけるNET設計の参考となる URLをご存知であれば教えていただきたいです。 |
>>3555 瀧上 > 上記以外に一般的な(適切)な方法があるなら教えて下さい。 しょせん決め事なので、一般解はありませんが、 - コマンドオプション (--debug や -d など) を指定する - make debug で、デバッグ用バイナリを生成する - make install すると ~/bin/ に通常バイナリを、~/bin/debug/ にデバッグ用バイナリを格納する などの方法があります。 どれでもいいので、いずれかをプロジェクトのルールとして決定して おくのがよいでしょう。 わたしの場合、 「デバッグモードは開発時のためのモードではなく、通常運用時や 後々のバグ追及時にこそ有用なもの」 という考え方なので、わたしが好む方法は以下の通りです。 - デバッグモードを実装する。デバッグモードの場合、rollback するなどして、データを一切更新しないようにする (まわりの環境に 一切影響を与えない) - デバッグモードとは別に、冗長なメッセージを出すだけの冗長 モード (verbose モード) を実装する。冗長モードの場合は、 通常どおりデータを更新する。 - エラー発生に気づきやすいよう、ログに吐いたメッセージは 標準出力・標準エラー出力にも吐くようにする。 - オプションでデバッグモード・冗長モードを切り替えられること。 例えば --debug でデバッグモード、--verbose で冗長モード、など。 デバッグモードの場合、自動的に冗長モードも有効にするようにする。 コード例は以下の通り。 int debug_flg = 0; int verbose_flg = 0; for ( i=1 ; i<argc ; i++ ){ if ( strcmp(argv[i], "--debug") == 0 ){ debug_flg = 1; verbose_flg = 1; } if ( strcmp(argv[i], "--verbose") == 0 ){ verbose_flg = 1; } } /* こんな感じで各種情報を出力 */ verbose("ほげほげ foo=[%d]", foo); .... if ( debug_flg ){ EXEC SQL ROLLBACK RELEASE WORK; } else { EXEC SQL COMMIT RELEASE WORK; } void verbose(char *fmt, ... ){ va_list ap; char buf[8192]; /* verbose モードでなければ、何もしない */ if ( ! verbose_flg ){ return; } va_start(ap, fmt); vsnprintf(buf, sizeof(buf-1), fmt, ap); va_end(ap); fprintf(stderr, "debug: %s", buf); } 使い方としては、 - 単に詳細なメッセージを表示したい場合は冗長モードを使う。 - まわりの環境に影響を与えず、とりあえずうまく動くか確かめたい 場合はデバッグモードを使う。 となります。 > UNIXの環境構築 UNIX の環境構築と言っても範囲が広すぎるので、なんともいえません。 > ジョブスケジューラにおけるNET設計 これは何でしょうか? JP1 とかの話? |
大変参考になります。 方式だけでなく、考え方とコードまで載せていただいたのは恐縮です。 参考例を深慮して方式を定めます。 ありがとうございました。 > UNIXの環境構築 UNIX の環境構築と言っても範囲が広すぎるので、なんともいえません。 →そうですね、すみません、主にUNIX環境でのバッチ処理におけるShellの置き場所や構成の最適な方式を調査できるHPを探していました。「コンパイラ等、ツールの環境(変数)設定ファイルは全て別で持つのが好ましいのか」、、とか、「バッチ処理起動shellでsourceする環境設定ファイルにディレクトリとOracleSIDを考えているが、これが最適なのか?」等です。。。開発、本番時に必要な要件を洗い出していけばおのずと出てくると思うので、考えてみます。 開発とUNIXでの開発経験が乏しいので、自分の知っている方式を、プロジェクトの標準として使っていいのか不安なのです(^^;) > ジョブスケジューラにおけるNET設計 これは何でしょうか? JP1 とかの話? そうです。本日書籍購入しました。上記と同じで、もし有効なHP等ご存知であれば教えてもらいたいと思ったので。。。。 |
>>3557 瀧上 > 主にUNIX環境でのバッチ処理におけるShellの置き場所や > 構成の最適な方式を調査できるHPを探していました。 そういうことを書いている web は見たことないですね。基本的に趣味で やってる人には関係ないし、それを知ってる企業は「ノウハウ」として 隠してしまいますので。 # しょーもないやり方を「ノウハウ」などと称しているところも # 多いわけですが。 ちょっと長くなりますが、まぁひととおり書いてみます。 まず、ユーザを複数作ります。例えばユーザ名が hoge なら、 hogedevel (開発環境) hogesi (SI (結合テスト) 環境) hogert (RT (受入テスト) 環境) の 3つくらい。それぞれのホームディレクトリは /home/hogedevel, /home/hogesi, /home/hogert などとします。 さらに DB が必要であれば、これも 3つ (hogedevel, hogesi, hogert) 作ります。 通常の開発は hogedevel を使います。hogesi や hogert は テストの段階で初めて使います。 「開発者は基本的に hogedevel しか使ってはいけない」 というシバリを入れるのもよいでしょう。 各ホームディレクトリの下には src/ ソース置き場。CVS などでソース管理すること。 conf/ 手で管理する設定ファイルなどを置く場所。 bin/ バイナリ置き場。src で make install すると作成される。 lib/ バイナリ以外の設定ファイルやデータファイルなど。 src で make install すると作成されるものに限る。 log/ ログファイル置き場 dat/ 生成するデータファイル・他から送られてきたデータファイル とします。 つまり src/ で make install すると bin/, lib/ が作成される わけなので、bin/ や lib/ は消しても src/ を元に再作成する ことができます。 しかし conf/ は手動管理の設定ファイル群なので、こちらは 消してはいけません (conf/ も CVS などで管理するのがよい でしょう)。 lib/ には、プログラムで生成する雛型のファイルとか、SQL*Loader 用に喰わせるファイルなど、devel, si, rt で共用のファイルを置き ます (実行形式のバイナリではないけど、プログラムの一部と見なして よいものを置く)。 で、環境変数は /home/hogedevel/conf/env.sh /home/hogesi/conf/env.sh /home/hogert/conf/env.sh に ORACLE_SID=hogedevel HOME=/home/hogedevel PATH=/home/hogedevel/bin ORACLE_HOME=... 書きます。 これを source して各アプリが起動し、 - DB の接続先は $ORACLE_SID とする - $HOME/log/ にログを吐く - $HOME/data/ にデータファイルを作成する とします。 というわけで、基本的には > バッチ処理起動shellでsourceする環境設定ファイルにディレクトリと > OracleSIDを考えているが、これが最適なのか? それでよいと思います。 > コンパイラ等、ツールの環境(変数)設定ファイルは全て別で持つのが > 好ましいのか どういうファイルのことを指しているのかよくわかりませんが、 $ORACLE_HOME/precomp/lib/env_precomp.mk とかですか? 基本的に、この辺は共通でよいのではないでしょうか。もし、一部の プログラムで特殊なことをしたければ Makefile 内で上書きすればよい わけで。 あと、いくつか気をつけるポイントをあげておきます。 - ディレクトリやファイルは絶対に手で作成しない。 手で作成するとかならずミスするので、全て Makefile に 記述する。 - CVS などのソース管理ツールを活用する。 /home/hoge{si,rt}/src/ に手でソースを配置し、手で make install する、というやり方は極力避ける。CVS などでマスタ管理し、 毎日朝 AM6:00 に、自動的に ~hoge{si,rt}/src にソースを checkout し、make install などと、全てを自動化するのがベスト。 この他に何か質問があれば、もう少しポイントを絞って、具体例を あげてください。 >> これは何でしょうか? JP1 とかの話? > そうです。本日書籍購入しました。 非オープン系なアプリの場合、web 上からの情報収集は厳しいかと 思います。 JP1 は使ったことがないのでわかりません (わたしは cron の代替品、程度の 認識しかありませんが)。やっぱり便利なんですかねぇ。 |
>>3558 68user > しかし conf/ は手動管理の設定ファイル群なので、こちらは > 消してはいけません (conf/ も CVS などで管理するのがよい > でしょう)。 lib/ との違いがわかりづらい気がするので補足。 hoge{devel,si,rt} で異なる設定ファイルは conf/ に、そうでない ものは lib/ に置く、という意味です。 もちろん make 時に環境によって異なるファイルを lib/ にインス トールできれば conf/ などいらないのですが、それを実現するためにMakefile に複雑な細工をしなければいけないケースがあったりするので。 |
おひさしぶりです。困ったときばっかり登場してすみません。 たぶんあけましておめでとうございます。 ここ5年ぐらいメンテしてる CGI なんですが、 根本的な改革を迫られました。 A.cgi が生成するページにおいて、 ボタンを押したら(可変パラメータ付きで) B.cgi が生成するページに進み、 リンクを押したら(可変パラメータなしで) C.cgi が生成するページに進むという実装になっています。 ところが、ここで C.cgi にも A.cgi で選択入力する可変パラメータを渡さなければ ならなくなったのです。 A、B、C 非常に肥大化していて、安易な解決法が欲しい状況です。 CGI のみで解決できればうれしいですが、 場合によっては JavaScript でもかまいません。 なにかあればご教示願えれば幸甚です。よろしくお願いします。 |
>>3560 ふくし これを機にリファクタリングした方が、のちのち幸せになれると 思いますよ。 …というのは十分承知しておられると思うので、その場 しのぎな案を 2つばかり。 1. B.cgi で受けたパラメータを print qq(<input type=hidden name="param_from_a" value="$ENV{QUERY_STRING}">\n); などとまるごと C.cgi に渡す。 2. 隠しフレームを作っておいて、A.cgi で選択されたら onClick などでフォーム内容を隠しフレームに転記して おき、(B.cgi は無修正で) C.cgi がその隠しフレームを読む。 |
アクセスが遅くなり申し訳ありません。瀧上です。 丁寧なご回答ありがとうございます。 工程別のユーザの切り分けは私の方でも近い形で考えており、ご回答に近い形で定めようと思っています。→開発環境ではユーザを分けますが。 とりあえず考え方に大きなずれが無い事が判明してほっとしています。 ディレクトリですがConfの概念は無くこれはこちらを参考に構成を考えようと思います。CVSはシステム標準で構成管理ツールとして使用することが決定しています。デバッグモードの考え方は、色濃く方式に出そうです(^^;) ところで申し訳ないのですがもう少し勉強させてもらいたい事がありまして、お言葉に甘えていくつか質問させてください。 →たとえばログイン時に「.cshrc」から「環境変数設定ファイル」をSourceしたとして、この時「環境変数設定ファイル」から設定した環境変数は、サーバDOWNかそれを書き換えるまで確実に保証されるのでしょうか? →LIBがmakeInstall時に取り込まれるものだとしたら、 動的なライブラリはUNIXにおける開発ではあまり使用しないものなのですしょうか?システム共通部品等は動的ライブラリから呼び出すのが一般的かなと思っているのですが。 /COMMON/bin/xxxxx.so←拡張子も「.so」一般的なのか疑問ですが、 dllでは無いと思うので。。。 もしくは実行ファイルとしてbinに持つ? |
>>3651 68user すいません、題意を間違えて伝えたかもしれません。 これでよかったです。 A.CGI start_form(action="B.CGI"); フォーム要素1; end_form; start_form(action="C.CGI"); フォーム要素2; end_form; 要は B と C に別の可変要素を渡すのなら、これでできたんですね。 昨日それでできるんじゃないカナと思ってたんですが、 コードにバグをつくっていました。 なお、ボタンを submit にしないで、name をつけ、 name を JavaScript で読み取って切り分ける、という方法も あるようです。これならフォーム要素を共有できるな。 http://webmaster.hatena.ne.jp/1069376628 ★ 事情を説明すると、5年越しということでおわかりいただけると 思いますが、FileMaker で作っていた経理システムが 2000 年問題で 止まる(私製のテンプレートがダサくて)という話があり、 その時個人的に見積書を CGI で出していたことがバレ、 2000 年の 3 月にはちゃんとした業者ウェアを入れるから それまでそれっぽいものを動かしてよ、と言われました。 で、2000 年の 3 月に、業者ウェアの日本語対応ができないと分かり (ガイシ系なんで・・・) その年いっぱい動かすことになりました。 以下、同じことが 200年、2001年、2002年、2003年に起こりました。 いよいよ今年の5月にこのシステムが正式に引退させることが 決定した(・・・)のですが、その前にどうしても大きな山を 乗り越えるためにプログラムを改造することになったのです。 でも「どうせ5月に引退すると決まっているシステムに大金を 投じるわけにはいかない」ので、それだけに長い時間を避けないんです。 人生いろいろですね:) |
教えてください。 指定したポートを開放するために必要なinetd.confの設定方法を教えてください。また、他に必要な設定が必要でしょうか。 ご教授お願い致します。 |
>>3562 瀧上 > たとえばログイン時に「.cshrc」から「環境変数設定ファイル」を > Sourceしたとして、この時「環境変数設定ファイル」から設定した > 環境変数は、サーバDOWNかそれを書き換えるまで確実に保証される > のでしょうか? setenv で更新したら変更されます。.cshrc を更新しても、 明示的に source したり、ログインしなおさないと反映 されません。 よって、プログラムの先頭で source するか、cron であれば * * * * * . /home/hoge/env.sh && /home/hoge/bin/foo としておくのがよいでしょう (JP1 でも何かしら環境変数を 指定するような設定があるのではないかと想像します)。 > LIBがmakeInstall時に取り込まれるものだとしたら、 そういう意図ではなく、実行時に必要ないろいろなファイルの 置き場所、として書きました。 もし動的ライブラリを使うなら lib/ に置くことになる でしょうね。 でなくて、静的にリンクするなら、ライブラリは src/ の 下だけ置いて、アプリのmake install 時にリンクしmasu. ライブラリ自体は lib/ に make install しません (実行時 には必要ないので)。 で、それはそれとして > 動的なライブラリはUNIXにおける開発ではあまり使用しない > ものなのですしょうか? についてですが、わたしの場合は静的にリンクする方法を 好みますが、別に動的リンクがダメと言うほどではないです。 業務系では多少のメモリ使用量の多寡ははどうでもよいので、 構成管理のやりやすさだけを考慮すれば構わないと考えます。 で、例えば、 1. ライブラリ関数 func をプログラム A・B・C が使用している。 2. プログラム A に不具合が発生。すぐに修正版をリリース しなければならない。 3. 原因は func であることが判明。しかし func の呼び出し方の 違いから、プログラム B・C ではこの現象は発生しない。 という状況を考えます。 静的にリンクしている場合、もし人的リソースに余裕があり、 func 修正時にプログラム A・B・C のテストをすることができる なら、修正版 func のリリース時にプログラム A・B・C を再 コンパイルすることができます (これが最も望ましい)。 しかし、プログラム B・C をテストする余裕がない場合、 func を修正して再コンパイルし、プログラム A を再コンパイル とすることで、プログラム B・C に影響を与えず func を修正 するという選択肢をとることができます。 ただしこれは プログラム A が使用している func と、プログラム B・C が使用している func が異なる という管理しづらい状況になるため、次期リリース時に全てを 再コンパイルするまでの時間かせぎです。 つまり、静的リンクの場合、 目の前のリスクを少なくしたいなら → プログラム A のみを再コンパイル 構成を単純にしたいなら → プログラム A・B・C を再コンパイル と、状況に応じた選択が可能です。 しかし動的ライブラリだと、動的ライブラリを入れ替えて、 プログラム B・C に不具合が出るかもしれないリスクを負う という選択肢しかありません。 よって、わたしは静的にリンクする方を選びます。 ただし静的リンクの場合、再コンパイル忘れなどで各プログラムが 使用しているライブラリのバージョンが異なる、という状況が発生 する可能性がありますが、この対策として、定期リリース時に商用 環境の - 全ソース・全プログラムを削除 - 最新版のソースを全て再コンパイル - 全プログラムを make install とすれば OK でしょう (最上位ディレクトリで make && make install すれば全アプリ入れ替え完了)。 # 仮に動的リンクを選択したとしても、上記の「定期リリース # ごとに全部インストールしなおす」というやり方は強く # おすすめしておきます。 |
>>3564 たけ > 指定したポートを開放するために必要なinetd.confの > 設定方法を教えてください。 質問が曖昧すぎて答えられません。inetd のマニュアルと /etc/inetd.conf にある他の設定例を見てください。 それでもわからなければ、何がしたいのかを明記した上で 再度質問してください。 |
はじめまして。初心者ですが、コマンドはどこに打てばいいんですか? |
以下のようなファイルからaddとmodとdelのerrrorがある行を 取り出したいのですが、 ------ ここから ----------- ---- server1 ---- add:yamada:success add:saito:error mod:yamamoto:success mod:ikeda:error del:yamaguchi:success del:butou:error ---- server2 ----- add:yamada:success add:saito:error mod:yamamoto:success mod:ikeda:error del:yamaguchi:success del:butou:error ------ ここまで ---------- grep -v "\-\-\-" ファイル名 | grep -v success で一応とりだせるのですが、改行の2行が含まれて しまいます。空改行を含まず1回の処理でやりたいのですが どうすればよいのですか。 |
>>3568 すすむ 環境を書き忘れました。 SunOSで、Bシェルです。 |
>>3568 すすむ errorを取り出したいなら素直に grep ":error" filename とすれば良いのでは? まぁ名前にerrorが含まれる人がいると引っかかってしまうので 正規表現使うべきなんだろうけど。 |
>>3568 すすむ 賢いかはわかりませんが、 grep -v "\-----" ファイル名 | grep -v success | awk '{ if(NF != 0) print $0 }' でできませんか。 |
>>3568 すすむ 「success」と「error」と簡単に書きましたが、 成功の場合は、「success」で、失敗の場合は、エラーメッセージが でます。 「error」だけでは、引っ掛けられません。 |
>>3567 うこん あなたが置かれている状況がわからないので、回答できません。 >>3568 すすむ わたしなら egrep '^(add|mod|del):' | grep -v ':success$' とします。 |
>>3572 すすむ であれば、 egrep -v '^(-|$|.*:success$)' filename とか? |
>>3573 68user >>3574 zsh zshさん、68userさん ありがとうございます。 egrepですか。 使用したことがないのですが、 「'^(-|$|.*:success$)' 」 の使い方につてい教えてください。 |
>>3561 68user > 1. B.cgi で受けたパラメータを > print qq(<input type=hidden name="param_from_a" > value="$ENV{QUERY_STRING}">\n); > などとまるごと C.cgi に渡す。 「などと」と書いてあるので, 細かいところは省略してあるのでしょうが このままの記述ですと, パラメータの区切りが「&」という前提にて パラメータの名前が「copy」や「reg」だった時に悲しい結果が待ってます。 理由はこのへん http://www.ne.jp/asahi/minazuki/bakera/html/opinion/ampersand |
>>3565 ご回答ありがとうございます。 ライブラリの考え方は参考になります。 要件が無ければ原則禁止にしてしまおうかななんて。。。検討中です。。 ところでshellでバッチを走らせる時はユーザ設定を行わないようにするのがいいのですね。UNIXの部屋にある↓を見て気づきました。 「#!/bin/csh -f というのをよく見かけるが、その場合ユーザ独自の ~/.cshrc は読まれないので、エイリアスやシェル変数は使用できなくなる。」 なので今回はshellの構成は下記の様にするつもりです。ご報告まで。。。 ---------------------------------- #!/bin/csh -f #------------------- #shell # #------------------- source COMMON.src #→システム共通のパス(oracle等)や文字指定(LANG等) source 環境.env #→システム共通環境変数設定等 処理・・・・ ----------------------- |
Makeの環境について教えて下さい。 現在下記のディレクトリを作成して開発環境としようと考えていました。 /src /* makefileとsrcを保管 */ /obj /* make時の中間ファイルを保管 */ /bin /* 実行ファイルを保管 */ するとあるガイドに「.oと.cを別ディレクトリに置くとmake時のタイムスタンプの比較が困難になるのでやめるべきだ」、と書いてありました。 「個々の依存関係をいちいち指定しなければならない。」ともあり、「いちいち」等と書かれると非常に非効率な事の様に感じるのですが。。。 「.cと.oは同一ディレクトリに持つ」が一般開発業務で用いられる主要な方式なのでしょうか? 単体環境だと不特定多数の人間が多様なsrcファイルを作るのであまり余計なファイルを置いてごちゃごちゃさせたくないと言うのが理由で分けてるだけなので同一ディレクトリも特に問題は無いのですが。。。(消されても問題は無いファイルですし。。) 依存関係をmakefileに指定して別ディレクトリ管理と言うのはやらないのですかね? |
No.3568さんに似たような質問なんですが、 ファイルが以下のようにあったとします。 _________________________________________ aaa bb ccc 02/22 ddd e1.3 fff _________________________________________ その時に、実行するたびにe1.3の数字をe1.4、e1.5と実行 するたびに数字を0.1ずつ変更したいんですがCシェルで そのような事をしたいのですが、どうしたらいいのでしょうか。 ご教授お願いします。 |
>>3579 UNIX10ヶ月目 例えば、0.0から9.9まで表示するには以下のような方法があります。 ------ @ i = 0 while ( $i < 10 ) @ j = 0 @ n = $i * 10 while ( $j < 10 ) @ m = $n + $j set cnt = `echo "scale=1; $m/10" | bc` printf "0.1f\n" $cnt @ j++ end @ i++ end ------ ※:シェル変数cntに代入してprintfしているのは、0.0を出力するためです。 >>3575 すすむ 申し訳ありませんが、正規表現について解説された書籍を見るか Webサイト等を探してください。 自分で回答しておいてなんですが、68user様の方法が良いと思います。 自分のはコマンドを強引に1つにまとめただけですので。 |
Bシェルにつてい教えて下さい。 Bシェルで一次元配列を使用しているのですが、 HP-UX11.00で動いていたシェルスクリプトをSunOS5.8に移して 動かしたのですが上手くうごきません。 MONTHES[0]=Dec: 見つかりません。 MONTHES[1]=Jan: 見つかりません。 : 置換が正しくありません。 となります。 どうのように修正すれば、動きますか。 ------------------ #!/bin/sh # MONTHES[0]="Dec" MONTHES[1]="Jan" MONTHES[2]="Feb" MONTHES[3]="Mar" MONTHES[4]="Apr" MONTHES[5]="May" MONTHES[6]="Jun" MONTHES[7]="Jul" MONTHES[8]="Aug" MONTHES[9]="Sep" MONTHES[10]="Oct" MONTHES[11]="Nov" i=0 while [ $i -le 11 ] do echo ${MONTHES[$i]} i=`expr $i + 1` done |
これなら動く筈。(未確認) ------------------ #!/bin/sh # MONTHES0="Dec" MONTHES1="Jan" MONTHES2="Feb" MONTHES3="Mar" MONTHES4="Apr" MONTHES5="May" MONTHES6="Jun" MONTHES7="Jul" MONTHES8="Aug" MONTHES9="Sep" MONTHES10="Oct" MONTHES11="Nov" i=0 while [ $i -le 11 ] do eval echo $"MONTHES$i" i=`expr $i + 1` done |
>3582 zshさん ありがとうございます。 上手くいきました。 |
>3582 UNIXといってもHP-UXとSunOS(Solaris)で違うのだから Bシェルだからといって同じ機能jが使えるわけではない のですね。 |
>>3584 つとむ HP-UXは知らないのですが、配列使えるあたりがkshっぽいですね。 他の部分(スクリプト)がどうなっているかにもよりますが kshに変えたほうが修正が少なくて済むかも知れません。 下ののシェルだったら、 一行目を「#!/bin/ksh」に変えるだけで動きそうです。 |
はじめまして。本日暗号化について調べていたらこのホームページにたどり着きました。暗号化したいのは会社でPOPメールの受信ができないためメールを受信して暗号化し、Webメールなどに投げるようなプログラムでも作ろうかと思い立っていたため、こちらのホームページの内容は非常に役に立ちました。ありがとうございます。 |
>>3577 瀧上 > 「.oと.cを別ディレクトリに置くとmake時のタイムスタンプの > 比較が困難になるのでやめるべきだ」 かどうかは知りませんが、とりあえずわたしは .o と .c を別にするやり方を知りません。 # *BSD などは .c と .o が別になっているので、やろうと # 思えばできるとは思いますが。 で、分ける必要があるかどうかですが、 > あまり余計なファイルを置いてごちゃごちゃさせたくない という理由であれば、cvs add しなければリポジトリに 登録されないので、「*.o は cvs add してはいけない」 という教育さえしておけば十分ではないでしょうか。 時間が経つにつれソース置き場にゴミがたまるのが嫌だ ということであれば、定期的にソース置き場を削除し、 checkout することをお勧めします。 わたしは開発環境であっても、毎日ソース置き場を削除、 checkout、make、make install して、まっさらにする 方法が好みです。 # メンバ全員のアカウントをあらかじめ作成しておき、 # 開発は、各メンバのホームディレクトリで行わせる。 >>3585 zsh > HP-UXは知らないのですが、配列使えるあたりがksh > っぽいですね。 /usr/xpg4/ に POSIX 系を集めている Solaris とは 違い、HP-UX は OS 全体として POSIX を重視している ような印象を受けます。sh と ksh は別コマンドに なってはいますが、sh はかなり POSIX 寄りです。 Bourne shell は /usr/old/bin/sh にあったりします。 >>3575 すすむ > 「'^(-|$|.*:success$)' 」 'a(x|y|z)' は ax か ay か az にマッチするので、 '^(-|$|.*:success$)' は ^- か ^$ か ^.*:success$ にマッチします。後は正規表現を勉強してください。 |
>>3586 まさどん ありがとうございます。 ついでと言ってはアレですが、掲示板の名称を 「UNIX、CGI、ネットワーク、Java Servlet についての掲示板」 改め 「UNIX、CGI、ネットワーク、暗号技術についての掲示板」 としました。 ついでに今日調べたことのメモ。OpenSSL を使って RSA で暗号化 & 復号化。 --------- ここから --------- #include <stdio.h> #include <openssl/rsa.h> #include <openssl/engine.h> int main(){ unsigned char plain_str[]="hogehoge"; unsigned char crypted_str[200]; unsigned char decrypted_str[200]; char errbuf[1024]; RSA *rsa; int n; ERR_load_crypto_strings(); rsa = RSA_generate_key(1024, 65537, NULL, NULL); printf("rsa->n = 0x"); BN_print_fp(stdout, rsa->n); putchar('\n'); printf("rsa->e = 0x"); BN_print_fp(stdout, rsa->e); putchar('\n'); printf("rsa->d = 0x"); BN_print_fp(stdout, rsa->d); putchar('\n'); printf("rsa->p = 0x"); BN_print_fp(stdout, rsa->p); putchar('\n'); printf("rsa->q = 0x"); BN_print_fp(stdout, rsa->q); putchar('\n'); /* printf("RSA_size(rsa)=%d\n", RSA_size(rsa)); */ /* 暗号化 */ n = RSA_private_encrypt(strlen(plain_str), plain_str, crypted_str, rsa, RSA_PKCS1_PADDING); if ( n == -1 ){ printf("in encrypt: err=%s\n", ERR_error_string(ERR_get_error(), errbuf)); goto ERR; } /* printf("%s\n", crypted_str);*/ /* 復号化 */ n = RSA_public_decrypt(n, crypted_str, decrypted_str, rsa, RSA_PKCS1_PADDING); if ( n == -1 ){ printf("in decrypt: err=%s\n", ERR_error_string(ERR_get_error(), errbuf)); goto ERR; } /* 検証 */ if ( strncmp(plain_str, decrypted_str, n) == 0 ){ printf("OK! plain_str=[%s] decrypted_str=[%.*s]\n", plain_str, n, decrypted_str); } else { printf("NG! plain_str=[%s] decrypted_str=[%.*s]\n", plain_str, n, decrypted_str); goto ERR; } return 1; ERR: RSA_free(rsa); return 0; } --------- ここまで --------- 実行例: rsa->n = 0xCA0CBEC6C0384F0387557A9E27A60A9039AB9FAC4D4AE1DA1E08F00093632FAA734AF75E86632E7AFC660A00BF1D703902B57B64CFACD0069314A105295F7624157D3A484C6E1FEBA5A46047E6AE91161DCD51BA7D75B83358F3506D069AEB987D183C0FC21C1BE1F2DF5A0BFF991DB13EFD1E9F079E92BE25CB2BB7D7AD703F rsa->e = 0x10001 rsa->d = 0x35DA87CEF9D5085A6C6C002EBF6AA64E22D0F7D23917C87316A653321416CFD1A2C14C85C9540E43819AC0F7C9F8D2BC9F5837F77AD318EF67AC8BEE90447D7C4F705C57130095BFB51697ECB64CF686414980E1BC814F6AD3EDB3BC2232F88D32892592093E6103AAF89C23B9544254386611B145B9327AA074398D15E60A41 rsa->p = 0xE4A4D51718E83BF3CF91E0C187EB910FFAED34C37858667A6C27F83020DCF7D2DABA5D0B2CD0FAD0A075E06938420F09111F0A5DEA9B443CAAF6674C343944E7 rsa->q = 0xE2395BC32DAA75945F637F88F9BB7C05157464C99168E229E5ED86A3A1EE19498BC357E849505F3C2CA7DC868068880E14FA7ADA01B7BD9897A18FB3573336E9 OK! plain_str=[hogehoge] decrypted_str=[hogehoge] RSA_generate_key() で RSA 鍵を生成できる。 引数: 鍵の bit 数 (この例では 1024 bit)、e (3,17,65537 など)、その他 鍵長についてはよくわからない。上記の例 (平文が hogehoge) では、bit 数を 145 以上にしないと encyrypt 時にエラーになる。なぜ 145? 平文を m として、 m<n ならよいのではないの? 戻り値は typedef struct { BIGNUM *n; BIGNUM *e; BIGNUM *d; BIGNUM *p; } RSA; 的な構造体のポインタ。これが RSA 鍵。詳細は rsa(3)。 それぞれ、以下のような感じ。 e: encryption exponent (OpenSSL 的には public exponent。暗号化指数) ここでは 65537 (=0x10001)。 n: RSA-modules (OpenSSL 的には public modulus と表記) d: decryption exponent (OpenSSL 的には private exponent。復号化指数) p,q: 素数のペア 公開鍵は e,n。秘密鍵は d,n。ただし、「秘密鍵は d」と定義している web・本も散見される。どちらが正しい? まぁ n は公開するわけなので、 どっちでもいいのか? BIGNUM は OpenSSL 付属の多倍長整数ライブラリ。上記の例のように BN_print_fp などを使うことで、内容を確認できる。詳細は bn(3)。 ちなみに BIO は OpenSSL 付属の I/O 抽象化レイヤ。詳細は bio(3)。 crypto 関係のエラーコードは unsigned long ERR_get_error(void) を 使うことで取得できる。そのコードを ERR_get_string() に喰わせると error:0407006A:lib(4):func(112):reason(106) という文字列が得られるが、これではわけがわからん。そこで、あらかじめ ERR_load_crypto_strings(); としておけば、ERR_get_string() の結果が error:0407006A:rsa routines:RSA_padding_check_PKCS1_type_1:block type is not 01 という文字列になる。ちなみに % openssl errstr 0407006A error:0407006A:rsa routines:RSA_padding_check_PKCS1_type_1:block type is not 01 とすればコマンドラインからでも取得可能。 RSA の秘密鍵による暗号化は RSA_private_encrypt() を使う。 第四引数はパディング方式。ここでは RSA_PKCS1_PADDING として いるので、PKCS#1 の方式で勝手にパディングしてくれる。 RSA_NO_PADDING を選ぶとパディングが行われないので、呼び出し側が 平文を適切な長さにパディングする必要がある。RSA_private_encrypt の 戻り値は暗号文の長さ。 復号化は RSA_public_decrypt() で。戻り値は復号化した結果の 長さ。復号化されたデータの文字終端などが自動でセットされる わけではないので、printf("%.*s") などと自分で長さを管理すること。 上記の例では、暗号化した文字列を unsigned char crypted_str[200] に入れているが、正しくは RSA_size() で得た長さ分の領域を確保して おくこと。 参考: http://www.cybersyndrome.net/rsa/ |
RSA で暗号化してみよう (1)・(2) を作成しました。間違いや わかりにくい部分の指摘は大歓迎です。 http://x68000.startshop.co.jp/~68user/net/rsa-1.html http://x68000.startshop.co.jp/~68user/net/rsa-2.html しかし暗号はおもしろい。何かリクエストがあれば (わたしの レベルを見極めた上で) 書いてください。 |
暗号技術大全を持ってらしているのですね。奇遇ですね、僕もこの間 購入してしまいました。僕はハードっぽい図と数学っぽいところに惹 かれて、立ち読みじゃ飽き足らず、買ってしまいました。 #眠いときは枕代わりになるし、持って動かせば筋トレにもなるし、 #一冊三鳥にもなる、良い本です。←冗談です・・・ 今のところリクエストはありませんが、確かに暗号技術は面白いの で、そのうちあるかもしれません。その節は宜しくお願いいたします。 それに、妖精現実フェアリアルも参考にされているのですね! 僕は 双方向処理で行き着いたところは異なりますが、これも奇遇ですね。 というか、そのサイトは凄すぎです。作者は何者なんだ?と思いつつ、 読んでいます。 #全く関係ないですが、Java Servletは興味から外れたのですか? ご存知だとは思いますが、妖精現実フェアリアルから引用しますので、 ご参考までに。 このウェブサイトは、まもなく終了します。 このページに書いてあった 情報は、特に断り書きがない限り、自由に使ってください(コピー、 改変を含む)。 転載先においても転載自由にしてかまいません。 |
>>3590 へにか > 暗号技術大全を持ってらしているのですね。 まぁ理解できていませんけどね。 理論を学びたいと思って、他にも以下の本を買ってみました。 理解できたかどうかは聞かないでください。 暗号理論入門 http://www.amazon.co.jp/exec/obidos/ASIN/4320120442/249-3448296-8649958 暗号の代数理論 http://www.amazon.co.jp/exec/obidos/ASIN/4431708472/249-3448296-8649958 代数と数論の基礎 http://www.kyoritsu-pub.co.jp/series/21seiki/01561-4.html 暗号は技術的にも非常に面白いですが、暗号として強いのか 弱いのかが第三者からはっきり評価される世界ですので、 やじうま的視点で見ても、とてもおもしろいです。 http://x68000.startshop.co.jp/~68user/net/crypt-1.html で紹介した すずきひろのぶ氏の AES 選定にまつわる話も そうですが、IPA の CRYPTREC http://www.ipa.go.jp/security/enc/CRYPTREC/ に応募したものの、門前払いをくらった暗号がどんなものなのか 調べると、非常に興味深いものがあります。 こんなおもしろい世界を学者のモノだけにしておくのは もったいない。ぜひ興味を持っていただけると幸いです>All > このウェブサイトは、まもなく終了します。 これは前々から気になっています。終了されると非常に困る んですが、webarchive.org (正式にはWayback machine って いうのかな?) があるから まぁ大丈夫かな、と思っています。 # http://web.archive.org/web/*/http://www.faireal.net/articles/7/01/ > Java Servletは興味から外れたのですか? 諸般の事情から、このサーバでは Java Servlet が動かないのです。 そして仕事でも Servlet はやっていないので、遊べる場所がないのです。 今のわたしの興味は 暗号 > 逆転裁判3 > 質の高い業務系システムを構築する方法 >>>> WEB > UNIX > Java です。 |
メモ。blowfish による暗号化 & 復号化。 #include <stdio.h> #include <openssl/blowfish.h> int main(int argc, char *argv[]){ BF_KEY key; unsigned char keybuf[]="SECRETKEY!"; unsigned char plain[128]="This is plain!"; unsigned char encrypted[128]; unsigned char decrypted[128]; unsigned char ivec[8]; BF_set_key(&key, strlen(keybuf), keybuf); printf("plain=[%s]\n", plain); memset(ivec, 0, sizeof(ivec)); BF_cbc_encrypt(plain, encrypted, strlen(plain), &key, ivec, BF_ENCRYPT); printf("encrypted=[%s]\n", encrypted); memset(ivec, 0, sizeof(ivec)); BF_cbc_encrypt(encrypted, decrypted, strlen(plain), &key, ivec, BF_DECRYPT); printf("decrypted=[%s]\n", decrypted); return 0; } |
ちゃんと読んでません、と書かれているのに突っ込みを入れるのは 失礼かもしれませんが・・・ #こんなこと言っておきながら、嘘だったらごめんなさい。 http://x68000.startshop.co.jp/~68user/net/crypt-1.html で紹介している http://www3.sympatico.ca/wienerfamily/Michael/MichaelPapers/TwokeytripleDES.pdf ですが、確かに2つの鍵を使う3DESは攻撃方法がある、ということも 書いていますが、どっちかって言いますと、既存の方法、すなわち、 §2の、Merkle-Hellman Attackの方法よりも、早い方法がありますよ、 という論文のような気がします。 恐らく、Merkle-Hellman Attackの方法はA=0となる解を2の56乗用意 して、何とかするけれど、この論文の方法はKnown-Plaintextを用いると、 もっと早く解析できますよ、といっているような。 #そのKnown-Plaintextがなんじゃらほい、というところまでは #精査していませんが。 それ以降はハードウェアのインプリメンテーションの話ですね。 |
>>3593 へにか ありがとうございます。お返事は後ほど。 で、メモその 2。EVP 版 blowfish 暗号化・復号化。なお、 http://www.openssl.org/docs/crypto/EVP_EncryptInit.html は古いバージョンの API。OpenSSL の web は本当にひどい。 #include <stdio.h> #include <openssl/evp.h> int do_crypt(FILE *in, FILE *out, int enc_mode){ unsigned char key[]="SECRET!"; unsigned char iv[8]; EVP_CIPHER_CTX ctx; char outbuf[256]; int outlen; memset(iv, 0, sizeof(iv)); EVP_CipherInit(&ctx, EVP_bf_cbc(), key, iv, enc_mode); while (1){ char inbuf[128]; int inlen; inlen = fread(inbuf, sizeof(inbuf[0]), sizeof(inbuf)/sizeof(inbuf[0]), in); if ( inlen==0 ){ break; } EVP_CipherUpdate(&ctx, outbuf, &outlen, inbuf, inlen); fwrite(outbuf, sizeof(outbuf[0]), outlen, out); } EVP_CipherFinal(&ctx, outbuf, &outlen); fwrite(outbuf, sizeof(outbuf[0]), outlen, out); return 0; } int main(int argc, char *argv[]){ int enc_mode; if ( argc == 1 ){ printf("Specify enc or dec.\n"); exit(1); } if ( strcmp(argv[1], "enc") == 0 ){ enc_mode = BF_ENCRYPT; } else if ( strcmp(argv[1], "dec") == 0 ){ enc_mode = BF_DECRYPT; } else { printf("Specify enc or dec.\n"); exit(1); } do_crypt(stdin, stdout, enc_mode); return 0; } |
>>3587 68user ご回答ありがとうございます。 .oがsrcと同一ディレクトリに存在するのは基本なのですね。 検討した結果、下記の様な仕様にしました。 単体環境:make終了後*.oは自動削除する。単体で1プログラムを対象(実際には共通ライブラリも含まれますが。。)にmakeするのにタイムスタンプを管理する必要は無いと言う結論です。 結合環境:全コンパイルが必要となる結合以降はsrcファイルと同一ディレクトリに.oを保管する。単体完となっているはずなので、修正のあったファイルをupdateするのみとする。 以上結論報告です。(報告されても。。。と思われるかも知れませんが。。(^^;)) |
質問するのはお久しぶりです。 つかぬ事をお伺いしますが、VineLinux起動中の停電後の再起動で、 非常に冷や汗モノのメッセージが出現しました。 Mounting proc filesystem: mount /proc/: can't read superblock これがそのメッセージですが、HDDのブート関連の情報が消えたと言う 事になるのでしょうか・・・(死刑宣告?) もしその最悪の状態の場合に、その他のパーティションのデータ復旧は 望めないでしょうか。 ちなみになぜかCDブートも出来ない状態です。 ファイルシステムはex3です。 神様仏様どうか最悪の状態では無いように・・・アーメン 何でこんな時に・・・ |
追加情報ですが、df の表示は /dev/hda6 としか表示されません。 fdisk /dev/hda の結果は、Unable to open /dev/hda です。 う〜ん・・・ |
>>3593 へにか いまだ調査中、というか英文と格闘中です。 >>3595 瀧上 単体環境と結合環境のやり方を変える必要があるのかどうかは疑問です。 Makefile を 2つ作るのか、Makefile は 1つで、環境変数などを見て 単体環境の場合のみ *.o を削除するのか、などの実現方法がわからない のですが、例えば - Makefile に記述した依存関係が不正確だった - しかし単体環境では毎回全ソースを build するので影響がなかった - ところが結合環境に修正ソースを上げたら、依存関係の不正確さから 狙いのソースがコンパイルされず、古い版の *.o がリンクされてしまった などということにならないでしょうか? ソースが非常に大規模なのでこういう仕組みを作らないと運用できない、 などの理由があるなら仕方ないでしょうが、 単体と結合でやり方が違う というのはミスの元ですので、それなりの利点がないなら避けるべきこと と思います。 > 報告されても。。。と思われるかも知れませんが。。(^^;) 掲示板に質問しておいて結果報告すらしない輩が多いですが、 瀧上さんはちゃんと報告していただけるので、こちらとしても 非常にうれしいことです。 >>3596 スナフキン そこらへん詳しくないんですが、/proc はカーネル内部のプロセス 状態を見るための覗き穴なので、そこで Can't read superblock とは 奇怪なことです (/proc に superblock なんか存在するのか? という話)。 そもそもこのエラーが出た結果、マウント対象となる HDD が読め ないなどの異常が発生しているのでしょうか? もしそうなら /proc マウントにさえ行き着けず、もっと前に /dev/hda などに関する エラーメッセージが表示されているのではないかと思うのですが。 > fdisk /dev/hda の結果は、Unable to open /dev/hda です。 /dev/hda が / なのでしょうか? /etc/fstab を見せていただけませんか? あと、/etc/fstab から /proc に関する行をコメントアウトすると どうなりますか? で、本当に superblock が飛んでいたりするなら、わたしの手には 負えないです。「ext3 superblock 復旧」などでぐぐると、いくつか ヒットするようです。 |
早速の御返答ありがとうございます。 /etc/fstab の中身です。(多分大丈夫だと思いますが書き写し漏れがあるかも) LAVEL=/ / ext3 defaults 1 1 LABEL=/boot /boot ext3 defaults 1 2 none /dev/pts devpts gid=5,mode=620 0 0 LABEL=/home /home ext3 defaults 1 2 none /proc /proc defaults 0 0 LABEL=/usr /usr ext3 defaults 1 2 LABEL=/var /var ext3 defaults 1 2 /dev/hda7 swap swap defaults 0 0 /dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0 (タブを全角スペースに置き換えしてます) >あと、/etc/fstab から /proc に関する行をコメントアウトすると ダメです。Read Only になっているので書き込みが出来ませんし、 そもそも vi が何も反応せずに起動しません… 植物状態って事?(T@T) 不思議なことに、インストーラーCD内のfdiskだとパーティション情報が 正常に表示されますが、HDDのモノだと前記の通りです。 |
>>3599 スナフキン > /etc/fstab の中身です LABEL=... という記述を初めて見たのですが、Linux には ラベルという仕組みがあるのですね。 要は /dev/hdx がどのマウントポイントに相当するのか、 知りたかったのですが、これではわからないですね。ログ ファイルなどに記録が残っていませんか? > Read Only になっているので書き込みが出来ませんし、 mount -o rw,remount /dev/hdx /hoge などで再マウント できませんか? > インストーラーCD内のfdiskだとパーティション情報が > 正常に表示されますが、HDDのモノだと前記の通りです。 正常に表示、とは何が表示されるのですか? わたしは Linux に詳しいわけではないのですが、全体的に 情報が少なすぎます。 Q1. そもそもマシンに何個の HDD が付いているのですか? Q2. そのうちどれが壊れたかわかりますか? その根拠は? Q3. シングルユーザモードで起動して、一部だけでも手動で マウントできませんか? Q4. どこまでマウントに成功しているのですか? / 以外は 全滅ですか? /boot も /usr も /home も /var も 見えないのですか? |
ごめんなさい、どんな情報が必要かわからなかったのと、自分でも 何が問題なのかよく判らないもので・・・ >再マウントできませんか? いろいろと指定を変えて試しています。 ただ、パーティンション情報が間違っている時に rw で書き込んで 大丈夫でしょうか? A1 HDDはIDEが一台のみです。 A2 メッセージをかいつまんで見る感じでは、superblock が読めない と表示されているように思いました。 A3 シングルモードで試してみましたがROでマウントされている状態が 変わりません。 A4 起動中に /proc へのアクセスが出来なくてエラーとなっているようです。 /boot /var /usr /proc のマウントが失敗しているようですが、 / に /usr /var というファイルが存在しますが、/proc というファイルは 存在していません。 関連サイトをあさって情報を探していますが、ファイルシステムは(も) よく判らない状態です・・・ ログは /var へアクセスできないのでお手上げです。 |
"Merkle-Hellman" DESと、Googleで検索をかけたところ、 http://info.isl.ntt.co.jp/~ohta/BOJ-Seminar.pdf を見つけました。21枚目あたりが参考になるかも知れません。 #なんだか、いらない突っ込みしてしまって、余計な苦労を #かけてしまったとしたら、申し訳ないです。 #お忙しいでしょうし、僕の意見も間違っている可能性大い #にあるでしょうから、その内気が向いたらで結構です。 |
>>3601 スナフキン > A3 シングルモードで試してみましたがROでマウントされて > いる状態が変わりません。 シングルユーザモードで起動すれば、Read Only でマウント されているものだと思います。狙いは / のみがマウントされ ている状態にすることで、その後ひとつひとつマウントして みることで、どの部分が壊れているのか原因がわかると考えました。 あとですね、この fstab では LABEL=/home などとファイル システムのラベルを指定しています。わたしの知る限り FreeBSD や Solaris にはこういった機能はないので想像ですが、fstab に ラベルを指定すると、まず全デバイスのラベル名を取得し、 ラベル名が一致したデバイスを mount しようとするのでは ないかと思います。 で、マウントしようとしているデバイスとは異なる場合でも、 ラベル取得時に壊れたファイルシステムが原因でエラーに なるのではないかと想像しました (違うかもしれませんが)。 よって、ラベルを使わず # mount -o rw,remount /dev/hdx /hoge などとデバイス名を指定してマウントしてみてください。 > /usr /var というファイルが存在しますが マウントポイントは最初から必ず存在します。存在するか どうかではなく、その下にファイルがあるかどうか、つまり マウントに成功しているかどうかを教えてください。 > パーティンション情報が間違っている時に rw で書き > 込んで大丈夫でしょうか? 保証はできませんが、大丈夫だと思います。もしファイル システムとして認識できなければマウントできません。また、 /usr を /var に間違えてマウントしたとろで、/var/bin とか /var/sbin とか /var/X11R6 などができてしまう程度 です (当然 umount すれば元通りです)。 ただ、そこでプログラム類が悪さをして /var などの下の ファイルを操作してもらっては困るので、そういう意味でも 「シングルユーザモードで起動」をお勧めします。 |
結果から書くと諦めました。 教えてもらった事と、考えられる事を幾つか試してみましたが、 何らかのエラーのオンパレード・・・ remount も試しましたが、その内 / に居るのに /etc の内容が 見えたり完全におかしくなって来ました。 ちなみに、/ の中には、 /boot 空 /home 空 /usr 壊れたファイルの断片を含んだファイル /var 同上 といった内容でした。 (lsコマンドが正常なうちの結果) まともだった頃の、幾つかのコマンド結果を書いてみます。 #fsck /dev/hda2 Couldn't open /proc/partitions: Input/output error Is /proc mounted? # mount /proc mount: non: can't read superblock # fdisk /dev/hda modprobe: modprobe: Can't locate module char-major-27 modprobe: modprobe: Can't locate module char-major-27 Unable to open /dev/hda しかし、ext3 がクラッシュに強いってのは信じられなくなり ました、4年近く使っている古いext2のシステムは、大きなト ラブルも無く今だ健在なのにたった一度の不正終了で・・・。 運が悪いといえばその通りなんでしょうが・・・(涙) お付き合いありがとうございました。 |
インストーラーで、前のパーティションを残してインストールする選択 肢が有ったので、/home を残して再インストールしたところ、ラッキー な事にデータを残せたようです。 /etc は全滅なので全て再設定を行う必要が有りますが、一番重要なデ ータが残せた事でよしとします。 また、今回のトラブルでファイルシステムのキーワードを沢山見つけま したが、自分はシステムを作るヒトじゃなく使うヒトなので、あまり 深入りするつもりは有りません。 しかし、バックアップの重要性は友人にあれほど言っている自分が今回 の様なトラブルにあった事でよい戒めとなりました。 ジャーナルシステムを過信するとワタシの様な目に遭いますので、皆さ まご注意を(^^;;;; お騒がせいたしまして申し訳有りませんでしたm(_ _)m |
英語と格闘させてしまってるところ、申し訳ないのですが、 暗号技術大全§15.2をご覧ください。 #ごめんなさい。手元にあるのに気が付かなくって。 しかも、Merkle-Hellmanの論文はacmに登録しないと読めない ようなので、僕が一人相撲をとっていたようですね。 #間抜けなことをしでかして、すみません。 |
色々と調べたのですが、どうしても分かりません。 以下の機能のスクリプトを作成中です。 1.ユーザーに入力を促し、ユーザーID、パスワードを入力させる。 2.入力されたパスワードの整合性チェック 文字数、英文字数、数字文字数、ユーザーIDと不一致etc. 3.正しいパスワードであった場合、passwdコマンドを実行し該当ユーザーのパスワードを変更。 問題は、上記の「3」です。 ユーザーが入力したパスワードをそのままpasswdコマンドに渡し、パスワード変更を行いたいのですが、入力されたパスワード文字列をpasswdコマンドに渡すことが出来ません。 通常時のpasswdコマンド実行時の様に旧パスワード/新パスワード/新パスワード(再入力)を促さずに、変数として持っているパスワード文字列をpasswdコマンドに渡すことは出来ないでしょうか? 環境はAIX 5.2でシェルは出来ればkshで実現したいと考えています。 |
>>3607 バンガード AIX は知りませんが、一般的な UNIX では root 権限があれば 元パスワードを聞かれることはないと思います。 http://publib16.boulder.ibm.com/pseries/Ja_JP/cmds/aixcmds4/passwd.htm ただしプログラムで制御するなら、pwdadm を使った方が よいような気がします。 http://publib16.boulder.ibm.com/pseries/Ja_JP/cmds/aixcmds4/pwdadm.htm passwd は人間が操作することを前提としたコマンドなので。 |
>>3607 バンガード passwdコマンドは端末からの入力しか受け付けないため シェルからpasswdコマンドへ直接値を渡すことは出来ません。 expectを使うのが一般的?かなと思います。 (Solaris以外はさっぱりなので参考程度に。) >>3608 68user AIXにはpwdadmというコマンドがあるのですね。 HP-UXのshの話といい、色々と参考になります。 |
>>3609 zsh > passwdコマンドは端末からの入力しか受け付けないため > シェルからpasswdコマンドへ直接値を渡すことは出来ません。 UNIX 一般の話であれば、そうでもありません。Linux では % ( echo oldpasswd ; sleep 3 ; \ echo newpasswd ; sleep 3 ; \ echo newpasswd ) | passwd でできました。Solaris8 だと不可でしたが、本当に端末が ない状況 (cron からとか、CGI からとか) でやるとうまく いったりするかも、とか思ったりします。 なぜ sleep が必要かについてはよくわからないんですが、 そのうち Linux の passwd のソースを読んでみよう。 >>3593 へにか 遅くなりましたが、2key-3DES について。お待たせしたわりに 技術的な話ではないんですが…。 http://x68000.startshop.co.jp/~68user/net/crypt-1.html では、 2key-3DES はやめといた方がいいよ。なぜなら、こんな 攻撃方法があって、現時点では (全数探索を除くと) 最も 現実的な攻撃と思われるからでありますよ。 ということを書きたかったのです。よって、これに対して > 確かに2つの鍵を使う3DESは攻撃方法がある、ということも > 書いていますが、どっちかって言いますと、既存の方法、すなわち、 > §2の、Merkle-Hellman Attackの方法よりも、早い方法がありますよ、 という指摘はちょっと意図が図りかねるなぁと思っておりました。 つまり Merkle-Hellman Attack の選択平文攻撃よりも既知 平文攻撃の方が脅威であるため、 「Merkle-Hellman Attack の方は紹介しなくていいかな。 論文も見つからないし」 と思ったわけです。もしこの認識が誤りであればご教示願います。 |
>>3610 68user > つまり Merkle-Hellman Attack の選択平文攻撃よりも既知 > 平文攻撃の方が脅威であるため、 > 「Merkle-Hellman Attack の方は紹介しなくていいかな。 > 論文も見つからないし」 当時の僕は論文の意図しか見ておらずこの、「論文も見つからない」 ということ、特に誰でも容易にハイパーリンクを辿ることによって 確認できる方法が無い、というところまで、頭が回っていませんでした。 > と思ったわけです。もしこの認識が誤りであればご教示願います。 いえ、少なくとも現在の僕の認識とは同一です。 #僕の勇み足だったと思います。お詫び申し上げます。 |
>>3610 68user バンガードです。 この掲示板を使うのが初めてなので、うまくコメント出来ていなかったら御免なさい。 >UNIX 一般の話であれば、そうでもありません。Linux では > % ( echo oldpasswd ; sleep 3 ; \ > echo newpasswd ; sleep 3 ; \ > echo newpasswd ) | passwd >でできました。Solaris8 だと不可でしたが、本当に端末が >ない状況 (cron からとか、CGI からとか) でやるとうまく >いったりするかも、とか思ったりします。 at コマンドで試してみましたが、残念ながら駄目でした。 引き続きpwdadmについて調査致します。 また、結果を報告させていただきます。 |
>>3608 68user >ただしプログラムで制御するなら、pwdadm を使った方が >よいような気がします。 pwdadmについても確認しましたが、残念ながらpasswdと動作は変わらない様です。 (もう少し、細かい設定が出来はしますが) やっぱり、旧/新パスワードを聞いてきて、それぞれの入力が必要であると言う部分では、全く変わりませんでした。 >>3609 zsh expectについては、昨日も調査を致しました。 しかしながら、expectおよびTclの導入が必要ですので、採用を躊躇しています。 |
>>3613 バンガード 3608 でも書いたように、root 権限で実行したら 旧パスワードは聞かれないと思いますが、どうですか? |
>>3614 68user はい。この件は返事が抜けていましたね。 申し訳ございません。 仰る通り、root権限であれば確かに古いパスワードは聞かれません。 ですが、結局は新パスワードに入力が必要であり、ここでユーザーの介在が必要なことに変わりはありません。 やっぱり、expectを導入するしかないのだろうかと考え始めています。 |
>>3615 バンガード > やっぱり、expectを導入するしかないのだろうかと考え始めています。 もし AIX の passwd が、どうしても端末からしか読んでくれないなら、 expect などに頼るか、PAM を使ったパスワード変更プログラムを 書くことになるかと思います。 |